ValueRaider / yfinance-cache

Caching wrapper for yfinance module. Intelligent caching, not dumb caching of web requests.
MIT License
22 stars 9 forks source link

KeyError when getting the history of a ticker #59

Closed valotas closed 1 week ago

valotas commented 1 month ago

Just do a yfc.Ticker("1T5.DU").history(period="max", interval="1d")

---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)
Cell In[9], [line 1](vscode-notebook-cell:?execution_count=9&line=1)
----> [1](vscode-notebook-cell:?execution_count=9&line=1) history = ticker.history(period="max", interval="1d");
      [2](vscode-notebook-cell:?execution_count=9&line=2) history

File ~/dev/personal/marketdata/.venv/lib/python3.10/site-packages/yfinance_cache/yfc_ticker.py:225, in Ticker.history(self, interval, max_age, period, start, end, prepost, actions, adjust_splits, adjust_divs, keepna, proxy, rounding, debug, quiet, trigger_at_market_close)
    [223](https://file+.vscode-resource.vscode-cdn.net/home/yyy/dev/personal/marketdata/notebooks/~/dev/personal/marketdata/.venv/lib/python3.10/site-packages/yfinance_cache/yfc_ticker.py:223) hist = self._histories_manager.GetHistory(interval)
    [224](https://file+.vscode-resource.vscode-cdn.net/home/yyy/dev/personal/marketdata/notebooks/~/dev/personal/marketdata/.venv/lib/python3.10/site-packages/yfinance_cache/yfc_ticker.py:224) if period is not None:
--> [225](https://file+.vscode-resource.vscode-cdn.net/home/yyy/dev/personal/marketdata/notebooks/~/dev/personal/marketdata/.venv/lib/python3.10/site-packages/yfinance_cache/yfc_ticker.py:225)     h = hist.get(start=None, end=None, period=period, max_age=max_age, trigger_at_market_close=trigger_at_market_close, quiet=quiet)
    [226](https://file+.vscode-resource.vscode-cdn.net/home/yyy/dev/personal/marketdata/notebooks/~/dev/personal/marketdata/.venv/lib/python3.10/site-packages/yfinance_cache/yfc_ticker.py:226) elif interday:
    [227](https://file+.vscode-resource.vscode-cdn.net/home/yyy/dev/personal/marketdata/notebooks/~/dev/personal/marketdata/.venv/lib/python3.10/site-packages/yfinance_cache/yfc_ticker.py:227)     h = hist.get(start_d, end_d, period=None, max_age=max_age, trigger_at_market_close=trigger_at_market_close, quiet=quiet)

File ~/dev/personal/marketdata/.venv/lib/python3.10/site-packages/yfinance_cache/yfc_prices_manager.py:516, in PriceHistory.get(self, start, end, period, max_age, trigger_at_market_close, repair, prepost, adjust_splits, adjust_divs, quiet)
    [513](https://file+.vscode-resource.vscode-cdn.net/home/yyy/dev/personal/marketdata/notebooks/~/dev/personal/marketdata/.venv/lib/python3.10/site-packages/yfinance_cache/yfc_prices_manager.py:513) self._applyNewEvents()
    [515](https://file+.vscode-resource.vscode-cdn.net/home/yyy/dev/personal/marketdata/notebooks/~/dev/personal/marketdata/.venv/lib/python3.10/site-packages/yfinance_cache/yfc_prices_manager.py:515) try:
--> [516](https://file+.vscode-resource.vscode-cdn.net/home/yyy/dev/personal/marketdata/notebooks/~/dev/personal/marketdata/.venv/lib/python3.10/site-packages/yfinance_cache/yfc_prices_manager.py:516)     yf_lag = yfcd.exchangeToYfLag[self.exchange]
    [517](https://file+.vscode-resource.vscode-cdn.net/home/yyy/dev/personal/marketdata/notebooks/~/dev/personal/marketdata/.venv/lib/python3.10/site-packages/yfinance_cache/yfc_prices_manager.py:517) except:
    [518](https://file+.vscode-resource.vscode-cdn.net/home/yyy/dev/personal/marketdata/notebooks/~/dev/personal/marketdata/.venv/lib/python3.10/site-packages/yfinance_cache/yfc_prices_manager.py:518)     print(f"- ticker = {self.ticker}")

KeyError: 'DUS'

yfinance seems to be working just fine, so my only guess is that there is an issue trying to repair the data

ValueRaider commented 1 month ago

I've reproduced error and fix is simple.

crypdick commented 1 month ago

@ValueRaider In case it is useful, I encountered this error with a different code path: import yfinance_cache as yf; yf.download("^VIX", period="5y", interval="1d", threads=False, progress=False)

Traceback:

- ticker = ^VIX
Traceback (most recent call last):
  File "/home/richard/src/PERSONAL/stonk-screener/hurricane/hurricane.py", line 70, in <module>
    vix = yf.download(
          ^^^^^^^^^^^^
  File "/home/richard/src/PERSONAL/stonk-screener/.conda/lib/python3.12/site-packages/yfinance_cache/yfc_multi.py", line 97, in download
    df = yfc_ticker.Ticker(tkr, session=session).history(**hist_args)
         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/richard/src/PERSONAL/stonk-screener/.conda/lib/python3.12/site-packages/yfinance_cache/yfc_ticker.py", line 225, in history
    h = hist.get(start=None, end=None, period=period, max_age=max_age, trigger_at_market_close=trigger_at_market_close, quiet=quiet)
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/richard/src/PERSONAL/stonk-screener/.conda/lib/python3.12/site-packages/yfinance_cache/yfc_prices_manager.py", line 535, in get
    yf_lag = yfcd.exchangeToYfLag[self.exchange]
             ~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^
KeyError: 'CXI'
ValueRaider commented 1 month ago

I'll fix soon, workaround is avoid those exchanges.

ValueRaider commented 1 month ago

@valotas Fix in-progress, just needs an update to another project https://github.com/gerrymanoim/exchange_calendars/pull/387

ValueRaider commented 1 month ago

@crypdick Can you help me understand the VIX trading hours? Yahoo showing 2am -> 3pm, that seems very unusual like Yahoo messed up timezone. Is Yahoo correct? If Yahoo is wrong, has it always been wrong?