🚀 AI 一键生成 ptrade 策略代码

PTrade 回测与实盘:如何获取并处理股票的除权除息信息?

ptrade | 发布时间: 2025/11/28
以下内容由 EasyQuant 生成。

问题描述

怎样获取一只股票的除权除息历史记录?

解决方案

在PTrade量化交易平台中,获取一只股票的除权除息(分红、送股、配股)历史记录,主要使用 get_stock_exrights 接口。

以下是具体的获取方法、代码示例及字段说明。

1. 核心函数

get_stock_exrights(stock_code, date=None)

  • stock_code: 股票代码(如 '600570.SS')。
  • date: 查询日期。
    • 如果不传入该参数(默认 None),则返回该股票历史上所有的除权除息信息。
    • 如果传入具体日期(如 '20230510'),则只返回该日期的信息。

2. 代码示例

以下策略代码展示了如何在 initializehandle_data 中获取某只股票的全部除权除息记录并打印到日志中。

def initialize(context):
    # 设置要查询的股票代码,例如:恒生电子
    g.security = '600570.SS'
    set_universe(g.security)
    
    # 在初始化阶段直接调用(也可以在 handle_data 中调用)
    # 不传入 date 参数,获取该股票上市以来的所有除权除息记录
    ex_rights_df = get_stock_exrights(g.security)
    
    if ex_rights_df is not None:
        log.info("股票 %s 的除权除息历史记录如下:" % g.security)
        log.info(ex_rights_df)
    else:
        log.info("股票 %s 没有查询到除权除息记录。" % g.security)

def handle_data(context, data):
    pass

3. 返回数据说明

该函数返回一个 pandas.DataFrame 对象,索引(Index)为除权除息日(date,格式为 int64,如 20230615)。

主要列名及其含义如下:

字段名 类型 含义说明
bonus_ps float 每股分红(单位:元)。即每股派发的现金红利。
allotted_ps float 每股送股(单位:股)。即每股送红股的数量。
rationed_ps float 每股配股(单位:股)。即每股配股的数量。
rationed_px float 配股价(单位:元)。配股时的执行价格。
exer_forward_a float 前复权因子A(用于计算前复权价格:Price * A + B)。
exer_forward_b float 前复权因子B。
exer_backward_a float 后复权因子A。
exer_backward_b float 后复权因子B。

4. 注意事项

  1. 数据类型:返回的 DataFrame 中,日期的索引通常是整数类型(如 20200605),在进行时间序列处理时可能需要转换为 datetime 对象。
  2. 空值处理:如果某只股票没有任何除权除息记录(例如刚上市的新股),该函数会返回 None,代码中务必增加 if ex_rights_df is not None: 的判断,防止报错。
  3. 适用范围:该函数在研究回测交易模块中均可使用。

Q&A

Q: 如何只查询某一天的除权除息信息?
A: 在调用函数时传入 date 参数即可,例如:get_stock_exrights('600570.SS', date='20220615')

Q: 返回的数据中 bonus_ps 是税前还是税后?
A: 通常情况下,行情数据中提供的每股分红(bonus_ps)指的是税前派息金额。

Q: 为什么我查询到的 DataFrame 是空的或者 None?
A: 如果返回 None,说明该股票在历史上没有发生过除权除息事件,或者该股票代码输入有误。请检查代码后缀(如 .SS.SZ)是否正确。

Q: 这个函数能获取到未来的分红预案吗?
A: 不能。get_stock_exrights 获取的是已经实施正式公告确权的除权除息信息(即交易所发布的除权数据),不包含董事会预案阶段的数据。