yfinance API 历史数据不正确

Posted

技术标签:

【中文标题】yfinance API 历史数据不正确【英文标题】:yfinance API incorrect historical data 【发布时间】:2021-04-06 08:47:18 【问题描述】:

我想用 yfinace 建立一个历史股票数据库来测试一些策略。不,我在使用 api 时遇到了一些历史数据的问题。它主要发生在非美国市场以外的股票。

例如,如果我使用以下方法获取“BOE.L”的历史数据:

boel = yf.Ticker("BOE.L")
boelHist = boel.history(period='max')

返回的最早收盘价是 2001-06-11,即:2.191053e-06 而在 yahoo 网站上,这个值是:2,347.00(对于这个日期)

有人知道这里发生了什么吗?

【问题讨论】:

【参考方案1】:

观察到共享“SAP.DE”的类似行为。

ticker = yf.Ticker("SAP.DE")
hist = ticker.history(start="2019-04-16", end="2021-04-16")

返回例如从现在起的最后 2 年(2021-04-16),在支付股息之前,价格似乎是正确的。 在这种情况下,股息已于 2020-05-22 (1,58)、2020-05-21 (1,58) 和 2019-05-15 (1,50) 支付。 差异几乎(但不是 100%)与股息金额相关。

以下屏幕截图显示了与“开盘”价格的差异:

comparison yfinance - yahoo - SAP.DE

https://finance.yahoo.com/quote/SAP.DE/history?period1=1514764800&period2=1618617600&interval=1d&filter=history&frequency=1d&includeAdjustedClose=true

您可以观察到“Open”、“High”、“Low”和“Close*”的区别,但“Adj Close**”似乎是正确的。

comparsion 2 - SAP.DE

如果使用参数interval="1h",“开盘”价格(108,36)是正确的(2020-05-21):

hist = ticker.history(interval="1h", start="2020-05-19", end="2020-05-25")

2020-05-21 108.360001 108.360001 107.599998 107.739998 175957 2020-05-21 107.900002 108.040001 107.300003 107.680000 416473 2020-05-21 107.459999 107.839996 107.300003 107.400002 433919 2020-05-21 107.580002 107.639999 107.120003 107.300003 158440 2020-05-21 107.480003 107.559998 107.059998 107.320000 227438 2020-05-21 107.379997 108.019997 107.199997 107.739998 189142 2020-05-21 107.500000 108.339996 107.500000 107.879997 336406 2020-05-21 108.059998 108.339996 107.120003 107.279999 454079 2020-05-21 107.779999 107.779999 106.400002 106.720001 542355

也许以下可以解释差异:

1.) 调整收盘价的计算: https://help.yahoo.com/kb/SLN28256.html

2.) 来源:https://finance.zacks.com/adjusted-closing-price-vs-closing-price-9991.html

“虽然股息对股东有利,但实际上会降低每只公司股票的价值。 减少的原因是支付股息降低了公司的价值,因为他们将资金或股票转移到股东手中,而不是将其投资回公司。与收盘价不同,调整后的收盘价反映了派息造成的贬值。”

关于这个的进一步讨论:

How does Yahoo Finance calculate Adjusted Close stock prices?

似乎有一个参数“back_adjust=True”,它应该提供调整后的值,但无法获得调整值?

hist = ticker.history(interval="1d", start="2020-05-19", end="2020-05-23", back_adjust=True)

https://github.com/ranaroussi/yfinance/issues/687

【讨论】:

以上是关于yfinance API 历史数据不正确的主要内容,如果未能解决你的问题,请参考以下文章

YFINANCE:检索更多ETF数据

python的yfinance股票历史记录不起作用

如何使用 yfinance 下载数据修复此错误

从 yfinance 操纵日期

用 Python 通过雅虎财经获取股票数据

yfinance 不工作 - 接收 json.decoder.JSONDecodeError