首页 > 解决方案 > 雅虎财经如何计算调整后的收盘价?

问题描述

以下是雅虎财经显然是如何计算调整后收盘价的:

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())

产生:2442 2516

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

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

标签: pythonfinanceyahoo-financeyahoo-api

解决方案


我不确定这是一个完整的答案,但是评论太长了:

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

df["Factor"] = df["Close"] / df["Adj Close"].round(12)

你得到2441个独特的因素。但是,如果您使用 ,例如round(6),您只会得到 46 个独特的因素。

其次,根据您问题中雅虎帮助页面中的调整规则,每次股息都会导致除息日前5个交易日的调整。在您的问题的 10 年期间,没有股票拆分和大约 40 个季度股息。这些应该会导致 200 个日期调整后的收盘价。所有其他 2300 左右的日期都不应有收盘调整,即因子为1. 然而,当你运行时:

df[df.Factor == 1].shape

你只得到37没有调整的日期(不管使用的四舍五入)。

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


推荐阅读