在TA-Lib计算RSI和 SMA时出错
执行代码时出现错误。def indicators(df, N) 函数未被执行。这是一段代码片段,我在尝试复现来自YouTube作者的做法。我得到如下错误:
TypeError错误发生:参数 'real' 的类型不正确(期望numpy.ndarray,实际为DataFrame)/
我尝试只向函数提交一列数据(收盘价 - close)。但又出现另一个错误:
异常:input_arrays参数缺少必需的数据键:close
我不明白该如何解决这个问题。
import requests
from datetime import datetime, timedelta
import pandas as pd
import talib
import numpy as np
from talib import abstract
import yfinance as yf
!wget http://prdownloads.sourceforge.net/ta-lib/ta-lib-0.4.0-src.tar.gz
!tar -xzvf ta-lib-0.4.0-src.tar.gz
%cd ta-lib
!./configure --prefix=/usr
!make
!make install
!pip install Ta-Lib
N = 1400
def parse_fgi(N):
url = "https://api.alternative.me/fng/?format=csv&date_format=us"
parameters = {
"limit": N,
"format": "json"
}
response = requests.get(url, params=parameters)
data = response.json()['data']
fgi_values = [float(i['value']) for i in data][::-1]
return fgi_values
def parse_dates(N):
end_date = datetime.today()
start_date = end_date - timedelta(days=N)
dates = pd.date_range(start=start_date, end=end_date)
us_dates = dates.strftime('%Y-%m-%d').tolist()
return us_dates
abstract.RSI(data_prices, 140)
def parse_prices(coin, N):
period = parse_dates(N)
end_time = period[-1]
start_time = period[0]
data = yf.download(coin+"-USD", start_time, end_time)
data.rename(columns = {'Open': 'open',
'High':'high',
'Low': 'low',
'Close': 'close',
'Volume': 'volume'}, inplace = True)
return data
data_prices = parse_prices("XRP", N)
data_prices
def indicators(df, N):
df['rsi'] = abstract.RSI(df)
df['sma'] = abstract.SMA(df)
df['fgi'] = parse_fgi(N)
return df
df = indicators(data_prices.to_numpy(), N)
df
解决方案
我运行代码,看来主要问题是 multi-level 的列名
你有以下列
Price close high low open volume
Ticker XRP-USD XRP-USD XRP-USD XRP-USD XRP-USD
但代码只需要
Price close high low open volume
并且你需要去掉层级 Ticker
data_prices.columns = data_prices.columns.droplevel("Ticker")
用于测试的完整工作代码:
from datetime import datetime, timedelta
import requests
import yfinance as yf
import pandas as pd
import talib
from talib import abstract
# import numpy as np
#!wget http://prdownloads.sourceforge.net/ta-lib/ta-lib-0.4.0-src.tar.gz
#!tar -xzvf ta-lib-0.4.0-src.tar.gz
# %cd ta-lib
#!./configure --prefix=/usr
#!make
#!make install
#!pip install Ta-Lib
def parse_fgi(N):
print("=== parse_fgi ===")
url = "https://api.alternative.me/fng/" # ?format=csv&date_format=us"
parameters = {
"date_format": "us",
"limit": N,
"format": "json",
# "format": "csv"
}
response = requests.get(url, params=parameters)
data = response.json()["data"]
fgi_values = [float(i["value"]) for i in data][::-1]
return fgi_values
def parse_dates(N):
print("=== parse_dates ===")
end_date = datetime.today()
start_date = end_date - timedelta(days=N)
dates = pd.date_range(start=start_date, end=end_date)
us_dates = dates.strftime("%Y-%m-%d").tolist()
return us_dates
def parse_prices(coin, N):
print("=== parse_prices ===")
period = parse_dates(N)
end_time = period[-1]
start_time = period[0]
data = yf.download(coin + "-USD", start_time, end_time)
data.rename(
columns={
"Open": "open",
"High": "high",
"Low": "low",
"Close": "close",
"Volume": "volume",
},
inplace=True,
)
return data
def indicators(df, N):
print("=== indicators ===")
df["rsi"] = abstract.RSI(df)
df["sma"] = abstract.SMA(df)
df["fgi"] = parse_fgi(N)
return df
# --- main ----
N = 1400
data_prices = parse_prices("XRP", N)
print("\n--- data_prices (original) ---\n")
print(data_prices)
# skip one level of column's names
data_prices.columns = data_prices.columns.droplevel("Ticker")
print('\n--- data_prices (after droping level "Ticker") ---\n')
print(data_prices)
result = abstract.RSI(data_prices, 140)
print("\n--- abstract.RSI ---\n")
print(result)
df = indicators(data_prices, N)
print("\n--- df ---\n")
print(df)
结果:
=== parse_prices ===
=== parse_dates ===
/home/furas/Projects/stackoverflow/2026.04/2026.04.29 - talib - need numpy instead of DataFrame/./main.py:66: FutureWarning: YF.download() has changed argument auto_adjust default to True
data = yf.download(coin + "-USD", start_time, end_time)
[*********************100%***********************] 1 of 1 completed
--- data_prices (original) ---
Price close high low open volume
Ticker XRP-USD XRP-USD XRP-USD XRP-USD XRP-USD
Date
2022-06-29 0.328978 0.341103 0.323425 0.337372 1094664825
2022-06-30 0.331448 0.331458 0.307668 0.329002 1456445785
2022-07-01 0.313677 0.333078 0.311450 0.331645 1249145615
2022-07-02 0.315579 0.317014 0.310522 0.313724 608601610
2022-07-03 0.321703 0.325247 0.310214 0.315573 728566418
... ... ... ... ... ...
2026-04-24 1.433676 1.448798 1.425052 1.439060 2163141988
2026-04-25 1.424219 1.437635 1.419685 1.433670 1062133882
2026-04-26 1.431575 1.435281 1.418834 1.424206 1259313752
2026-04-27 1.400906 1.446373 1.386535 1.431578 2294516967
2026-04-28 1.380665 1.400999 1.369139 1.400905 1780887090
[1400 rows x 5 columns]
--- data_prices (after droping level "Ticker") ---
Price close high low open volume
Date
2022-06-29 0.328978 0.341103 0.323425 0.337372 1094664825
2022-06-30 0.331448 0.331458 0.307668 0.329002 1456445785
2022-07-01 0.313677 0.333078 0.311450 0.331645 1249145615
2022-07-02 0.315579 0.317014 0.310522 0.313724 608601610
2022-07-03 0.321703 0.325247 0.310214 0.315573 728566418
... ... ... ... ... ...
2026-04-24 1.433676 1.448798 1.425052 1.439060 2163141988
2026-04-25 1.424219 1.437635 1.419685 1.433670 1062133882
2026-04-26 1.431575 1.435281 1.418834 1.424206 1259313752
2026-04-27 1.400906 1.446373 1.386535 1.431578 2294516967
2026-04-28 1.380665 1.400999 1.369139 1.400905 1780887090
[1400 rows x 5 columns]
--- abstract.RSI ---
Date
2022-06-29 NaN
2022-06-30 NaN
2022-07-01 NaN
2022-07-02 NaN
2022-07-03 NaN
...
2026-04-24 46.668434
2026-04-25 46.601923
2026-04-26 46.661476
2026-04-27 46.443962
2026-04-28 46.300492
Length: 1400, dtype: float64
=== indicators ===
=== parse_fgi ===
--- df ---
Price close high low open volume rsi sma fgi
Date
2022-06-29 0.328978 0.341103 0.323425 0.337372 1094664825 NaN NaN 13.0
2022-06-30 0.331448 0.331458 0.307668 0.329002 1456445785 NaN NaN 11.0
2022-07-01 0.313677 0.333078 0.311450 0.331645 1249145615 NaN NaN 11.0
2022-07-02 0.315579 0.317014 0.310522 0.313724 608601610 NaN NaN 14.0
2022-07-03 0.321703 0.325247 0.310214 0.315573 728566418 NaN NaN 11.0
... ... ... ... ... ... ... ... ...
2026-04-24 1.433676 1.448798 1.425052 1.439060 2163141988 56.059920 1.370280 31.0
2026-04-25 1.424219 1.437635 1.419685 1.433670 1062133882 54.275149 1.372417 33.0
2026-04-26 1.431575 1.435281 1.418834 1.424206 1259313752 55.462889 1.375969 47.0
2026-04-27 1.400906 1.446373 1.386535 1.431578 2294516967 49.669828 1.378239 33.0
2026-04-28 1.380665 1.400999 1.369139 1.400905 1780887090 46.237286 1.380019 26.0
[1400 rows x 8 columns]
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。