2.1策略文件 function WATR(Int,Begin,cellPar)
global idexK
global Tlen
global TimeDT
global TimeKT
N=cellPar{1};
if Int
traderSetParalMode(false);
idexK=traderRegKData('day',1);
Tlen=length(idexK(:,1));
TimeDT=zeros(Tlen,1);
TimeKT=zeros(Tlen,1);
else
%提取数据
[mp,~,~] = traderGetAccountPositionV2(1,(1:Tlen));
[~,HandListCap,~,~,~]=traderGetAccountInfoV2(1);
iddexK = traderGetRegKData(idexK, 30, false);
[Multiple, ~, ~, ~, ~, ~, ~] = traderGetFutureInfoV2(1:Tlen);
for i=1:Tlen
idddexK=iddexK(1+8*(i-1):8*i,:);
time=idddexK(1,:);
high=idddexK(3,:);
low=idddexK(4,:);
close=idddexK(5,:);
sharenum=floor(HandListCap*0.8/close(end)/Multiple(i)/Tlen);
%指标计算
TR=max(max((high(1:end-1)-low(1:end-1)),abs(close(1:end-1)-high(1:end-1))),abs(close(1:end-1)-low(1:end-1)));
ATRValue=MA(TR,10);
DT=close(end)>close(end-1)+ATRValue(end-1)*1.5;
KT=close(end)<close(end-1)-ATRValue(end-1)*1.5;
if DT==1
TimeDT(i)=time(end);
elseif KT==1
TimeKT(i)=time(end);
end
D1=close(end-1)>close(end-2)+ATRValue(end-2)*1.5;
D2=close(end-2)>close(end-3)+ATRValue(end-3)*1.5;
K1=close(end-1)<close(end-2)-ATRValue(end-2)*1.5;
K2=close(end-2)<close(end-3)-ATRValue(end-3)*1.5;
DT2=(D1+D2==1)&&DT;
KT2=(K1+K2==1)&&KT;
SP=(time(end-N+1)>TimeDT(i))||DT2;
BP=(time(end-N+1)>TimeKT(i))||KT2;
%开平仓动作
if mp(i)==0
if KT
traderBuyV2(1,i,sharenum,0,'market','buy');
elseif DT
traderSellShortV2(1,i,sharenum,0,'market','sell');
end
elseif mp(i)>0
if DT
traderPositionToV2(1,i,0,0,'market','stop');
elseif BP
traderPositionToV2(1,i,0,0,'market','stop');
end
elseif mp(i)<0
if KT
traderPositionToV2(1,i,0,0,'market','stop');
elseif SP
traderPositionToV2(1,i,0,0,'market','stop');
end
end
end
end
end
function MAValue=MA(Price,Length)
MAValue=zeros(length(Price),1);
for i=Length:length(Price)
MAValue(i)=sum(Price(i-Length+1:i))/Length;
end
MAValue(1:Length-1)=Price(1:Length-1);
end 2.2执行文件 targetList1 = traderGetCodeList('dce000');
targetList2 =traderGetCodeList('czce000');
targetList3 = traderGetCodeList('shfe000');
targetList=[targetList1,targetList2,targetList3];
targetList=targetList([2 16 17 18 33 47]);
traderSetBacktest(100000000,0.0025,0.02,0,1,0,0);
AccountList(1) = {'FutureBackReplay'};
N=7;
traderRunBacktestV2('WATR',@WATR,{N},AccountList(1),targetList,'day',1,20110101,20170820,'FWard');