runmode:0; variable:cc=0,kcj=0,pcj=0,maxprofit=0,win=0,win2=0,hcgy=0,win2bz=0; exittime:=time>=150800; {收盘强制平仓时间} closetime1:=(time=151500); if exitbars=1 and hcgy=0 and win2bz=0 then begin //在平仓后尽快恢复回撤止盈的相关标志 win:=0; win2:=0; maxprofit:=0; hcgy:=1; win2bz:=0; end //回撤止盈--start--- if holding>0 and enterbars>0 then begin win:=(h-kcj)/kcj*100;//记录盈利点数 if win>maxprofit and win>maxd/kcj*100 then begin maxprofit:=win;hcgy:=0;end//maxd是参数,做多时从这个点数开始记录最大盈利点数maxprofit。 if maxprofit>0 and win2bz=0 then win2:=(maxprofit-win)/maxprofit*100;//最大盈利后的回调幅度.win2bz为0时更新win2bz,回撤止盈后win2bz设为1。 end if holding<0 and enterbars > 0 then begin win:=(kcj-l)/kcj*100; //记录盈利点数 if win>maxprofit and win>maxk/kcj*100 then begin maxprofit:=win;hcgy:=0;end //maxk是参数,做空时从这个点数开始记录最大盈利点数maxprofit。 if maxprofit>0 and win2bz=0 then win2:=(maxprofit-win)/maxprofit*100; //最大盈利后的回调幅度。win2bz为0时更新win2bz,回撤止盈后win2bz设为1。 end if holding>0 and win2>=60 and OPENPROFIT>0 then begin pcj:=(maxprofit*kcj)/100-(win2*maxprofit*kcj)/10000+kcj; sell(1,P,limitr,pcj); cc:=0;//持仓标志 win2bz:=1;//win2bz设为1,避免win2重新赋值。其实按原有win2赋值的if,holding>0,不会重新赋值,但会实际情况是会出现信号闪烁。 end if holding<0 and win2>=60 and OPENPROFIT>0 then begin pcj:=kcj-(maxprofit*kcj)/100+(win2*maxprofit*kcj)/10000; sellshort(1,P,limitr,pcj); cc:=0; win2bz:=1;//win2bz设为1,避免win2重新赋值。其实按原有win2赋值的if,holding>0,不会重新赋值,但会实际情况是会出现信号闪烁。 end //回撤止盈--end---