策略名称:BiasAverage
策略思路:
多头进场条件:快速均线上穿慢速均线后,又掉头向下靠近慢速均线但不向下突破,再上拉时买入
空头进场条件:慢速均线上穿快速均线后,又掉头向下靠近快速均线但不向下突破,再上拉时卖出
多头出场条件:慢速均线上穿快速均线
空头出场条件:快速均线上穿慢速均线
回测曲线(回测报告由Auto-trader提供)
策略代码:
function BiasAverage(len1,len2,len3,len,n,shareNum,Freq)%上面五个为输入参数
% ------------ ThreeLine Strategy-------------------
% Freq 为输入时间频率
% shareNum 为操作的手数
% len1 为快速均线参数
% len2 为慢速均线参数
% len3 为乖离率长度
% len 为滑动窗口大小,len3<len1<len2<len
% n 为离差滑动平均值门限
%---------------------策略初始化与是否日内平仓---------------%
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个数据
%---------------------策略计算与基本逻辑---------------%
[ma1,ma2]=movavg(close(end-len+1:end),len1,len2);
ma1=ma1(len2:end); %快速均线
ma2=ma2(len2:end); %慢速均线
value1=ma1-ma2; %均线离差
[bias,bias]=movavg(value1,len3,len3); %均线离差均值
con1=ma1(end)>ma2(end) && bias(end-2)>bias(end-1) && bias(end-1)<bias(end) && bias(end)<n; %快速均线上穿慢速均线后,又掉头向下靠近慢速均线但不向下突破,再上拉时买入
con2=ma1(end)<ma2(end) && bias(end-2)<bias(end-1) && bias(end-1)>bias(end) && bias(end)<n; %慢速均线上穿快速均线后,又掉头向下靠近快速均线但不向下突破,再上拉时卖出
con3=ma1(end)<ma2(end); %慢速均线上穿快速均线
con4=ma1(end)>ma2(end); %快速均线上穿慢速均线
%----------------------策略主体-------------------------------%
if marketposition==0
if con1
traderBuy(HandleList(1),targetList(1).Market,targetList(1).Code,shareNum,0,'market','buy1');%开多单
end
if con2
traderSellShort(HandleList(1),targetList(1).Market,targetList(1).Code,shareNum,0,'market','sellshort1');%开空单
end
end
if marketposition>0 && con3
traderSell(HandleList(1),targetList(1).Market,targetList(1).Code,shareNum,0,'market','sell1');%平多单
end
if marketposition<0 && con4
traderBuyToCover(HandleList(1),targetList(1).Market,targetList(1).Code,shareNum,0,'market','buytocover1');%平空单
end
end
更多免费策略源码下载请登录atrader社区-策略服务~