问题描述
使用get_stock_exrights查询某只股票的除权除息信息时,返回None,是股票代码错误吗?
解决方案
在使用 ptrade 量化平台的 get_stock_exrights 接口查询股票的除权除息信息时,如果返回 None,不一定是因为股票代码错误。
根据 ptrade API 文档的说明,最主要的原因是:输入的日期(或该股票历史上)确实没有除权除息信息。
详细原因排查:
-
该股票没有除权除息记录
根据官方文档:输入日期若没有除权除息信息则返回None,有相关数据则返回pandas.DataFrame类型数据。如果一只股票自上市以来从未进行过分红、送股或配股,或者在你指定的date当天没有发生除权除息,接口就会正常返回None。 -
日期参数 (
date) 设置问题- 如果你传入了具体的
date参数(例如date='20230510'),接口只会查询这一天是否有除权除息。如果这一天没有,就会返回None。 - 如果你想查询该股票历史上所有的除权除息信息,请不要传入
date参数(即保持默认值None)。
- 如果你传入了具体的
-
股票代码格式错误
虽然主要原因是无数据,但如果股票代码格式不正确(例如缺少后缀,或者后缀写错),系统无法识别该股票,自然也查不到数据,从而可能返回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 时,首先确认该股票是否真的有过除权除息,其次检查是否误传了没有发生除权除息的特定日期,最后核对股票代码的后缀格式是否标准。