雅虎财经如何计算调整后收盘股价?

myk*_*yke 7 python finance yahoo-api yahoo-finance

雅虎财经显然是这样计算调整后收盘股价的:

https://help.yahoo.com/kb/adjusted-close-sln28256.html

由此,我了解到,恒定因子适用于未调整的价格,并且该因子随着每次股息或分割事件而变化,这种情况应该不会经常发生。我应该能够通过将未调整的价格除以调整后的价格来推断出该因素。

然而,如果我用 AAPL 数据(使用 Python)验证这一点,我会得到令人困惑的结果:

import yfinance 
df =  yfinance.download("AAPL", start="2010-01-01", end="2019-12-31")
df["Factor"] = df["Close"] / df["Adj Close"]
print(df["Factor"].nunique(), df["Factor"].count())
Run Code Online (Sandbox Code Playgroud)

其产生:2442 2516

因此,在大多数情况下,这个因素是不同的。但 AAPL 通常每年有 4 次股息事件,并在此期间进行股票分割,因此我预计大约有 40 个不同的因素,而不是 2442 个。

雅虎财经在上面的链接下提供的公式是否过于简化,或者我在这里遗漏了什么?

Jac*_*ing 1

我不确定这是否是完整的答案,但对于评论来说太长了:

首先,四舍五入肯定存在问题。如果您将第三行修改为

df["Factor"] = df["Close"] / df["Adj Close"].round(12)
Run Code Online (Sandbox Code Playgroud)

您将获得 2441 个独特因素。但是,例如,如果您使用 ,round(6)则只能获得 46 个独特因子。

其次,根据你问题中雅虎帮助页面的调整规则,每次分红都会对除息日之前的5个交易日进行调整。在你提出问题的 10 年期间,没有进行股票分割,并且有大约 40 次季度股息。这些应该会产生 200 个日期,并调整收盘价。所有其他 2300 个左右的日期不应有收盘调整,即因子为1。然而当你跑步时:

df[df.Factor == 1].shape
Run Code Online (Sandbox Code Playgroud)

您只得到37日期(无论使用何种舍入),无需进行任何调整。

显然,这是没有意义的,而且 - 除非我遗漏了一些基本的东西 - 在调整方法的实现或雅虎代码中都存在一些错误。