问题描述
传入get_stock_exrights的date参数有时报错有时正常,应该使用什么格式?
解决方案
在 ptrade 量化平台中,调用 get_stock_exrights 函数获取股票除权除息信息时,date 参数对传入的格式有严格的要求。如果您在调用时遇到时而正常、时而报错的情况,通常是因为传入了不支持的日期格式。
date 参数支持的格式
根据 ptrade API 文档,date 参数支持以下三种格式:
- 字符串 (str):格式必须为
'YYYYMMDD',例如'20180228'。注意:不支持带横杠的格式如'2018-02-28'。 - 整数 (int):格式为
YYYYMMDD,例如20180228。 - 日期对象 (datetime.date):例如
datetime.date(2018, 2, 28)。
此外,如果不传入 date 参数(即默认值为 None),函数将返回该股票历史上所有的除权除息信息。
常见报错原因分析
如果您传入的参数报错,请检查是否属于以下情况:
- 传入了带分隔符的字符串,如
'2018-02-28'或'2018/02/28'。 - 传入了
datetime.datetime对象(包含时间信息),而不是datetime.date对象。 - 传入了其他不支持的数据类型。
正确的代码示例
import datetime
def initialize(context):
g.security = '600570.SS'
set_universe(g.security)
def handle_data(context, data):
# 方式一:不传 date,获取所有历史除权除息信息
all_exrights = get_stock_exrights(g.security)
log.info('所有除权除息信息:\n%s' % all_exrights)
# 方式二:传入字符串格式 'YYYYMMDD'
exrights_str = get_stock_exrights(g.security, date='20200605')
log.info('字符串格式查询:\n%s' % exrights_str)
# 方式三:传入整数格式 YYYYMMDD
exrights_int = get_stock_exrights(g.security, date=20200605)
log.info('整数格式查询:\n%s' % exrights_int)
# 方式四:传入 datetime.date 对象
query_date = datetime.date(2020, 6, 5)
exrights_date = get_stock_exrights(g.security, date=query_date)
log.info('date对象格式查询:\n%s' % exrights_date)
总结:为了保证策略的稳定性,建议统一使用 'YYYYMMDD' 的字符串格式或 datetime.date 对象来传递日期参数。