我想使用pandas ta。尽管这个库的大多数方面似乎更容易进行技术分析,但我只能让它在单个ticker数据帧上运行。
我想弄清楚如何让熊猫ta在多索引数据帧中处理多个股票行情器。
我使用:-其中[股票]来自csv列表。
df = yf.download[stocks], '2021-1-1', interval='1d')
下面的pandas-ta-download方法只创建一个ticker数据帧,并且在使用[stock]时只迭代第一个ticker。
df.ta.ticker('GOOG', period = '1y', interval = "1h")
我当前的数据帧如下所示。(股票代码列表将发生变化(
Adj Close Close High Low Open Volume
BTC-USD ETH-USD BTC-USD ETH-USD BTC-USD ETH-USD BTC-USD ETH-USD BTC-USD ETH-USD BTC-USD ETH-USD
Date
2020-12-31 29001.720703 737.803406 29001.720703 737.803406 29244.876953 754.299438 28201.992188 726.511902 28841.574219 751.626648 46754964848 13926846861
2021-01-01 29374.152344 730.367554 29374.152344 730.367554 29600.626953 749.201843 28803.585938 719.792236 28994.009766 737.708374 40730301359 13652004358
2021-01-02 32127.267578 774.534973 32127.267578 774.534973 33155.117188 786.798462 29091.181641 718.109497 29376.455078 730.402649 67865420765 19740771179
2021-01-03 32782.023438 975.507690 32782.023438 975.507690 34608.558594 1006.565002 32052.316406 771.561646 32129.408203 774.511841 78665235202 45200463368
2021-01-04 31971.914062 1040.233032 31971.914062 1040.233032 33440.218750 1153.189209 28722.755859 912.305359 32810.949219 977.058838 81163475344 56945985763
当我尝试应用熊猫ta函数时,例如:
df[stocks] = data[stocks].ta.sma(length=10)
我明白错误。AttributeError:"Series"对象没有属性"ta">
当我使用文档标准方法时
sma10 = ta.sma(df["Close"], length=10)
我不知道如何针对.csv列表中所有股票代码的特定(BTC-USD("关闭"列,即(df['Close']
在这两个例子中,panda ta sma都使用了"close"值,但我希望能够将所有panda ta方法应用于多索引。
我只能下载"关闭"数据-
data = yf.download[stocks], '2021-1-1', interval='1d')['Close']
然而,这些列将是包含"关闭"数据的"ticker名称",我仍然对pandas ta试图查找"关闭"列数据有同样的问题。
我不知道如何让panda在同一数据帧中的多个ticker上发挥作用。有解决办法吗?
谢谢你的帮助!
由于多列的每一列都由一个元组组成,因此可以通过使用.loc等以元组格式指定数据帧来处理水平格式的数据帧。通过循环处理添加了两种类型的技术分析。最后一步是对列进行重新排序。如果你需要处理的不仅仅是收盘价,你可以使用收盘价作为循环的目标。
import pandas as pd
import pandas_ta as ta
import yfinance as yf
stocks = 'BTC-USD ETH-USD XRP-USD XEM-USD'
df = yf.download(stocks, '2021-1-1', interval='1d',)
technicals = ['sma10', 'sma25', 'vwma']
tickers = stocks.split(' ')
for ticker in tickers:
for t in technicals:
if t[:2] == 'sma':
l = int(t[3:])
df[(t, ticker)] = ta.sma(df.loc[:,('Close', ticker)], length=l)
else:
df[(t, ticker)] = ta.vwma(df.loc[:,('Close', ticker)], df.loc[:,('Volume', ticker)])