问题描述
使用get_stock_status查询股票状态时,返回的字典中股票代码对应的值为None,是什么情况?
解决方案
在 ptrade 量化平台中,使用 get_stock_status 接口查询股票状态(如 ST、停牌、退市)时,如果返回的字典中某个股票代码对应的值为 None,通常是由以下几种原因导致的:
1. 未查询到相关数据
这是最常见的原因。如果指定的日期(query_date)或当前日期下,该股票没有对应的状态记录,系统会返回 None。例如,查询某只股票在某天是否停牌,如果该股票当天正常交易,或者该股票在查询日期还未上市,就可能返回 None。
2. 输入参数有误
- 股票代码错误:传入的股票代码格式不正确,或者该股票代码在系统中不存在。请确保股票代码包含正确的后缀(如
'600570.SS'或'000001.SZ')。 - 查询类型错误:
query_type参数输入了不支持的类型。目前支持的类型有'ST'、'HALT'、'DELISTING'。如果输入了其他字符串,可能会导致查询失败并返回None。 - 日期格式错误:如果指定了
query_date,请确保日期格式为'YYYYmmdd'(例如'20231025')。格式错误会导致无法正确解析日期,从而返回None。
3. 接口说明回顾
根据 ptrade API 文档:
返回:返回 dict 类型,每支股票对应的值为 True 或 False,当没有查询到相关数据或者输入有误时返回 None。
排查建议
- 检查股票代码:确认传入的
stocks列表中的代码是否正确,是否包含正确的市场后缀。 - 检查查询类型:确认
query_type是否为'ST'、'HALT'或'DELISTING'之一。 - 检查日期:如果使用了
query_date,确认日期格式是否为'YYYYmmdd',并且该日期是有效的交易日。 - 增加异常处理:在策略代码中,处理
get_stock_status的返回值时,务必考虑到None的情况,避免引发TypeError。
示例代码(包含异常处理)
def handle_data(context, data):
stocks_list = ['600570.SS', '000001.SZ', 'invalid_code']
# 查询是否为 ST 股票
st_status = get_stock_status(stocks_list, 'ST')
for stock in stocks_list:
status = st_status.get(stock)
if status is True:
log.info(f"{stock} 是 ST 股票")
elif status is False:
log.info(f"{stock} 不是 ST 股票")
else:
log.warning(f"{stock} 状态查询返回 None,请检查代码或数据")