![](/img/trans.png)
[英]How do I generate a pandas dataframe consisting of the adjusted close prices of a few stocks from yahoo finance?
[英]How does Yahoo Finance calculate Adjusted Close stock prices?
以下是雅虎財經顯然如何計算調整后的收盤價:
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 個左右的日期應該沒有結束調整,即 Factor 為1
。 然而,當你運行時:
df[df.Factor == 1].shape
你只得到37
日期(不管使用的四舍五入),沒有任何調整。
顯然,這是沒有意義的,而且——除非我遺漏了一些基本的東西——無論是在調整方法的實現中還是在雅虎代碼中都存在一些錯誤。
問題是雅虎財經不提供原始價格和調整后的價格供您使用。 如果您查看示例歷史價格頁面(例如 MSFT)的腳注,您將看到一條文字,上面寫着“針對拆分調整的收盤價;針對股息和拆分調整的調整收盤價”。
為了獲得干凈的調整后比率,需要原始(未調整)和調整后的價格。 然后您可以應用諸如 CRSP 之類的調整方法來推導出正確的值。 總之,你沒有做錯任何事! 這是雅虎輸出的內在限制。
參考文獻:[1] https://medium.com/@patrick.collins_58673/stock-api-landscape-5c6e054ee631 [2] http://www.crsp.org/products/documentation/crsp-calculations
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.