You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Python提取多只股票未来除息日及股息金额的技术求助

解决方案

1. 修复yfinance调用逻辑

yfinance的info字段结构已更新,原直接索引exDividendDate的方式失效,可改用以下两种方式获取未来股息信息:

方式A:查询即将到来的股息日历

import yfinance as yf

def fetch_dividend_details(ticker):
    ticker_obj = yf.Ticker(ticker)
    # 提取日历中的股息事件
    upcoming_div = ticker_obj.calendar.get('Dividends')
    if upcoming_div is not None:
        return {
            'ticker': ticker,
            'ex_dividend_date': upcoming_div.name.date(),
            'dividend_amount': upcoming_div.iloc[0]
        }
    # 若没有即将到来的,返回最新已宣布的股息(可能包含未来除息日)
    latest_div = ticker_obj.dividends.iloc[-1] if not ticker_obj.dividends.empty else None
    if latest_div:
        return {
            'ticker': ticker,
            'ex_dividend_date': latest_div.name.date(),
            'dividend_amount': latest_div
        }
    return {'ticker': ticker, 'ex_dividend_date': None, 'dividend_amount': None}

# 批量处理股票列表
stock_list = ['MSFT', 'AAPL', 'AMZN']
dividend_results = [fetch_dividend_details(s) for s in stock_list]

# 格式化输出
import pandas as pd
print(pd.DataFrame(dividend_results))

方式B:调用更新后的get_info方法

部分股票的除息日信息仍可通过get_info()获取:

ticker = yf.Ticker('MSFT')
info = ticker.get_info()
ex_date = info.get('exDividendDate')
div_amount = info.get('dividendRate')
# 时间戳转日期格式
if ex_date:
    ex_date = pd.to_datetime(ex_date, unit='s').date()
print(f"MSFT: 除息日 {ex_date}, 股息金额 {div_amount}")

2. 替代数据源:Polygon Python库

若yfinance仍不稳定,可使用Polygon的API(免费额度满足个人批量查询需求):

from polygon import RESTClient

def get_polygon_div_data(tickers, api_key):
    client = RESTClient(api_key)
    results = []
    for ticker in tickers:
        # 获取即将到来的股息
        div_events = list(client.list_dividends(ticker, limit=1, upcoming=True))
        if div_events:
            event = div_events[0]
            results.append({
                'ticker': ticker,
                'ex_dividend_date': event.ex_dividend_date.date(),
                'dividend_amount': event.cash_amount
            })
        else:
            results.append({'ticker': ticker, 'ex_dividend_date': None, 'dividend_amount': None})
    return results

# 使用示例
api_key = "你的Polygon API密钥"
print(get_polygon_div_data(['MSFT', 'AAPL'], api_key))

3. 关键提示

  • 免费数据源可能存在信息延迟或缺失,专业场景建议使用付费金融数据接口(如Bloomberg、FactSet)
  • 批量请求时需控制频率,避免触发API限流机制

内容的提问来源于stack exchange,提问作者Lord-Goku

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 08:13:12