全部 智大领峰 TBQuant功能 TBL语言 TB开户 问答专区 高手圈 其他
关于序列类型在控制结构中可能导致计算错误的原因
kyover 分享到
2023-12-25 09:14

序列类型的计算和赋值不能放在“或有”结构中。什么是“或有”结构?就是在每次执行时,不一定会执行的代码结构,有可能执行,也有可能不执行。为什么这样会导致错误?因为序列变量及含有序列变量需要向后传递值,如果有一根bar上的值没有计算,那么就可能导致后面连串的计算错误。

比如某个函数进行成交量的累计额,成交量在五根bar上依次为1,2,3,4,5。如果用序列变量来构造这个函数,那么每根bar上的成交量累计额只要当根发生额加上上一根累计额就行了。比如第四根bar上的累计额,没有必要计算1+2+3+4,只要计算上一根bar的累计额6,加上当根发生额4就能计算出正确的结果。类似这种算法在序列数据的运算当中效率非常高,经常被使用。

那么如果第三根bar上没有执行这个函数,会发生什么情况呢?由于第三根bar上没有执行函数,导致函数内部记录的累计额是由第二根bar传递来的。那么累计额就变成第二根bar的3,然后加上4,导致最后第四根bar上的累计额计算出来是7,而正确的10,差了第三根bar上的发生额。

这就是\"或有结构\"导致的问题。

所以任何数据的计算,都要放在主结构中,也就是从事件域开始,不进入任何控制结构中。

关于if嵌套的问题,不管嵌套多少层,只要是在控制结构中,都是有可能会出错的

另外,出错的原因是因为计算和赋值,如果表达式或者函数中没有计算赋值的操作,仅仅是引用某个容器进行不等式判断,不会有计算错误。

您未登录,请先 登录注册 后发表评论
顶部