系列:Python量化实战 · 第 8 篇

想拿分红做长线收息,第一关就被卡住:去哪查一只股票历年分了多少?股息率到底怎么算才不算错?网上攻略要么给个含糊公式、要么直接用不复权价相除,结果差出一大截。本文用 Python 拉取真实分红数据,给出一套股息率粗算与「连续分红」筛选思路,避开除权除息的坑。

本文你将得到什么

  • company_dividends 拉取个股历年分红,转 DataFrame 看结构
  • 一套「现金分红 ÷ 现价」的股息率粗算函数(含除权除息提醒)
  • 「连续 N 年分红」筛选思路,可叠加估值/盈利做过滤
  • 3 个容易踩的坑(除权失真、数据截止日、送转与现金分口径)

SDK 文档:https://github.com/MaiRuiApi/mairui

运行环境: Python 3.11+ · pandas 2.0+


环境准备

pip install mairui pandas
import os
import pandas as pd
from mairui import Client

licence = "LICENCE-66D8-9F96-0C7F0FBCD073"  # 演示证书,演示证书(读者复制即用,无需替换)
stock_code = "600519.SH"

获取分红数据

with Client(licence=licence) as api:
    dividend_raw = api.company_dividends(stock_code)

dividend_df = pd.DataFrame(dividend_raw or [])
print(dividend_df.columns.tolist())
print(dividend_df.tail())

股息率粗算骨架

def rough_dividend_yield(cash_div_per_share: float, price: float) -> float:
    if price <= 0:
        return float("nan")
    return cash_div_per_share / price


with Client(licence=licence) as api:
    bars = api.stock_history(stock_code, "d", "n", lt=5)

price_df = pd.DataFrame(bars or [])
print(price_df.tail(1))
print("将现金分红与现价代入 rough_dividend_yield(字段自行对齐)")

连续分红筛选思路

  1. 按年度统计是否有现金分红
  2. 要求近 N 年每年都有
  3. 再叠加估值/盈利指标做过滤

送转与现金分红请分口径处理。


避坑

  • 除权除息机制会导致「简单相除」失真。
  • 标注数据截止日期,便于复现。
  • 非投资建议。

下一篇

第 9 篇:指数行情与 ETF 列表数据拉取。


写在最后

本文只做数据接入与代码演示,不构成任何投资建议,股息率计算仅为方法演示,不对收益作任何承诺。

如果这套「Python量化实战」对你有用,欢迎关注系列持续更新;

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐