以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://weistock.com/bbs/index.asp)
--  金字塔软件问题提交  (http://weistock.com/bbs/list.asp?boardid=2)
----  调试问题,是不是BUG啊?  (http://weistock.com/bbs/dispbbs.asp?boardid=2&id=87108)

--  作者:分析者
--  发布时间:2015/11/9 15:58:50
--  调试问题,是不是BUG啊?
 

      RUNMODE :0;//逐K线模式


      tmpH1:=ref(high,2);tmpH2:=ref(high,1);

      if BARPOS <3 then EXIT;

      if BARpos =3 then BEGIN h1:=tmph1;H2:=tmph2; end ;

      H1:=ref(H2,1);h2:=REF(HIGH,1);



    上述代码中,理论上H2应该等于左侧第一根K线高点,而H1:=ref(H2,1)应该是左侧第二根K线高点,可为什么实际测试结果H1却等于左侧第三根K线高点???

  


--  作者:yukizzc
--  发布时间:2015/11/9 16:32:08
--  
你是调试界面看的?你调试要按黄色那个箭头执行完最后一句话才行
--  作者:分析者
--  发布时间:2015/11/9 16:47:40
--  

不是在调试界面看的,是在K线图上,右键查看运行时变量。


--  作者:yukizzc
--  发布时间:2015/11/9 17:11:25
--  
 if BARpos =3 then BEGIN h1:=tmph1;H2:=tmph2; end ;

      H1:=ref(H2,1);h2:=REF(HIGH,1);

 

H2是只有在barpos=3的时候才有赋值,其他k线上H2取得的是上一根k的tmph2而不是当前k的tmph2


--  作者:分析者
--  发布时间:2015/11/9 17:30:01
--  

似乎还是不太对,干脆就执行最简单的语句:

    h2:=REF(HIGH,1); H1:=ref(H2,1);

 

   理论上H2是上一根K线的高点,H1是上一根K线的H2,那就应该是上上根(左侧第2根)K线的高点,但实际结果是左侧第三根K线的高点。


--  作者:yukizzc
--  发布时间:2015/11/9 20:31:33
--  

如图


图片点击可在新窗口打开查看此主题相关图片如下:kz{w65mblb3~8)%f@quri.png
图片点击可在新窗口打开查看


--  作者:分析者
--  发布时间:2015/11/9 21:03:40
--  

哈哈,谢谢您的解答,有启发了,能调试通过,但现在还是不理解为什么,如下代码看起来差不多,只是计算顺序不一样,执行结果就不同,这是为什么?或许我对金字塔的机制还不太了解、熟悉,希望能尽快熟悉,以后就长期固定使用金字塔了。

代码1:    

      H1:=NULL;H2:=NULL;

      H1:=ref(H2,1);h2:=REF(HIGH,1); hh:=ref(high,2);

      // h2:=REF(HIGH,1); H1:=ref(H2,1); hh:=ref(high,2);

代码2:

     H1:=NULL;H2:=NULL;

     // H1:=ref(H2,1);h2:=REF(HIGH,1); hh:=ref(high,2);

     h2:=REF(HIGH,1); H1:=ref(H2,1); hh:=ref(high,2);

 

上述两段代码执行后的H1  数值是不一样的。

代码1执行后的H1和HH不相等,代码2执行后的H1和HH相等。

不理解的地方在于:代码1的H1应该等于上根K线的H2,而上根K线的H2应该等于再上一根K线的HIGH,其实应该就是ref(high,2),理论上H1和HH应该是相等的,但实际结果不相等。

而代码2就是将H1和H2的计算顺序换了一下,执行结果H1就等于HH了。

 

 


--  作者:王锋
--  发布时间:2015/11/9 21:17:27
--  
在逐K线模式下,使用公式调试器,然后使用单步跟踪,详细看一下每执行一步后的变量变化流程
--  作者:yukizzc
--  发布时间:2015/11/9 21:24:14
--  
     H1:=NULL;H2:=NULL;

      H1:=ref(H2,1);                       //你这里取得的H2是上一根k代码执行到这里时候的H2值并没有运算到后一步

h2:=REF(HIGH,1);

 hh:=ref(H2,1);                           //和上面H1作比较一样的额代码,这里执行过了h2所以结果不同


--  作者:分析者
--  发布时间:2015/11/9 21:33:22
--  
OK,谢谢老师