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线高点???
不是在调试界面看的,是在K线图上,右键查看运行时变量。
H1:=ref(H2,1);h2:=REF(HIGH,1);
H2是只有在barpos=3的时候才有赋值,其他k线上H2取得的是上一根k的tmph2而不是当前k的tmph2
似乎还是不太对,干脆就执行最简单的语句:
h2:=REF(HIGH,1); H1:=ref(H2,1);
理论上H2是上一根K线的高点,H1是上一根K线的H2,那就应该是上上根(左侧第2根)K线的高点,但实际结果是左侧第三根K线的高点。
哈哈,谢谢您的解答,有启发了,能调试通过,但现在还是不理解为什么,如下代码看起来差不多,只是计算顺序不一样,执行结果就不同,这是为什么?或许我对金字塔的机制还不太了解、熟悉,希望能尽快熟悉,以后就长期固定使用金字塔了。
代码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了。
H1:=ref(H2,1); //你这里取得的H2是上一根k代码执行到这里时候的H2值并没有运算到后一步
h2:=REF(HIGH,1);
hh:=ref(H2,1); //和上面H1作比较一样的额代码,这里执行过了h2所以结果不同