首页 > 解决方案 > Python TA 库,ATR 在数据框系列中出现错误

问题描述

我的代码

import ccxt
import ta
import pandas as pd

ftx = ccxt.ftx()
markets = ftx.load_markets()
df = pd.DataFrame(ftx.fetch_ohlcv(symbol, timeframe='1h'))
df.rename(columns = {0:'time', 1:'open', 2:'high', 3:'low', 4:'close', 5:'volume'}, inplace = True)    
df['atr'] = ta.volatility.AverageTrueRange(df.high,df.low,df.close, window=14, fillna=True)
#df.dropna(inplace=True)
df = df[['open','high','low','close','volume','atr']]
print(df)

我得到的输出 atr 列错误

知道是什么原因造成的吗?(我已经测试了其他技术,例如 RSI 和 MACD,它们似乎与相同的数据集完美配合 - 链接到该技术 - https://technical-analysis-library-in-python.readthedocs.io/en/latest/ ta.html#ta.volatility.AverageTrueRange )

标签: pythonpandasdataframeseries

解决方案


可以在您链接的文档中找到解决方案。本例中的关键字是class.

从文档中:

classta.volatility.AverageTrueRange (...)

...

average_true_range() -> pandas.core.series.Series

所以你目前只是创建一个class保持参数来创建你想要的输出。但是,您并没有调用average_true_range()实际计算并返回Series您可以添加到您的DataFrame. 因此,如下所示更改您的代码,将atr系列添加到您的DataFrame.


import ta
import pandas as pd

df = pd.DataFrame({
    'high': [10, 10, 10],
    'low': [8, 8, 8],
    'open': [9, 9, 9],
    'close': [9, 9, 9]
})

df['atr'] = ta.volatility.AverageTrueRange(
    df.high,
    df.low,
    df.close,
    window=2,
    fillna=False
).average_true_range() # <- call function


print(df)


推荐阅读