variable:zs=c,hl=c,b=0,s=0;
ROC:=(CLOSE-REF(CLOSE,N))/REF(CLOSE,N)*100;
ROCMA:=MA(ROC,M);
手数:=ss;
//交易条件
开多条件 :=C<REF(C,1) AND ROC>ROCMA and b=0;
开空条件 :=C>REF(C,1) AND ROC<ROCMA and s=0;
//交易系统
//止损止盈
if holding>0 and l<zs then begin
sell(1,手数,limitr,min(o,zs));
b:=1;
end;//止损
if holding<0 and h>zs then begin
sellshort(1,手数,limitr,max(o,zs));
s:=1;
end;
//止损
if 开空条件 and HOLDING>0 then sell(1,手数,MARKET),ORDERQUEUE;
if 开多条件 and HOLDING<0 then sellshort(1,手数,MARKET),ORDERQUEUE;
if 开多条件 and HOLDING=0 then begin
开多:BUY(1,手数,MARKET),ORDERQUEUE;
hl:=h;//记录开仓后的最高点
zs:=enterprice*(1-stop0*0.01);//初始止损
s:=0;
end
if 开空条件 and HOLDING=0 then begin
开空:BUYSHORT(1,手数,MARKET),ORDERQUEUE;
hl:=l;//记录开仓后的最高点
zs:=enterprice*(1+stop0*0.01);//初始止损
b:=0;
end;
//止盈止损
if holding>0 and h>hl then begin//上移最高点
hl:=h;
if hl>enterprice*(1+start1*0.01) then zs:=hl*(1-stop1*0.01);//满80个点,回落20点为止损位
else if hl>enterprice*(1+start2*0.01) then zs:=hl*(1-stop2*0.01);//满50个点,回落30点为止损位
end
if holding<0 and l<hl then begin//上移最高点
hl:=l;
if hl<enterprice*(1-start1*0.01) then zs:=hl*(1+stop1*0.01);//满80个点,回落20点为止损位
else if hl<enterprice*(1-start2*0.01) then zs:=hl*(1+stop2*0.01);//满50个点,回落30点为止损位
end;
具体情况是如果止损的那条k线符合开仓条件的话,那下一条k线又会重新开仓,但如果止损那条k线不符合开仓条件,那么就正常了,在同方向都不会再开仓了
有两个?只有一个啊
if 开多条件 and HOLDING=0 then begin
开多:BUY(1,手数,MARKET),ORDERQUEUE;
hl:=h;//记录开仓后的最高点
zs:=enterprice*(1-stop0*0.01);//初始止损
s:=0;
end
if 开空条件 and HOLDING=0 then begin
开空:BUYSHORT(1,手数,MARKET),ORDERQUEUE;
hl:=l;//记录开仓后的最高点
zs:=enterprice*(1+stop0*0.01);//初始止损
b:=0;
end;
S要限定平空开多,B要限定平多开空,
同向限定不行
但是我止损平仓已经有控制平空仓不能再开空仓的
if holding<0 and h>zs then begin
sellshort(1,手数,limitr,max(o,zs));
s:=1;
end;
开空条件也限定了s=0才能开空仓:
开空条件 :=C>REF(C,1) AND ROC<ROCMA and s=0;
就是不明白为什么还是会出现平仓后又重新开仓的情况,我个人认为是不是因为是历史回测,在同一条k线里面的话,这个赋值体现不出来的缘故呢,因为出现错误的地方都是因为那条k线既符合止损平仓条件又符合开仓条件的