以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://222.73.7.161/bbs/index.asp)
--  金字塔软件问题提交  (http://222.73.7.161/bbs/list.asp?boardid=2)
----  发现个goto 很奇怪的问题  (http://222.73.7.161/bbs/dispbbs.asp?boardid=2&id=12067)

--  作者:readonly
--  发布时间:2012/6/1 0:33:18
--  发现个goto 很奇怪的问题

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(破顶)数值,发现也是对的,就是大于号的逻辑出错。


--  作者:董小球
--  发布时间:2012/6/1 9:24:45
--  
大于号肯定是没问题的,楼主可以不可以发一个完整的能够重现你认为的问题的代码出来让我们看看
--  作者:Leon
--  发布时间:2012/6/1 9:27:30
--  
不应该是goto语句导致的,goto只能起到跳转作用。还请楼主详细检查一下自己的代码。
--  作者:王锋
--  发布时间:2012/6/1 10:16:25
--  

问题主要出在下面这句话上,因为你把他放在了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

没金叉@;

 

保证含有统计类的函数在条件跳转语句之前能够正常计算即可