PTrade 量化接口 get_stock_exrights 详解:一键查询股票历史除权除息、分红送股数据

0 阅读4分钟

一、前言

做价值量化、股息策略、回测复权计算时,股票分红、送股、配股数据是核心基础数据。如果缺少除权除息记录,回测收益会严重失真,无法真实还原历史收益。

PTrade 平台提供get_stock_exrights接口,专门用于查询个股全部历史除权除息记录,包含送股、现金分红、配股等完整信息,相当于股票专属分红账本。本文完整讲解函数参数、关键字段、实战代码与使用规范。

二、函数核心作用

get_stock_exrights:查询股票历史除权除息(分红、送股、配股)记录,返回 DataFrame 表格数据;若指定日期无分红记录则返回None

生活化类比:类似银行卡利息流水台账,输入股票代码,即可获取历年每一笔分红、送股执行明细,用来判断个股股息能力、计算复权价格。

三、函数入参说明

函数完整调用格式:

get_stock_exrights(stock_code, date=None)
  1. 第一个参数(必填):stock_code 个股代码字符串,必须携带市场后缀:沪市.SS、深市.SZ,缺失后缀会查询失败。
  2. 第二个参数(可选):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_psexer_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

六、新手使用避坑要点

  1. 日期格式强制要求 YYYYmmdd 仅支持纯 8 位数字字符串,禁止2023-10-012023/10/012023.10.01等带分隔符格式,格式错误会返回空 / None。
  2. 无除权除息日返回 None,不是报错 指定日期没有分红、送股、配股操作时,接口返回None,代码中必须增加判空逻辑,直接读取字段会触发报错。
  3. 股票代码必须带市场后缀 沪市.SS、深市.SZ不可省略,例如600519查询失败,600519.SS才能正常获取数据。
  4. 批量查询建议循环调用 接口仅支持单只股票查询,多标的股票池需循环遍历代码逐个获取分红数据。

七、接口适用场景总结

  1. 股息价值选股:批量统计个股历年累计分红,筛选高股息标的;
  2. 历史回测复权计算:利用送股、分红系数修正历史 K 线,保证回测收益真实;
  3. 分红事件驱动策略:监控即将除权除息个股,做红利套利策略;
  4. 个股基本面分析:判断上市公司分红持续性,筛选长期稳定分红标的。

get_stock_exrights是 PTrade 股息策略、复权回测必备接口,通过读取完整分红流水,能精准量化个股分红能力,解决回测收益失真、红利选股无数据支撑的痛点。