一、前言
做价值量化、股息策略、回测复权计算时,股票分红、送股、配股数据是核心基础数据。如果缺少除权除息记录,回测收益会严重失真,无法真实还原历史收益。
PTrade 平台提供get_stock_exrights接口,专门用于查询个股全部历史除权除息记录,包含送股、现金分红、配股等完整信息,相当于股票专属分红账本。本文完整讲解函数参数、关键字段、实战代码与使用规范。
二、函数核心作用
get_stock_exrights:查询股票历史除权除息(分红、送股、配股)记录,返回 DataFrame 表格数据;若指定日期无分红记录则返回None。
生活化类比:类似银行卡利息流水台账,输入股票代码,即可获取历年每一笔分红、送股执行明细,用来判断个股股息能力、计算复权价格。
三、函数入参说明
函数完整调用格式:
get_stock_exrights(stock_code, date=None)
- 第一个参数(必填):stock_code 个股代码字符串,必须携带市场后缀:沪市
.SS、深市.SZ,缺失后缀会查询失败。 - 第二个参数(可选):date 指定查询单天除权除息记录,格式严格为
YYYYmmdd纯数字字符串;不传则返回该股票全部历史分红送股记录。
四、返回结果关键字段解析
接口返回 DataFrame 包含多列字段,日常量化分析只需要重点关注 3 个核心字段:
| 字段名 | 中文释义 | 说明示例 |
|---|---|---|
| date | 除权除息日期 | 20230601 = 2023 年 06 月 01 日执行分红送股 |
| allotted_ps | 每股送股数量 | 数值 0.5 代表每 10 股送 5 股(0.5*10) |
| bonus_ps | 每股现金分红 | 数值 0.2 代表每 10 股分红 2 元(0.2*10) |
其余复权系数类字段(rationed_ps、exer_forward_a等)用于复权价格计算,普通股息选股策略可忽略。
五、实战代码示例
场景 1:查询个股全部历史分红送股记录
需求:查询工商银行 601398.SS 完整历史分红流水,仅打印日期、送股、分红核心字段,限制输出前 5 行避免数据过长。
# 策略初始化函数
def initialize(context):
print("策略启动,准备查询工商银行分红送股记录")
g.stock = "601398.SS" # 工商银行沪市代码
# 每日开盘前执行数据查询
def before_trading_start(context, data):
# 不传日期,查询全部历史除权除息记录
exrights_record = get_stock_exrights(g.stock)
print("工商银行历史分红送股记录(前5行):")
# 筛选只展示业务关键字段,截取前5行
print(exrights_record[["date", "allotted_ps", "bonus_ps"]].head(5))
# 盘中行情回调,无业务逻辑可置空
def handle_data(context, data):
pass
场景 2:查询指定单日的分红送股记录
需求:查询贵州茅台 600519.SS 在 2025 年 06 月 26 日是否存在分红送股,无记录则打印提示,有记录则输出每股分红、送股数据。
def initialize(context):
print("策略启动,查询茅台指定日期分红记录")
g.stock = "600519.SS"
g.query_date = "20250626" # 严格YYYYmmdd格式
def before_trading_start(context, data):
# 传入日期,查询当日除权除息记录
one_day_record = get_stock_exrights(g.stock, g.query_date)
if one_day_record is None:
print(f"贵州茅台在{g.query_date}当天无分红送股记录")
else:
print(f"贵州茅台{g.query_date}分红送股明细:")
send_num = one_day_record['allotted_ps'].iloc[0]
cash_div = one_day_record['bonus_ps'].iloc[0]
print(f"每股送股:{send_num}股(每10股送{send_num*10}股)")
print(f"每股现金分红:{cash_div}元(每10股分红{cash_div*10}元)")
def handle_data(context, data):
pass
六、新手使用避坑要点
- 日期格式强制要求 YYYYmmdd 仅支持纯 8 位数字字符串,禁止
2023-10-01、2023/10/01、2023.10.01等带分隔符格式,格式错误会返回空 / None。 - 无除权除息日返回 None,不是报错 指定日期没有分红、送股、配股操作时,接口返回
None,代码中必须增加判空逻辑,直接读取字段会触发报错。 - 股票代码必须带市场后缀 沪市
.SS、深市.SZ不可省略,例如600519查询失败,600519.SS才能正常获取数据。 - 批量查询建议循环调用 接口仅支持单只股票查询,多标的股票池需循环遍历代码逐个获取分红数据。
七、接口适用场景总结
- 股息价值选股:批量统计个股历年累计分红,筛选高股息标的;
- 历史回测复权计算:利用送股、分红系数修正历史 K 线,保证回测收益真实;
- 分红事件驱动策略:监控即将除权除息个股,做红利套利策略;
- 个股基本面分析:判断上市公司分红持续性,筛选长期稳定分红标的。
get_stock_exrights是 PTrade 股息策略、复权回测必备接口,通过读取完整分红流水,能精准量化个股分红能力,解决回测收益失真、红利选股无数据支撑的痛点。