obv = cum(change(src) > 0 ? volume : change(src) < 0 ? -volume : 0*volume)
obv2 = cum(sign(change(src)) * volume )
obv 和 obv2 返回不同的结果
ta.obv(df['close'], df['volume'])
返回与 obv2 相同的结果
我还需要用talib计算obv的返回值
我在 TradingView 中添加了一个 OBV 指标,打开它的源代码并发现
obv = ta.cum(math.sign(ta.change(src)) * volume)
然后我克隆了该指标并将这一行替换为
obv = ta.cum(ta.change(src) > 0 ? volume : ta.change(src) < 0 ? -volume : 0*volume)
并将其添加为第二个指标。我得到了不同的结果。但我也收到一个警告:
第 9 行:每次计算时都应调用函数“ta.change” 为了一致性。建议从以下位置提取呼叫 三元运算符或来自范围
所以,我用
替换了该行c = ta.change(src)
obv = ta.cum(c > 0 ? volume : c < 0 ? -volume : 0*volume)
并得到与原始 OBV 完全相同的结果!
所以你的 obv 代码不正确,你应该谷歌搜索这个警告的解释。例如:应该在每次计算时调用该函数以确保控制台输出的一致性?