python - 雅虎财经如何计算调整后的收盘价?
问题描述
以下是雅虎财经显然是如何计算调整后收盘价的:
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 个。
雅虎财经在上述链接下提供的公式是否过于简化或者我在这里遗漏了什么?
解决方案
我不确定这是一个完整的答案,但是评论太长了:
首先,四舍五入肯定存在问题。如果您将第三行修改为
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
没有调整的日期(不管使用的四舍五入)。
显然,这没有意义,而且——除非我遗漏了一些基本的东西——在调整方法的实施或雅虎代码中都有一些错误。
推荐阅读
- angular - 仅使用 X 标记删除 Modal
- material-ui - 如何修复此警告“useLayoutEffect”相关警告?
- swift - 未调用完成处理程序 - Alamofire / stripe
- java - Hibernate UserType:存储在数据库中的 LocalDate 无效
- unity3d - 在多个游戏对象上使用一个网络摄像头纹理
- python - 如何将短语列表转换为单词列表?
- asp.net-core - 配置一个 asp.net 核心 Web 应用程序以验证来自 ADFS 的 JWT 令牌
- python - 通过 tf.GradientTape 使用预训练模型进行迁移学习无法收敛
- node.js - 如何使用 NodeJS 计算 MongoDB 中的总行数?
- firebase - 如何修复 Keycloak 和 Firebase 之间的无效 JWT?