ranaroussi / yfinance

Download market data from Yahoo! Finance's API
https://aroussi.com/post/python-yahoo-finance
Apache License 2.0
14.89k stars 2.44k forks source link

Incompatibility with talib (expected numpy.ndarray, got DataFrame) #2107

Open finisky opened 2 weeks ago

finisky commented 2 weeks ago

Describe bug

talib cannot accept dataframe as input:

Traceback (most recent call last):
  File "/data/1.py", line 7, in <module>
    df['SMA_5'] = ta.SMA(df['Close'], timeperiod=5)
  File "/data/miniconda3/envs/a/lib/python3.10/site-packages/talib/__init__.py", line 64, in wrapper
    result = func(*_args, **_kwds)
TypeError: Argument 'real' has incorrect type (expected numpy.ndarray, got DataFrame)

It works for yf 0.2.44, but not work for 0.2.46+.

Simple code that reproduces your problem

import talib as ta
import yfinance as yf

df = yf.download("MSFT", period='5d')
df['SMA'] = ta.SMA(df['Close'], timeperiod=3)

Debug log

N/A

Bad data proof

No response

yfinance version

0.2.48

Python version

3.10.13

Operating system

Ubuntu 22.04

ValueRaider commented 2 weeks ago

It works for yf 0.2.44, but not work for 0.2.46+.

Double-check this. I get opposite.

dhruvan2006 commented 2 weeks ago

Cause:

After issues #2068 #2100 , yf.download("MSFT") returns by default now a DataFrame with an extra level Ticker

Fix:

Either use

df = yf.download("MSFT", period='5d', multi_level_index=False)

or

df = yf.Ticker("MSFT").history()