立即打开
策略原理:
构造布林带通道,跌破下轨做多,突破上轨做空
动态跟踪止损出场
回测曲线(由Auto-Trader提供回测报告)
策略源码:
function Strategy1(default_unit,default_exitway,freq)%targetList = traderGetTargetList(); %获取目标资产信息HandleList = traderGetHandleList();%获取账户句柄global entry;global record;global stopprice;for k=1:length(targetList); %--------------------仓位、K线、当前bar的提取-----------------------------% %获取当前仓位 [marketposition,~,~]=traderGetAccountPosition(HandleList(1),targetList(k).Market,targetList(k).Code); %策略中每次取数据的长度 dlags=10; lags=50; barnum=traderGetCurrentBar(targetList(k).Market,targetList(k).Code); %数据长度限制 if(barnum<lags) 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,Dturnover,Dopeninterest] = traderGetKData(targetList(k).Market,targetList(k).Code,'day',1,0-dlags, 0,false,'FWard'); if length(close)<lags continue; end; %-------------------------交易逻辑-------------------------------% %----------入场信号--------------------% len=30; p=2.5; p2=0; ma0=ma(close,len); std0=stdev(close,len); upline=ma0+p*std0; dnline=ma0-p*std0; upline2=ma0+p2*std0; dnline2=ma0-p2*std0; s(1).buycon=0; s(1).sellshortcon=0;% slope1=slope(close,30);% slope2=slope(close,60);% con1=slope1(end)>0;% con2=slope1(end)<0; if record==1 s(1).buycon=low(end)>dnline(end) && low(end-1)<dnline(end-1); end; if record==-1 s(1).sellshortcon=high(end)<upline(end) && high(end-1)>upline(end-1); end; if barnum==3520; aa=1; end; %------------被动出场操作------------------% %找到未平仓的订单 remain=remainorder(entry,k); %对未平仓的订单进行平仓判断及操作 for i=1:length(remain.entrybar); % 进仓以来的bar个数 longstopcon=0; shortstopcon=0; barsinceentry=barnum-remain.entrybar(i); backlen=30; % 回溯的长度(进仓bar之前) % 回溯的信息提取 [backtime,backopen,backhigh,backlow,backclose,~,~,~] = traderGetKData(targetList(k).Market,targetList(k).Code,'min',freq, 0-barsinceentry-backlen, 0,false,'FWard'); % 根据出场方式计算出场条件 if remain.entryexitway(i)==1; AFinitial=0; AFparam=0.02; AFmax=0.2; Firstbarmultp=1; %影响第一根bar的止损价,调高表示可忍受的回撤越多 [longstopcon,shortstopcon,exitline]=exit1(backopen,backhigh,backlow,backclose,remain.entrydirection(i),backlen,AFinitial,AFparam,AFmax,Firstbarmultp); elseif remain.entryexitway(i)==2; initialATRparam=3; AF=0.1; minATRparam=1; [longstopcon,shortstopcon,exitline]=exit2(backopen,backhigh,backlow,backclose,remain.entrydirection(i),backlen,initialATRparam,AF,minATRparam); elseif remain.entryexitway(i)==3; [longstopcon,shortstopcon,exitline]=exit3(backopen,backhigh,backlow,backclose,remain.entrydirection(i),backlen); elseif remain.entryexitway(i)==4 startpoint=10; percent=0.3; TRmutlp=1; [longstopcon,shortstopcon,exitline]=exit4(backopen,backhigh,backlow,backclose,remain.entrydirection(i),backlen,startpoint,percent,TRmutlp); elseif remain.entryexitway(i)==5; stdlen=20; initialstdparam=3; minstdparam=1; AF=0.25; [longstopcon,shortstopcon,exitline]=exit5(backopen,backhigh,backlow,backclose,remain.entrydirection(i),backlen,stdlen,initialstdparam,minstdparam,AF); elseif remain.entryexitway(i)==6; longstopcon=0; shortstopcon=0; sellcon=0; buytocovercon=0; if remain.entrydirection(i)==1; sellcon=high(end)>upline2(end); longstopcon=close(end)<stopprice; elseif remain.entrydirection(i)==-1 buytocovercon=low(end)<dnline2(end); shortstopcon=close(end)>stopprice; end; longstopcon=longstopcon || sellcon; shortstopcon=shortstopcon || buytocovercon; elseif remain.entryexitway(i)==7; ATRparam=1.5; [longstopcon,shortstopcon,exitline]=exit7(backopen,backhigh,backlow,backclose,remain.entrydirection(i),backlen,len,stopprice,p2,ATRparam); end; % 出场执行 if longstopcon orderID1=traderDirectSell(HandleList(1),targetList(k).Market,targetList(k).Code,remain.entryunit(i),0,'market','totalbuy'); if orderID1==0; continue; end; entry.record{k}(remain.num(i))=0; end; if shortstopcon orderID1=traderDirectBuy(HandleList(1),targetList(k).Market,targetList(k).Code,remain.entryunit(i),0,'market','totalbuy'); if orderID1==0; continue; end; entry.record{k}(remain.num(i))=0; end; end; %---------------------------加仓--------------------------------% %----------------策略1----------------------% %再次找到未平仓的订单 remain=remainorder(entry,k); % 找到策略i的marketposition s=mptaking(s,remain); % 找到最近的加仓点和加仓价格 %{ if s(1).marketposition~=0; lastentrybar=max(remain.entrybar(s(1).num)); lastbarsinceentry=barnum-lastentrybar; lastentryprice=open(end-lastbarsinceentry+1); vector=remain.entrydirection(s(1).num); lastdirection=vector(end); TRvalue=TR(close,high,low); ATR=ma(TRvalue,10); s(1).addbuycon=0; s(1).addsellshortcon=0; if lastdirection>0 s(1).addbuycon=close(end)-lastentryprice>ATR(end) && close(end)>ma0(end); elseif lastdirection<0 s(1).addsellshortcon=lastentryprice-close(end)>ATR(end) && close(end)<ma0(end); end; %---------------加仓操作-------------------------% if s(1).addbuycon && s(1).marketposition>=2 && s(1).marketposition<4 addbuyunit=default_unit*0.5; totalunit=totalunit+addbuyunit; [~]=entryalter(k,barnum,1,1,addbuyunit,2,1); % 合约号,barnum,方向,开关,手数,出场,策略 end; if s(1).addsellshortcon && s(1).marketposition<=-2 && s(1).marketposition>-4 addsellshortunit=default_unit*0.5; totalunit=totalunit-addsellshortunit; [~]=entryalter(k,barnum,-1,1,addsellshortunit,2,1); % 合约号,barnum,方向,开关,手数,出场,策略 end; end; %} %---------------------------入场操作--------------------------------% %----------------策略1----------------------% if s(1).buycon && s(1).marketposition==0 buyunit=default_unit; orderID1=traderDirectBuy(HandleList(1),targetList(k).Market,targetList(k).Code,buyunit,0,'market','totalbuy'); if orderID1==0; continue; end; [~]=entryalter(k,barnum,1,1,buyunit,default_exitway,1); stopprice=ma0(end)-4*std0(end); record=-1; % 合约号,barnum,方向,开关,手数,出场,策略 end; if s(1).sellshortcon && s(1).marketposition==0 sellshortunit=default_unit; orderID1=traderDirectSell(HandleList(1),targetList(k).Market,targetList(k).Code,sellshortunit,0,'market','totalbuy'); if orderID1==0; continue; end; [~]=entryalter(k,barnum,-1,1,sellshortunit,default_exitway,1); stopprice=ma0(end)+4*std0(end); record=1; % 合约号,barnum,方向,开关,手数,出场,策略 end; %---------------------- 虚拟交易所最终执行买卖 ------------------------------%endend
更多免费策略源码请登录DigQuant社区-策略资源下载~
扫码加我 拉你入群
请注明:姓名-公司-职位
以便审核进群资格,未注明则拒绝
全部回复
扫码加我 拉你入群
请注明:姓名-公司-职位
以便审核进群资格,未注明则拒绝
扫码加我 拉你入群
请注明:姓名-公司-职位
以便审核进群资格,未注明则拒绝
扫码加我 拉你入群
请注明:姓名-公司-职位
以便审核进群资格,未注明则拒绝
相关推荐
栏目导航
热门文章
推荐文章
扫码加好友,拉您进群