策略原理:
7 [2 `- {; G" | ?. Q$ E 多头入场:5日均线上穿65日均线且当前价格大于200日均线
# V+ M( Y3 w! ~' t# N 空头入场:5日均线下穿65日均线且当前价格小于200日均线9 I5 M5 t) f$ V6 ]
出场:动态跟踪止损出场
3 s ?) A( e( \( U+ M* n
, I! l3 v. M5 B; Z8 ^0 y策略代码:
% A" q6 K, j: S+ e/ G+ `function Strategy1(default_unit,default_exitway,freq)%
6 w2 W1 m0 M/ s% E7 I* y$ ?targetList = traderGetTargetList(); %获取目标资产信息 HandleList = traderGetHandleList(); %获取账户句柄 global entrybar; for k=1:length(targetList); * ] B! g9 B- W C% g5 u
%--------------------仓位、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
& i- e6 `( ]5 e) v3 `5 B5 ~; Z0 X- t" `5 D+ I
|