问题描述
使用get_tick_direction获取分时成交数据时,返回的数据为空,为什么?
解决方案
在 ptrade 量化交易平台中,使用 get_tick_direction 接口获取分时成交数据时返回空数据,通常是由以下几个原因导致的:
1. 未开通 Level2 行情权限(最常见原因)
根据 ptrade API 文档的明确说明:分时成交数据需开通 Level2 行情才有数据推送,否则无数据返回。普通的 Level1 行情无法获取逐笔/分时成交的详细数据。请联系您的券商确认您的账户是否已经开通了 Level2 行情权限。
2. 查询日期的限制
get_tick_direction 接口的 query_date 参数目前只支持查询当日的数据。如果您尝试传入历史日期(例如昨天的日期),接口将无法返回数据。默认情况下 query_date=0 即表示查询当日。
3. 标的当日无交易或停牌
如果您查询的股票在当日处于停牌状态,或者在您查询的时间点(如集合竞价前)尚未产生任何成交,接口也会返回空数据。
4. 接口调用环境限制
请确保该接口是在交易模块中调用的。文档指出该函数仅在交易模块可用,如果在回测或研究模块中调用,可能无法获取到预期的实时数据。
排查建议
- 确认权限:首先向券商客服确认您的资金账户是否绑定了有效的 Level2 行情。
- 检查参数:确保
query_date参数为0或当天的日期(格式YYYYMMDD)。 - 测试热门标的:尝试查询流动性好的热门股票(如
000001.SZ或600000.SS),以排除个股无成交的情况。
示例代码(正确调用方式):
def initialize(context):
g.security = '000001.SZ'
set_universe(g.security)
def handle_data(context, data):
# 获取当日分时成交数据,默认 query_date=0
direction_data = get_tick_direction(g.security)
if direction_data and g.security in direction_data:
log.info('成功获取数据')
business_amount = direction_data[g.security]['business_amount']
log.info('最新分时成交量:%s' % business_amount)
else:
log.warning('获取数据为空,请检查 Level2 权限或交易状态')