🚀 AI 一键生成 ptrade 策略代码
立即体验
👉 AI 生成代码 👈

PTrade量化交易:在tick_data中快速获取行情快照的技巧

ptrade | 发布时间: 2026/6/2
以下内容由 EasyQuant 生成。

问题描述

PTrade中tick_data函数中如何更快速地获取行情快照?

觉得tick_data中的data获取太慢

解决方案

在 PTrade 量化交易平台中,tick_data(context, data) 函数默认是每隔 3秒 触发一次。很多开发者会觉得直接从入参 data 中解析行情数据(如 data[security]['tick'])存在一定的延迟感。如果您希望在策略中更快速、主动地获取最新的行情快照,可以尝试以下几种替代方案和优化技巧:

1. 主动调用 get_snapshot 获取实时快照

入参 data 是引擎在触发 tick_data 时推送的切片数据。如果您在函数执行的逻辑中需要获取“调用这一瞬间”的最实时数据,可以直接使用 get_snapshot(security) 接口。该接口会直接向柜台/行情源请求最新的快照数据。

def tick_data(context, data):
    security = '600570.SS'
    # 不使用 data 参数中的推送,而是主动拉取最新快照
    snapshot = get_snapshot(security)
    if snapshot and security in snapshot:
        last_px = snapshot[security].get('last_px', 0)
        log.info(f"最新成交价: {last_px}")

2. 使用更轻量的 get_gear_price 获取档位行情

如果您只需要买卖五档/十档的价格和委托量,而不需要完整的快照信息(如市盈率、换手率等),建议使用 get_gear_price(security)。这个接口专门用于获取档位行情,数据结构更轻量,解析速度更快。

def tick_data(context, data):
    security = '600570.SS'
    # 快速获取档位行情
    gear_price = get_gear_price(security)
    if gear_price and 'bid_grp' in gear_price:
        # 获取买一价
        buy_1_price = gear_price['bid_grp'].get(1, [0])[0]
        log.info(f"买一价: {buy_1_price}")

3. 区分“行情延迟”与“委托/成交延迟”

如果您觉得“慢”是因为下单后状态更新不及时,请注意:不要在 tick_data 中轮询订单状态。对于订单和成交的极速响应,PTrade 提供了专门的主推回调函数:

  • on_order_response(context, order_list):委托主推回调
  • on_trade_response(context, trade_list):成交主推回调

这两个函数比引擎和 get_orders() 更新状态的速度更快,适合对速度要求极高的策略。

4. 注意事项与性能优化

  • 频率限制:PTrade 的 tick_datarun_interval 最小运行频率都是 3秒。这是平台底层的限制,无法通过修改代码突破到1秒或毫秒级。
  • Level 2 行情tick_data 中的逐笔委托(order)和逐笔成交(transaction)需要券商开通 Level 2 行情权限,否则对应字段会返回 None。
  • 字典格式加速:在调用获取逐笔数据的接口(如 get_individual_entrustget_individual_transaction)时,强烈建议将入参 is_dict=True,返回字典类型数据的速度比返回 DataFrame/Panel 有大幅提升。