入场:
ama突破以ama定义的布林带
出场:
2*atr止损,涨幅达到3*atr后把止损线调为跟踪止损
回测曲线(由Auto-trader提供回测报告)
策略源码:
function AMA(Freq,len1,ShareNum,threshold)% ------------ Retrace Strategy-------------------%% Freq 为输入时间频率%---------------------策略初始化与是否日内平仓---------------%% traderDailyCloseTime(145000); targetList = traderGetTargetList(); HandleList = traderGetHandleList(); %---------------------策略提取数据---------------%global s;n = length(targetList);for j = 1:n [marketposition,~,~]=traderGetAccountPosition(HandleList(1),targetList(j).Market,targetList(j).Code); len = 40; [time,open,high,low,close,volume,turnover,openinterest] = traderGetKData(targetList(j).Market,targetList(j).Code,'day',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(j).Market,targetList(j).Code,'day',1,0-dlen,0,false,'FWard'); % 日ATR %---------------------策略计算与基本逻辑---------------% direction = close(end)-close(end-len1+1); volatility = sum(abs(diff(close(end-len1:end)))); ER = direction/volatility; c = (ER*(2/5-2/31)+2/31)^2; if isempty(s(j).Ama) s(j).Ama = close(end); else s(j).Ama = [s(j).Ama, s(j).Ama(end)+c*(close(end)-s(j).Ama(end))]; end s(j).condition = 0; if length(s(j).Ama)>len1 th = threshold*std(s(j).Ama(end-len1+1:end)); if s(j).Ama(end)-min(s(j).Ama(end-len1+1:end))>th s(j).condition = 1; elseif s(j).Ama(end)-max(s(j).Ama(end-len1+1:end))<-th s(j).condition = -1; end %----------------------策略主体-------------------------------% % 入场 if marketposition==0 if s(j).condition == 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; end elseif s(j).condition == -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; end end end % 出场 if marketposition>0 if close(end)<s(j).openprice-2*atr(end) traderPositionTo(HandleList(1),targetList(j).Market,targetList(j).Code,0,0,'market','close'); end if s(j).condition==-1 traderPositionTo(HandleList(1),targetList(j).Market,targetList(j).Code,-ShareNum,0,'market','close'); end if s(j).peak==0 && (close(end)-s(j).openprice)>3*atr(end) % 上移止损线 s(j).peak=high(end); end if s(j).peak>0 s(j).peak=max(s(j).peak,high(end)); if close(end)<s(j).peak-1.6*atr(end) 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+2*atr(end) traderPositionTo(HandleList(1),targetList(j).Market,targetList(j).Code,0,0,'market','close'); end if s(j).condition==1 traderPositionTo(HandleList(1),targetList(j).Market,targetList(j).Code,ShareNum,0,'market','close'); end if s(j).peak==0 && (s(j).openprice-close(end))>3*atr(end) % 上移止损线 s(j).peak=low(end); end if s(j).peak>0 s(j).peak=min(s(j).peak,low(end)); if close(end)>s(j).peak+1.6*atr(end) traderPositionTo(HandleList(1),targetList(j).Market,targetList(j).Code,0,0,'market','close'); end end end endend
更多免费策略下载请登录DigQuant社区-策略资源获取~


雷达卡


京公网安备 11010802022788号







