700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > cmi matlab 【每日一策】Matlab量化交易策略之 恒温器策略

cmi matlab 【每日一策】Matlab量化交易策略之 恒温器策略

时间:2020-02-23 22:34:21

相关推荐

cmi matlab 【每日一策】Matlab量化交易策略之 恒温器策略

策略原理:

以最近50个交易周期的开高低收价格算出CMI值,

当CMI小于50且价格高于均线,定义为震荡上行

当CMI小于50且价格低于均线,定义为震荡下行

当CMI大于等于50,定义为趋势

不同行情使用不同的下单信号

回测曲线:

-2-24 10:52:56 上传

下载附件 (79.57 KB)

策略代码:

functionStrategy1(default_unit,default_exitway,freq)%

targetList=traderGetTargetList();

%获取目标资产信息

HandleList=traderGetHandleList();

%获取账户句柄

globalentrybar;

globalistrend;

fork=1:length(targetList);

%--------------------仓位、K线、当前bar的提取-----------------------------%

%获取当前仓位

[marketposition,~,~]=traderGetAccountPosition(HandleList(1),targetList(k).Market,targetList(k).Code);

%策略中每次取数据的长度

lags=201;

dlags=20;

barnum=traderGetCurrentBar(targetList(k).Market,targetList(k).Code);

%数据长度限制

if(barnum

continue;

end

if(barnum

continue;

end

%获取K线数据

[time,open,high,low,close,volume,turnover,openinterest]=traderGetKData(targetList(k).Market,targetList(k).Code,'min',freq,0-lags,0,false,'FWard');

[Dtime,Dopen,Dhigh,Dlow,Dclose,Dvolume,~,~]=traderGetKData(targetList(k).Market,targetList(k).Code,'day',1,0-dlags,0,false,'FWard');

iflength(close)

continue;

end;

%-------------------------交易逻辑-------------------------------%

%----------入场信号--------------------%

len=50;

CMIvalue=CMI(close,high,low,len);

len1=20;

ma1=ma(close,len1);

ma2=ma(close,120);

upline1=ma1+stdev(close,len1);

dnline1=ma1-stdev(close,len1);

upline2=ma1+2*stdev(close,len1);

dnline2=ma1-2*stdev(close,len1);

position=zeros(length(close),1);

fori=1:length(position)

ifclose(i)>upline2(i)

position(i)=3;

elseifclose(i)>upline1(i)&&close(i)<=upline2(i)

position(i)=2;

elseifclose(i)>ma1(i)&&close(i)<=upline1(i)

position(i)=1;

elseifclose(i)<=ma1(i)&&close(i)>dnline1(i)

position(i)=-1;

elseifclose(i)<=dnline1(i)&&close(i)>dnline2(i)

position(i)=-2;

elseifclose(i)<=dnline2(i)

position(i)=-3;

end;

end;

state=0;

ifCMIvalue(end)<50&&close(end)>ma2(end)%震荡上行

state=1;

elseifCMIvalue(end)<50&&close(end)

state=2;

elseifCMIvalue(end)>=50%趋势

state=3;

end;

buycon=0;

sellshortcon=0;

sellcon=0;

buytocovercon=0;

ifstate==1

ifposition(i)==-2&&position(i-1)==-3;

buycon=1;

istrend(k)=-1;

end;

elseifstate==2

ifposition(i)==2&&position(i-1)==3;

sellshortcon=1;

istrend(k)=-1;

end;

elseifstate==3

ifposition(i)==2&&position(i-1)==1;

buycon=1;

istrend(k)=1;

end;

ifposition(i)==-2&&position(i-1)==-1;

sellshortcon=1;

istrend(k)=1;

end;

end;

ifdefault_exitway==1

ifistrend(k)==-1

sellcon=position(i)==1;

buytocovercon=position(i)==-1;

elseifistrend(k)==1

sellcon=position(i)==-1;

buytocovercon=position(i)==1;

end;

end;

%---------------------------入场操作--------------------------------%

ifsellcon&&marketposition>0

orderID1=traderPositionTo(HandleList(1),targetList(k).Market,targetList(k).Code,0,0,'market','sell');

iforderID1==0

continue;

end;

istrend(k)=0;

end;

ifbuytocovercon&&marketposition<0

orderID2=traderPositionTo(HandleList(1),targetList(k).Market,targetList(k).Code,0,0,'market','sell');

iforderID2==0

continue;

end;

istrend(k)=0;

end;

ifbuycon&&marketposition<=0

buyunit=default_unit;

orderID3=traderBuy(HandleList(1),targetList(k).Market,targetList(k).Code,buyunit,0,'market','buy');

iforderID3==0

continue;

end;

entrybar(k)=barnum;

end;

ifsellshortcon&&marketposition>=0

sellshortunit=default_unit;

orderID4=traderSellShort(HandleList(1),targetList(k).Market,targetList(k).Code,sellshortunit,0,'market','sell');

iforderID4==0

continue;

end;

entrybar(k)=barnum;

end;

end

end

来源:Atrader社区-策略服务

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。