1.size函数
size(A)函数是用来求矩阵的大小的,你必须首先弄清楚A到底是什么,大小是多少。
比如说一个A是一个3×4的二维矩阵:
1、size(A) %直接显示出A大小
输出:ans=
3 4
2.zeros函数
创建一个元素全为0的矩阵,比如a=zeros(3,5);就是创建一个3行5列的0矩阵。
3.diff函数
>> x=[2 3 5 7 12 23]
>> d=diff(x)
d =
1 2 2 5 11
4.sharpe函数
它的公式非常简单,就是策略的年化收益与无风险利率的差,除以策略的年化波动率。夏普比率的优缺点都是广为人知的,但是它的实用性也是业界所认可的。它在众多指标中的地位就好比于BSM之于期权定价模型中的地位。
它的缺陷几乎和它自身一样闻名遐迩。对它的批评集中在以下几点。首先,无风险利率的选择是非常重要的。比如某项策略的收益6%,而无风险利率3%,但是融资利率高达6%的时候,策略实际上是无利可图。其次,夏普比率极度依赖于过去的历史表现(似乎没有哪个是不依赖的?)一个策略在过去表现如何,不代表它的将来一定会表现得怎样。再次,夏普比率基于均值方差理论,它实际上要求资产的投资回报率服从正态分布。然而实际情况并非如此。而且波动率估计本身就存在误差,基于其计算的夏普比率也有估计误差的问题。最后,究竟是使用账户规模还是占用资金来计算会产生极大不同。
简言之:Sharpe比率=(期望收益-无风险收益)/方差
5.计算移动均线法之下的年化夏普收益率
clc, clear all, close all
load CSI300.mat
CSI300_1Mn=raw_CSI300_1Mn(:,4);
CSI300_1Mn=CSI300_1Mn(1:end);
CSI300_EOD=raw_CSI300_EOD(:,4);
testPts=floor(0.8*length(CSI300_EOD));
CSIClose=CSI300_EOD(1:testPts);
CSICloseV=CSI300_EOD(testPts+1:end);
[lead,lag]=movavg(CSIClose,20,30,'e');
figure
plot([CSIClose,lead,lag]),grid on
legend('Close','Lead','Lag','Location','Best')
xlabel('时间/天');ylabel('价格/元')
%假设全年有250个交易日
s=zeros(size(CSIClose));
s(lead>lag)=1;
s(lead<lag)=-1;
r=[0;s(1:end-1).*diff(CSIClose)];
sh=sqrt(250)*sharpe(r,0);
sh =
0.4365