metalb量化投资代码 看的不太懂,一行行猜测吧

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),'万)'])                                                     %
                   



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值