一个非常简单的均线突破交易系统,用的是中金所IF股指期货当月连续合约的3分钟数据
如果要实现代码的话需要连接wind的iwind。
思路和代码均借鉴与faruto,在此表示感谢。
% 股指期货均线突破策略MA5MA20
% Written by Phillip Wan @2013/9/2
% Email:hackerwanhappy@foxmail.com
%% 准备工作
tic;
clear;
clc;
close all;
format compact;
w=windmatlab;
%% 导入数据
codes='IF00.CFE';
fields='open';
begintime=now-200;
endtime=now-100;
wdata=w.wsi(codes,fields,begintime,endtime,'BarSize','3');
%% 作图
plot(wdata);
title('股指期货3分钟数据');
grid on;
%% 给若干变量赋予初值
t=length(wdata); %设定t为时长
ma5=zeros(t,1); %初始化ma5
ma20=zeros(t,1); %初始化ma20
s=0; %初始化股指期货持仓
equityday=zeros(t,1); %初始化每日盈亏
s0=500000; %初始化账目资金
equity=s0; %初始化资金余额
equityday(1:21)=s0; %给前21天资产余额赋值
[short5,long20]=movavg(wdata,5,20);
ma5=short5;
ma20=long20;
%% 第21天开始的每日策略
for i=22:t
if ma5(i)>ma20(i)&&ma5(i-1)>ma20(i-1)&&ma5(i-2)<=ma20(i-2)
%出现上穿,进行买入操作
equity=equity-300*wdata(i);
s=s+1;
else if ma5(i)<ma20(i)&&ma5(i-1)<ma20(i-1)&&ma5(i-2)>=ma20(i-2)
%出现下穿,进行卖空操作
equity=equity+300*wdata(i);
s=s-1;
end
end
%计算每日盈亏
equityday(i)=equity+300*wdata(i)*s;
end
%% 计算最大回撤
backratio=zeros(t,1);
for p=22:t
c=max(equityday(22:p));
backratio(p)=(equityday(p,1)-c)/c;
end
%% 作图
figure;
subplot(2,1,1);
plot((equityday-s0)/s0);
grid on;
title('资金权益');
subplot(2,1,2);
plot(backratio);
title('最大回撤比例');
grid on;
axis([0 5500 -0.3 0.1]);
toc