以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://weistock.com/bbs/index.asp)
--  公式模型编写问题提交  (http://weistock.com/bbs/list.asp?boardid=4)
----  还是信号的闪烁问题  (http://weistock.com/bbs/dispbbs.asp?boardid=4&id=51575)

--  作者:李亚弟
--  发布时间:2013/5/2 14:03:45
--  还是信号的闪烁问题
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---

这段代码是用每秒一次来轮询的,在1分钟K线上。(1)代码会闪烁,(2)还会出现win2乱赋值的情况。我弄了半天自己有点晕了。麻烦帮我检查问题在哪里。谢谢。
--  作者:jinzhe
--  发布时间:2013/5/2 14:23:09
--  

win2不会乱赋值的,多用shift+q进行调试

代码闪烁,避免用ref(条件,1)来替代 条件