如何通过Yahoo Finance API获取含股息再投资的股票假设增长率?
核心结论
- 你当前使用的Yahoo Finance
Adj Close字段本身已计入拆股、现金股息调整,调整逻辑就是模拟股息再投资后的等效股价,理论上你现有代码算出的回报率已经包含股息再投资收益。如果实际核对有偏差,大概率是yfinance的参数设置问题导致调用的调整价口径不对。 - 不需要你手动逐季度梳理派息金额,
yfinance支持直接拉取标的全量历史派息、拆股数据,你可以自行复现总回报计算逻辑做校验。
常见偏差原因
yf.download 默认参数auto_adjust=False 时返回的Adj Close 是Yahoo官方的总回报调整口径,和实际股息再投资收益一致;如果手动设置了auto_adjust=True,返回的调整价是yfinance自行计算的仅股价复权口径,不含股息再投资收益,就会出现你说的计算结果偏低的情况。
手动校验计算方法
如果需要自己实现股息再投资的逻辑做核对,可以参考以下代码:
import yfinance as yf # 初始化标的对象 msft = yf.Ticker("MSFT") # 拉取指定时间段的行情、派息、拆股数据 hist_data = msft.history(start="2015-01-01", end="2021-09-10", auto_adjust=False) # 模拟期初买入1股,跟踪持仓股数变化(分红再买入) hold_shares = 1 initial_price = hist_data["Close"].iloc[0] for date, row in hist_data.iterrows(): # 当日有派息时,用分红全额买入股票 if row["Dividends"] > 0: add_shares = (row["Dividends"] * hold_shares) / row["Close"] hold_shares += add_shares # 计算最终含股息再投资的回报率 final_value = hold_shares * hist_data["Close"].iloc[-1] roi_with_div = (final_value - initial_price) / initial_price print("含股息再投资的ROI:", roi_with_div)
补充说明
如果只需要单独获取标的的历史派息数据,直接调用yf.Ticker("MSFT").dividends 即可拿到所有派息日和对应每股派息金额,不需要额外整理公开数据。
内容的提问来源于stack exchange,提问作者user2417339
相关产品推荐
相关产品推荐

