【发布时间】:2019-03-11 07:32:17
【问题描述】:
我正在用 python 做我的第一个项目。我有一个名为 df 的 pandas 数据框,有两列“close”和“volume”。我想根据前两列计算/获取 OBV 列。公式如下;
如果收盘价高于前一个收盘价,则: 当前 OBC = 上一个 OBC + 当前交易量
如果收盘价低于前一收盘价,则: 当前 OBV = 上一个 OBV - 当前交易量
如果收盘价等于之前的收盘价,则: 当前 OBV = 以前的 OBV(无变化)
close volume OBC
30 2500 nan
32 3000 5500
25 2700 2800
35 4000 6800
20 1000 5800
我正在使用此代码:
for i in df.close[1:]:
if i > df.close.shift(-1):
df["OBC"] = df.volume + df.OBC.shift(-1)
elif i < df.close.shift(-1):
df["OBC"] = df.OBC.shift(-1) - df.volume
else:
df["OBC"] = df.OBC
我得到这个错误:
ValueError:Series 的真值不明确。使用a.empty, a.bool()、a.item()、a.any() 或 a.all()。
我看过这个问题,但没有得到任何帮助。 Truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all()
除了这个错误,我觉得代码在计算正确的 OBV 时可能会遇到麻烦。任何帮助都会很有价值。
【问题讨论】:
-
语句
i > df.close.shift(-1)将一个数字与一个系列进行比较,结果是一系列布尔值,这就是它现在不做什么的原因。 -
知道如何处理吗?
-
寻找解决方案like this。
-
在哪里可以找到解决方案,您是否使用电视图表输出验证了输出。在余额卷上搜索 github 有很多工作代码。但是这与 tradeivew 的输出不同。