pandas ta具有多索引数据帧



我想使用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)])

最新更新