OBV计算

问题描述 投票:0回答:1

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的返回值

OBV calculation

pine-script ta-lib pandas-ta
1个回答
0
投票

我在 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 代码不正确,你应该谷歌搜索这个警告的解释。例如:应该在每次计算时调用该函数以确保控制台输出的一致性?

© www.soinside.com 2019 - 2024. All rights reserved.