多头条件:向上趋势比重大于90%且中长期趋势线在收盘价下方且快速EMA均线在收盘价下方且
慢速EMA均线在收盘价下方且快速EMA均线上穿慢速EMA均线且中长期趋势线在慢速EMA均线上方
空头条件:向下趋势比重大于90%且中长期趋势线在收盘价上方且快速EMA均线在收盘价上方且
慢速EMA均线在收盘价上方且慢速EMA均线上穿快速EMA均线且中长期趋势线在慢速EMA均线下方
回测曲线(由Auto-Trader软件提供回测报告):
策略源码:
function HPStrategy(Freq,len,len1,len2,shareNum) %上面五个为输入参数 % ------------ HPStrategy-------------------% Freq 为输入时间频率% shareNum 为操作的手数% len1 为快速均线参数% len2 为慢速均线参数 len1<len2% len 为滚动窗口大小%---------------------策略初始化与是否日内平仓---------------%traderDailyCloseTime(145000); % 每天14:50分平仓 如果没有日内平仓,去掉这句话就可以了。targetList = traderGetTargetList(); %获取交易标的句柄HandleList = traderGetHandleList(); %获取账户句柄[marketposition,~,~]=traderGetAccountPosition(HandleList(1),targetList(1).Market,targetList(1).Code); %获取当前仓位状况lags=300;barnum=traderGetCurrentBar(targetList(1).Market,targetList(1).Code); %当前Bar的编号if(barnum<=lags) %当编号不超过所取的数据长度时,返回 return;end%---------------------策略提取数据---------------%[time,open,high,low,close,volume,turnover,openinterest] = traderGetKData(targetList(1).Market,targetList(1).Code,'min',Freq, 0-lags, 0,false,'FWard'); %提取数据,从当前开始往前取lags个数据%---------------------策略计算与基本逻辑---------------%Xo=close(end-len+1:end);[C1 T1]=hpfilter(Xo,14400); %HP滤波获得中长期趋势[C2 T2]=hpfilter(C1,14400); %二次HP滤波EMA1=EMA(C2,len1); %len1=5,快速EMA均线EMA2=EMA(C2,len2); %len2=20,慢速EMA均线Y0=C2;df=diff(C2);df1=find(df>0);df2=find(df<0);tick1=length(df1); %上涨次数tick2=length(df2); %下跌次数con1=tick1/(tick1+tick2)>0.9; %向上趋势比重大于90%con2=tick2/(tick1+tick2)>0.9; %向下趋势比重大于90%con3=(Y0(end)<close(end)) ; %中长期趋势线在收盘价下方con4=(Y0(end)>close(end)); %中长期趋势线在收盘价上方con5=(EMA1(end)<close(end)); %快速EMA均线在收盘价下方con6=(EMA1(end)>close(end)); %快速EMA均线在收盘价上方con7=(EMA2(end)<close(end)) ; %慢速EMA均线在收盘价下方con8=(EMA2(end)>close(end)); %慢速EMA均线在收盘价上方con9=(EMA1(end)>EMA2(end)); %快速EMA均线上穿慢速EMA均线con10=(EMA1(end)<EMA2(end)); %慢速EMA均线上穿快速EMA均线con11=(Y0(end)>EMA2(end)); %中长期趋势线在慢速EMA均线上方con12=(Y0(end)<EMA2(end)); %中长期趋势线在慢速EMA均线下方%----------------------策略主体-------------------------------%if marketposition<=0 if con1 if con3 if con5 if con7 if con9 if con11 [barnum,bartime] = traderGetCurrentBar(targetList(1).Market,targetList(1).Code); traderBuy(HandleList(1),targetList(1).Market,targetList(1).Code,shareNum,0,'market','buy1'); %做多% fprintf('%s 买 %s %s %d手 市价 tick1/(tick1+tick2)=%f EMA1=%f EMA2=%f\n',datestr(bartime),targetList(1).Market,targetList(1).Code,shareNum,tick1/(tick1+tick2),EMA1(end),EMA2(end)); end end end end end endendif marketposition>=0 if con2 if con4 if con6 if con8 if con10 if con12 [barnum,bartime] = traderGetCurrentBar(targetList(1).Market,targetList(1).Code); traderSellShort(HandleList(1),targetList(1).Market,targetList(1).Code,shareNum,0,'market','sell1'); %做空% fprintf('%s 卖 %s %s %d手 市价 tick2/(tick1+tick2)=%f EMA1=%f EMA2=%f\n',datestr(bartime),targetList(1).Market,targetList(1).Code,shareNum,tick2/(tick1+tick2),EMA1(end),EMA2(end)); end end end end end end endendfunction EMAValue=EMA(Price,Length)%------------------------此函数用来计算指数移动平均------------------------%----------------------------------编写者--------------------------------EMAValue=zeros(length(Price),1);K=2/(Length+1);for i=1:length(Price) if i==1 EMAValue(i)=Price(i); else EMAValue(i)=Price(i)*K+EMAValue(i-1)*(1-K); endendend
更多免费策略源码下载请登录DigQuant社区-策略资源下载~


雷达卡




京公网安备 11010802022788号







