问题描述
使用get_tick_direction设置data_count=300但只返回了很少的数据,为什么?
解决方案
在 ptrade 量化交易平台中,使用 get_tick_direction 接口获取分时成交数据时,关于数据条数限制和返回数据异常的原因如下:
1. get_tick_direction 最多能获取多少条分时成交数据?
根据 ptrade API 文档规定,get_tick_direction 接口的 data_count 参数最大值为 200。默认值为 50。因此,单次调用该接口最多只能获取 200 条分时成交数据。
2. 为什么设置 data_count=300 但只返回了很少的数据?
如果您设置了 data_count=300,但实际返回的数据很少,通常由以下几个原因导致:
- 参数上限限制:如前所述,
data_count的系统硬性上限是 200。即使您传入 300,系统最多也只会尝试返回 200 条数据。 - Level2 行情权限未开通:这是最常见的原因。官方文档明确指出:分时成交数据需开通 Level2 行情才有数据推送,否则无数据返回。如果您没有开通 L2 行情,可能会获取不到数据或只能获取到极少量的基础快照切片。
- 实际成交笔数不足:如果您查询的股票交易非常冷清,在您查询的时间段(或指定的
start_pos附近)实际发生的逐笔成交本来就很少,那么返回的数据自然达不到您设定的上限。 - 查询日期限制:目前行情只支持查询当日的数据(
query_date=0或当日日期),无法获取历史分时成交。
💡 建议与代码示例
如果您需要获取最新的分时成交,请确保您的账户已开通 Level2 行情,并将 data_count 设置在合法范围内(<=200)。
def initialize(context):
g.security = '000001.SZ'
set_universe(g.security)
def handle_data(context, data):
# 合法调用:获取最大允许的 200 条分时成交数据
direction_data = get_tick_direction(g.security, data_count=200)
if direction_data and g.security in direction_data:
# 获取实际返回的数据条数
actual_count = len(direction_data[g.security]['business_amount'])
log.info(f"成功获取 {actual_count} 条分时成交数据")
else:
log.warning("未获取到数据,请检查是否开通 Level2 行情!")