策略原理:
8 ]* q) v3 s) K' [* d8 L 多头入场:5日均线上穿65日均线且当前价格大于200日均线; w+ d6 x2 v& a
空头入场:5日均线下穿65日均线且当前价格小于200日均线
& C8 Z& \* T* W+ O 出场:动态跟踪止损出场
2 V' ?1 ?6 \1 ~: N. q' b* \& `$ j7 m# b# K: { B
策略代码:6 \) a( Z2 ]7 _( L' {. g5 y
function Strategy1(default_unit,default_exitway,freq)% ; v4 Z/ W& u7 Q: f2 R; C2 q7 k) A
targetList = traderGetTargetList(); %获取目标资产信息 HandleList = traderGetHandleList(); %获取账户句柄 global entrybar; for k=1:length(targetList);
# ]$ E+ f' q {5 @( P0 a %--------------------仓位、K线、当前bar的提取-----------------------------% %获取当前仓位 [marketposition,~,~]=traderGetAccountPosition(HandleList(1),targetList(k).Market,targetList(k).Code); %策略中每次取数据的长度 lags=200; dlags=20; barnum=traderGetCurrentBar(targetList(k).Market,targetList(k).Code); %数据长度限制 if(barnum<lags) continue; end if(barnum<dlags) 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'); if legth(close)<lags || length(Dclose)<dlags continue; end; %-------------------------交易逻辑-------------------------------% %----------入场信号--------------------% TRvalue=TR(Dclose,Dhigh,Dlow); ATR=ma(TRvalue,10); ma2=ma(close,200); ma0=ma(close,5); ma1=ma(close,65); buycon=ma0(end)>ma1(end) && ma0(end-1)<ma1(end-1) && close(end)>ma2(end); sellshortcon=ma0(end)<ma1(end) && ma0(end-1)>ma1(end-1) && close(end)<ma2(end); if default_exitway==1 sellcon=ma0(end)<ma1(end) && ma0(end-1)>ma1(end-1); buytocovercon=ma0(end)>ma1(end) && ma0(end-1)<ma1(end-1); elseif default_exitway==2 TRvalue=TR(close,high,low); ATR=ma(TRvalue,4); barsinceentry=barnum-entrybar(k); [~,entryopen,entryhigh,entrylow,entryclose,~,~,~] = traderGetKData(targetList(k).Market,targetList(k).Code,'min',freq, 0-barsinceentry, 0,false,'FWard'); range=4*ATR(end-1); [sellcon,buytocovercon]=exitway1(entryopen,entryclose,entryhigh,entrylow,marketposition,range); elseif default_exitway==3 barsinceentry=barnum-entrybar(k); [~,entryopen,entryhigh,entrylow,entryclose,~,~,~] = traderGetKData(targetList(k).Market,targetList(k).Code,'min',freq, 0-barsinceentry, 0,false,'FWard'); enterprice=entryclose(1); percent=0.5; ATRparam=1; sellcon=0; buytocovercon=0; if marketposition>0 stoplossprice=enterprice-ATRparam*ATR(end); stopearnprice=enterprice+ATRparam*ATR(end); [sellcon,buytocovercon]=exitway3(entryopen,entryclose,entryhigh,entrylow,marketposition,stoplossprice,stopearnprice,percent); elseif marketposition<0 stoplossprice=enterprice+ATRparam*ATR(end); stopearnprice=enterprice-ATRparam*ATR(end); [sellcon,buytocovercon]=exitway3(entryopen,entryclose,entryhigh,entrylow,marketposition,stoplossprice,stopearnprice,percent); end; end; %---------------------------入场操作--------------------------------% if sellcon && marketposition>0 orderID1=traderPositionTo(HandleList(1),targetList(k).Market,targetList(k).Code,0,0,'market','sell'); if orderID1==0 continue; end; end; if buytocovercon && marketposition<0 orderID2=traderPositionTo(HandleList(1),targetList(k).Market,targetList(k).Code,0,0,'market','sell'); if orderID2==0 continue; end; end; if buycon && marketposition<=0 buyunit=default_unit; orderID3=traderBuy(HandleList(1),targetList(k).Market,targetList(k).Code,buyunit,0,'market','buy'); if orderID3==0 continue; end; entrybar(k)=barnum; end; if sellshortcon && marketposition>=0 sellshortunit=default_unit; orderID4=traderSellShort(HandleList(1),targetList(k).Market,targetList(k).Code,sellshortunit,0,'market','sell'); if orderID4==0 continue; end; entrybar(k)=barnum; end; end end
! W8 K$ ^9 d* ]) Y7 N G5 G9 o4 R, p! Z( x' A5 T7 c' M- Z5 k
|