我一直在尝试让 python 编码的 pandas 逻辑输出与“OBV - On Balance Volume”的交易视图图表输出完全相同
OBV 的一些 Pine 脚本参考:
study(title="On Balance Volume", shorttitle="OBV")
src = close
obv = cum(change(src) > 0 ? volume : change(src) < 0 ? -volume : 0*volume)
plot(obv, color=blue, title="Price_OBV")
Tradingview Wiki页面中给出的计算方法
On Balance Volume 是技术分析中最直接的计算之一。它只是基于几个条件的加法或减法。
如果当前收盘价大于之前的收盘价,那么:之前的 OBV + 当前的交易量 = 当前的 OBV
如果当前收盘价低于前一个收盘价,则:前一个 OBV - 当前交易量 = 当前 OBV
如果当前收盘价等于前一个收盘价,则:前一个 OBV = 当前 OBV
我尝试过的 Python 代码:
def on_balance_volume(close_data, volume):
"""
On Balance Volume.
Formula:
start = 1
if CLOSEt > CLOSEt-1
obv = obvt-1 + volumet
elif CLOSEt < CLOSEt-1
obv = obvt-1 - volumet
elif CLOSEt == CLOSTt-1
obv = obvt-1
"""
catch_errors.check_for_input_len_diff(close_data, volume)
obv = np.zeros(len(volume))
obv[0] = 0
for idx in range(0, len(obv)):
if (close_data[idx] - close_data[idx-1]) > 0:
obv[idx] = obv[idx-1] + volume[idx]
elif (close_data[idx] - close_data[idx-1])<0:
obv[idx] = obv[idx-1] - volume[idx]
# elif close_data[idx] == close_data[idx-1]:
# obv[idx] = obv[idx-1]
return obv
df['obv']=on_balance_volume(df['close'],df['volume'])
注意:我验证了与交易视图中显示的完全匹配的交易量输入。
您可以使用此数据源来验证输出(生成您的密钥以获取数据) DateLink
为了在 python 代码中获得确切的电视图表 OBV 值,我需要做些什么改变。