以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://weistock.com/bbs/index.asp)
--  公式模型编写问题提交  (http://weistock.com/bbs/list.asp?boardid=4)
----  有关GOTO语句在逐K线模式下使用的注意事项  (http://weistock.com/bbs/dispbbs.asp?boardid=4&id=43984)

--  作者:王锋
--  发布时间:2013/1/2 23:10:25
--  有关GOTO语句在逐K线模式下使用的注意事项

    金字塔为了满足投资者更好更方便灵活的编写程序化交易策略,提供了目前大多软件所不提供的GOTO语句,通过GOTO语句我们可以非常方便的在语句中根据不同的条件来跳转执行。

    但是对于逐K线模式下,如果对GOTO语句使用不当,有可能出现问题的,最常见的问题就是对于统计类函数,如果没有在一个完成的周期对他执行后,是有可能出现我们意想不到的错误结果的,比如下面的公式:

 

IF NOT(ISLASTBAR) THEN GOTO QUITLINE; //最后一个周期跳过均线计算行
B:MA(C,5);
QUITLINE@ EXIT;

 

该公式在序列模式下是没有问题的,但是在逐K线下,由于在最后一根BAR之前的所有BAR中,B:MA(C,5);这行语句都没有得到执行,故虽然最后一根BAR执行到了,我们也无法统计出正确的结果,解决方法就是将可能因为GOTO跳转语句避开,将MA放到他们的前面去执行,让他能够保证在每个BAR周期上都能得到完整执行。

 

T:=MA(C,5);

IF NOT(ISLASTBAR) THEN GOTO QUITLINE; //最后一个周期跳过均线计算行
B:T;

QUITLINE@ EXIT;

 

经过上述的修改,我们的MA就可以按照我们的要求,正确的工作了。

 

若需要禁止提示GOTO语句中的这个问题在代码中的最前面加入如下语句即可:

  WARNING_DISABLE:1;

 

 

参考

有关EIXT语句在逐K线模式下使用的注意事项

http://www.weistock.com/bbs/dispbbs.asp?boardid=4&Id=43974

 

函数不能在IF THEN FOR循环控制语句中被引用的原理和解决方案 

http://www.weistock.com/bbs/dispbbs.asp?boardid=4&Id=130


--  作者:左岸
--  发布时间:2013/1/2 23:18:50
--  

学习了~


--  作者:guotx2010
--  发布时间:2013/1/3 10:19:02
--  

又学到了。

 


--  作者:lyss0407
--  发布时间:2014/12/27 9:28:48
--  
图片点击可在新窗口打开查看