if 金叉=0 then goto 没金叉@;
if 金叉>0 && h>h[金叉时间] then 金叉:=0;
if 金叉>0 && l<if(barslast(破顶)>5,l[金叉时间+1],l[金叉时间+1]-2*MINDIFF) && 突破>0 then begin 突破:=-1; 金叉:=0; end
没金叉@;
上面的程序,没注释掉第一句goto时,当全局变量“金叉=1”时,第3行里的“if(barslast(破顶)>5”执行效果大于号反过来了;注释掉第一行后,执行效果是正确的。也就是说,有用goto时,把第2行里改成“if(barslast(破顶)<5”执行就恢复为没用goto时的正确结果。
于是我用DRAWNUMBER显示barslast(破顶)数值,发现也是对的,就是大于号的逻辑出错。
问题主要出在下面这句话上,因为你把他放在了GOTO语句的后面,会因为前面的跳转语句影响到后面的统计,如果你在逐K线模式下运行,那么你必须要进行改进
barslast(破顶)>5
改进如下:
AA:=barslast(破顶)>5;
if 金叉=0 then goto 没金叉@;
if 金叉>0 && h>h[金叉时间] then 金叉:=0;
if 金叉>0 && l<if(AA,l[金叉时间+1],l[金叉时间+1]-2*MINDIFF) && 突破>0 then begin 突破:=-1; 金叉:=0; end
没金叉@;
保证含有统计类的函数在条件跳转语句之前能够正常计算即可