问题描述
我有一个带有ohlc数据的大熊猫股票数据框,并且我正在使用btalib(技术分析)软件包添加一些指标。我现在拥有的数据框与此类似,但是每只股票有200行(QQQ Holdings前500名股票)。
symbol time open ... close volume
AAPL 2019-10-28 247.42 ... 249.04 22187260
AAPL 2019-10-29 248.97 ... 243.29 32725739
AAPL 2019-10-30 244.76 ... 243.29 25443913
AAPL 2019-10-31 247.24 ... 248.84 29688327
AAPL 2019-11-01 249.54 ... 255.84 33985331
SMA是使用前几天收盘价中的库存数据计算得出的。因此,如果我用于SMA的时间段是20天,则收盘价(基本上)仅是最近20天的平均价格,如下所示
sma20 = btalib.sma(df,period=20) # instantiate sma20 w/ period of 20 days
但是,我每只股票都有200天的数据(因为以后我将使用200天作为单独的列值),并且我需要使用SMA计算来重置每次交易中的符号列数据框更改。这是我遇到的麻烦。
这是应该工作的方式
df['sma20'] = sma20.df
print(df[200:203])
输出:
sma20的前20行为空,因为它们需要计算这些值。这部分按预期工作。但是,当股票代码从AAPL切换到ADBE时,sma20的值会与数据帧中的前20条记录(即AAPL的记录)继续进行。此时,我需要它们重置。
record# symbol time open ... volume sma20
200 AAPL 2020-08-13 457.720 ... 48325440 412.80320
201 ADBE 2019-10-28 271.580 ... 2002911 407.11320
202 ADBE 2019-10-29 271.680 ... 1483643 401.01470
我曾考虑为此创建自己的函数,但是一旦添加了更复杂的指标,这将变得非常繁琐,而且我觉得使用库来帮助我会更容易。
这就是我现在要去的地方:
我有一个symbol_shifted
列,该列实际上只是将所有符号向上推一位。我的想法是,我可以检查符号是否等于此符号移位列。如果不是,则应重新计算。
这是符号移位的外观:
record# symbol symbol_shifted sma20
200 AAPL AAPL 412.80320
201 ADBE AAPL 407.11320
202 ADBE ADBE 401.01470
这是我要使用的代码:
for i in df:
while True:
if df['symbol']==df['symbol_shifted']:
df['sma20']=sma20.df
else:
continue
我已经尝试了多种方法类似的逻辑(例如,在使用pandas的函数中使用上述逻辑,更改了对记录的索引方式),但是我似乎无法使其正常工作。在记录编号201处,符号!= symbol_shifted。因此,如果if语句认为是这种情况,则无限循环应重置并重新开始计算。我不确定为什么这行不通,但是如果有人愿意提供反馈或想法,我将不胜感激!这是我当前收到的错误:
ValueError: The truth value of a Series is ambiguous. Use a.empty,a.bool(),a.item(),a.any() or a.all().
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)