回测曲线(由Auto-Trader提供回测报告)
策略代码:
function SixLine(Freq,ShareNum,len,k1,k2)% ------------ Retrace Strategy-------------------%% Freq 为输入时间频率% k1 初始止损ATR% k2 跟踪止损ATR%---------------------策略初始化与是否日内平仓---------------% targetList = traderGetTargetList(); HandleList = traderGetHandleList(); [marketposition,~,~]=traderGetAccountPosition(HandleList(1),targetList(1).Market,targetList(1).Code); %---------------------策略提取数据---------------%global s;n = length(targetList);for j = 1:n [time,open,high,low,close,volume,turnover,openinterest] = traderGetKData(targetList(j).Market,targetList(j).Code,'min',Freq, 0-len, 0,false,'FWard'); if length(close)<len+1 return end dlen = 10; [Dtime,Dopen,Dhigh,Dlow,Dclose,Dvolume,Dturnover,Dopeninterest] = traderGetKData(targetList(j).Market,targetList(j).Code,'day',1, 0-dlen, 0,false,'FWard'); if length(Dclose)<dlen+1 return end [atr,~] = traderATR(10,targetList(1).Market,targetList(1).Code,'day',1,0-dlen,0,false,'FWard'); % 日ATR %---------------------策略计算与基本逻辑---------------% t = datevec(time(end)); Y = t(4)*100+t(5); if Y==1445 traderPositionTo(HandleList(1),targetList(j).Market,targetList(j).Code,0,0,'market','收盘平仓'); end; if Y<945 s(j).bh = 0; s(j).bb = 0; s(j).br = 0; s(j).sh = 0; s(j).sb = 0; s(j).sr = 0; s(j).tt = 0; end if Y>=945 && Y<1445 HH = Dhigh(end-1); LL = Dlow(end-1); CC = Dclose(end-1); mid = (HH+LL+2*CC)/4; B1 = HH; B2 = HH+(mid-LL); B3 = HH+2*(mid-LL); S1 = LL; S2 = LL+(mid-HH); S3 = LL+2*(mid-HH); if close(end)>B2 s(j).bh = 1; end if s(j).bh==1 && close(end)<B1 s(j).br = 1; end if s(j).bh==1 && close(end)>B3 s(j).bb = 1; end if close(end)<S2 s(j).sh = 1; end if s(j).sh==1 && close(end)>S1 s(j).sr = 1; end if s(j).sh==1 && close(end)<S3 s(j).sb = 1; end %----------------------策略主体-------------------------------% % 入场 if marketposition==0 if (s(j).bb==1 || s(j).sr==1) && s(j).tt<1 OrderID=traderDirectBuy(HandleList(1),targetList(j).Market,targetList(j).Code,ShareNum,0,'market','buy'); if OrderID~=0 s(j).openprice=traderOrderFilledPrice(HandleList(1),OrderID); s(j).peak=0; s(j).tt = s(j).tt+1; end elseif (s(j).sb==1 || s(j).br==1) && s(j).tt<1 OrderID=traderDirectSell(HandleList(1),targetList(j).Market,targetList(j).Code,ShareNum,0,'market','buy'); if OrderID~=0 s(j).openprice=traderOrderFilledPrice(HandleList(1),OrderID); s(j).peak=0; s(j).tt = s(j).tt+1; end end end % 出场 if marketposition>0 if close(end)<s(j).openprice-k1*atr(end-1) traderPositionTo(HandleList(1),targetList(j).Market,targetList(j).Code,0,0,'market','close'); end if s(j).peak==0 && close(end)>s(j).openprice+k2*atr(end-1) % 上移止损线到开仓位置,并加仓 s(j).peak = high(end); OrderID=traderDirectBuy(HandleList(1),targetList(j).Market,targetList(j).Code,ShareNum,0,'market','buy'); if OrderID~=0 s(j).tt = s(j).tt+1; end end if s(j).peak>0 s(j).peak = max(s(j).peak,high(end)); if close(end)<s(j).peak-k2*atr(end-1) traderPositionTo(HandleList(1),targetList(j).Market,targetList(j).Code,0,0,'market','close'); end end end if marketposition<0 if close(end)>s(j).openprice+k1*atr(end-1) traderPositionTo(HandleList(1),targetList(j).Market,targetList(j).Code,0,0,'market','close'); end if s(j).peak==0 && close(end)<s(j).openprice-k2*atr(end-1) % 下移止损线到开仓位置,并加仓 s(j).peak = low(end); OrderID=traderDirectSell(HandleList(1),targetList(j).Market,targetList(j).Code,ShareNum,0,'market','sell'); if OrderID~=0 s(j).tt = s(j).tt+1; end end if s(j).peak>0 s(j).peak = min(s(j).peak,low(end)); if close(end)>s(j).peak+k2*atr(end-1) traderPositionTo(HandleList(1),targetList(j).Market,targetList(j).Code,0,0,'market','close'); end end end endend%----------------------自定义函数-------------------------------%
更多免费策略源码下载请登录DigQuant社区-策略资源页面下载~


雷达卡


京公网安备 11010802022788号







