load C:\Users\Administrator\Desktop\IF888-2011.mat %载入数据
Fdata = IF888(:,2); %其实我也不知道,猜测啊IF888估计是k线,IFdata估计是k线根据:然后用2进制表示吧
ShortLen=5; % ShortLen为5 天
LongLen=20; %LongLen为20天
[MA5,MA20]=movavg(IFdata,ShortLen,LongLen); % movavg是取出均值,IFdata是大盘里的数据估计, 也就是说取大盘里面的数据,然后根据5,20来取均值
MA5(1:ShortLen-1)=IFdata(1:ShortLen-1); % 定义MA5
MA20(1:LongLen-1)=IFdata(1:LongLen-1); % 定义MA20
figure; %画图
plot([IFdata,MA5,MA20]); %matlab中二维线画图函数
grid on; %表格
legend('IF888','MA5','MA20','Location','Best'); %分别将字符串1、字符串2、字符串3……标注到图中,每个字符串对应的图标为画图时的图标。
title('交易策略回测过程'); %标题
hold on; %hold on 是保存axes内图像用的
Pos=zeros(length(IFdata),1); % 返回一个length(IFdata),1的零矩阵。
InitialE=50e4; %InitialE=50e4;初始资金50万
ReturnD=zeros(length(IFdata),1); %返回一个length(IFdata),1的零矩阵。
scale=300; % 规模为300,股指乘数
for t=LongLen:length(IFdata) % 这一句猜测是以大盘数据总量为长度,LongLen循环递增的次数吧
SignalBuy=MA5(t)>MA5(t-1)&&MA5(t)>MA20(t)&&MA5(t-1)>MA20(t-1)&&MA5(t-2)<=MA20(t-2); % 买入信号 : 5日均线上穿20日均线
SignalSell=MA5(t)<MA5(t-1)&&MA5(t)<MA20(t)&&MA5(t-1)<MA20(t-1)&&MA5(t-2)>=MA20(t-2); %卖出信号: 5日均线下破20日均线
if SignalBuy==1 %买入条件
if Pos(t-1)==0 %平多头开空头1手 后面都一样不注释了 哈哈
Pos(t)=1; %
text(t,IFdata(t),'\leftarrow开多一手','FontSize',8); %
plot(t,IFdata(t),'ro','markersize',8); %
continue; %
end %
if Pos(t-1)==-1 %
Pos(t)=1; %
ReturnD(t)=(IFdata(t-1)-IFdata(t))*scale; %
text(t,IFdata(t),'\leftarrow平空开多一手','FontSize',8); %
continue; %
end %
end %
if SignalSell==1 %
if Pos(t-1)==0 %
Pos(t)=-1; %
text(t,IFdata(t),'\leftarrow开空一手','FontSize',8); %
plot(t,IFdata(t),'rd','markersize',8); %
continue; %
end %
if Pos(t-1)==1 %
Pos(t)=-1; %
ReturnD(t)=(IFdata(t)-IFdata(t-1))*scale; %
text(t,IFdata(t),'\leftarrow平多开空一手','FontSize',8); %
plot(t,IFdata(t),'rd','markersize',8); %
continue; %
end %
end %
if Pos(t-1)==1 %
Pos(t)=-1; %
Pos(t)=1; %
ReturnD(t)=(IFdata(t)-IFdata(t-1))*scale; %
end %
if Pos(t-1)==-1 %
Pos(t)=-1; %
ReturnD(t)=(IFdata(t-1)-IFdata(t))*scale; %
end %
if Pos(t-1)==0 %
Pos(t)=0; %
ReturnD(t)=0; %
end %
if t==length(IFdata)&&Pos(t-1)~=0 %
if Pos(t-1)==1 %
Pos(t)=0; %
ReturnD(t)=(IFdata(t)-IFdata(t-1))*scale; %
text(t,IFdata(t),'\leftarrow平多一手','FontSize',8); %
plot(t,IFdata(t),'rd','markersize',8); %
end %
if Pos(t-1)==-1 %
Pos(t)=0; %
ReturnD(t)=(IFdata(t-1)-IFdata(t))*scale; %
text(t,IFdata(t),'\leftarrow平空一手','FontSize',8); %
plot(t,IFdata(t),'rd','markersize',8); %
end %
end %
end %
ReturnCum=cumsum(ReturnD); %
ReturnCum=ReturnCum+InitialE; %
MaxDrawD=zeros(length(IFdata),1); %
for t=LongLen:length(IFdata) %
C=max(ReturnCum(1:t)); %
if C==ReturnCum(t) %
MaxDrawD(t)=0; %
else %
MaxDrawD(t)=(ReturnCum(t)-C)/C; %
end %
end %
MaxDrawD=abs(MaxDrawD); %
figure; %
subplot(3,1,1); %
plot(ReturnCum); %
grid on; %
axis tight; %
title('收益曲线'); %
subplot(3,1,2); %
plot(Pos,'LineWidth',1.8); %
grid on; %
axis tight; %
title('仓位'); %
subplot(3,1,3); %
plot(MaxDrawD); %
grid on; %
axis tight; %
title(['最大回撤(初始资金',num2str(InitialE/1e4),'万)']) %