本帖最后由 技术006 于 2024-4-1 11:14 编辑
金字塔为了满足投资者更好更方便灵活的编写程序化交易策略,提供了目前大多软件所不提供的GOTO语句,通过GOTO语句我们可以非常方便的在语句中根据不同的条件来跳转执行。
但是对于逐K线模式下,如果对GOTO语句使用不当,有可能出现问题的,最常见的问题就是对于统计类函数,如果没有在一个完成的周期对他执行后,是有可能出现我们意想不到的错误结果的,比如下面的公式: [PEL] 复制代码 IF NOT(ISLASTBAR) THEN GOTO QUITLINE; //最后一个周期跳过均线计算行
B:MA(C,5);
QUITLINE@ EXIT;
该公式在序列模式下是没有问题的,但是在逐K线下,由于在最后一根BAR之前的所有BAR中,B:MA(C,5);这行语句都没有得到执行,故虽然最后一根BAR执行到了,我们也无法统计出正确的结果,解决方法就是将可能因为GOTO跳转语句避开,将MA放到他们的前面去执行,让他能够保证在每个BAR周期上都能得到完整执行。 [PEL] 复制代码 T:=MA(C,5);
IF NOT(ISLASTBAR) THEN GOTO QUITLINE; //最后一个周期跳过均线计算行
B:T;
QUITLINE@ EXIT;
经过上述的修改,我们的MA就可以按照我们的要求,正确的工作了。
若需要禁止提示GOTO语句中的这个问题在代码中的最前面加入如下语句即可:
[PEL] 复制代码 WARNING_DISABLE:1;
参考
有关EIXT语句在逐K线模式下使用的注意事项 https://www.weistock.com/bbs/forum.php?mod=viewthread&tid=18662
函数不能在IF THEN FOR循环控制语句中被引用的原理和解决方案 https://www.weistock.com/bbs/forum.php?mod=viewthread&tid=240
|