🚀 AI 一键生成 ptrade 策略代码
立即体验
👉 AI 生成代码 👈

为什么 ptrade 的 get_stock_exrights 接口会返回 None?

ptrade | 发布时间: 2026/6/8
以下内容由 EasyQuant 生成。

问题描述

get_stock_exrights返回None是什么原因?

使用get_stock_exrights查询某只股票的除权除息信息时,返回None,是股票代码错误吗?

解决方案

在使用 ptrade 量化平台的 get_stock_exrights 接口查询股票的除权除息信息时,如果返回 None不一定是因为股票代码错误

根据 ptrade API 文档的说明,最主要的原因是:输入的日期(或该股票历史上)确实没有除权除息信息

详细原因排查:

  1. 该股票没有除权除息记录
    根据官方文档:输入日期若没有除权除息信息则返回None,有相关数据则返回pandas.DataFrame类型数据。如果一只股票自上市以来从未进行过分红、送股或配股,或者在你指定的 date 当天没有发生除权除息,接口就会正常返回 None

  2. 日期参数 (date) 设置问题

    • 如果你传入了具体的 date 参数(例如 date='20230510'),接口只会查询这一天是否有除权除息。如果这一天没有,就会返回 None
    • 如果你想查询该股票历史上所有的除权除息信息,请不要传入 date 参数(即保持默认值 None)。
  3. 股票代码格式错误
    虽然主要原因是无数据,但如果股票代码格式不正确(例如缺少后缀,或者后缀写错),系统无法识别该股票,自然也查不到数据,从而可能返回 None。请确保代码格式正确,例如上交所股票应为 '600570.SS',深交所应为 '000001.SZ'

正确的使用示例:

def initialize(context):
    # 确保股票代码格式正确,带有 .SS 或 .SZ 后缀
    g.security = '600570.SS'
    set_universe(g.security)

def handle_data(context, data):
    # 1. 查询历史上所有的除权除息信息(不传 date)
    all_exrights = get_stock_exrights(g.security)
    if all_exrights is None:
        log.info('%s 历史上没有除权除息记录' % g.security)
    else:
        log.info('历史除权除息信息:\n%s' % all_exrights)
        
    # 2. 查询特定日期的除权除息信息
    specific_date_exrights = get_stock_exrights(g.security, date='20200605')
    if specific_date_exrights is None:
        log.info('%s 在 20200605 没有除权除息' % g.security)
    else:
        log.info('20200605 除权除息信息:\n%s' % specific_date_exrights)

总结:遇到返回 None 时,首先确认该股票是否真的有过除权除息,其次检查是否误传了没有发生除权除息的特定日期,最后核对股票代码的后缀格式是否标准。