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

PTrade量化平台中如何实现tick级别的盘中处理?

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

问题描述

PTrade中tick级别的盘中处理应该用什么函数?

解决方案

在PTrade量化交易引擎中,常规的 handle_data 函数仅满足日线和分钟级别的盘中处理。如果您需要进行 tick级别 的盘中处理,需要通过 tick_data 或者 run_interval 函数来实现。

以下是这两个函数的详细介绍及使用场景:

1. tick_data(context, data) 函数

tick_data 是专门用于处理tick级别策略交易逻辑的事件函数。它在交易时间内(9:30 -- 14:59)每隔 3秒 执行一次。

特点与注意事项:

  • 专属数据结构tick_data 中的 data 参数与 handle_data 中的不同。它包含 order(逐笔委托)、tick(当前tick数据)、transcation(逐笔成交)三项。
  • 专属下单接口:在该函数中,只能使用 order_tick 进行对应的下单操作。
  • 权限要求:逐笔委托和逐笔成交数据需要开通Level2行情才有数据推送,否则对应数据返回None。

代码示例:

def initialize(context):
    g.security = '600570.SS'
    set_universe(g.security)

def tick_data(context, data):
    security = g.security
    # 获取买一价
    current_price = eval(data[security]['tick']['bid_grp'][0])[1][0]
    log.info('当前买一价: %s' % current_price)
    
    if current_price > 38.19:
        # 按买一档价格下单
        order_tick(security, 100, '1')

2. run_interval(context, func, seconds=10) 函数

run_interval 是一个定时周期性函数,用于以设定的时间间隔(单位为秒)周期性运行指定的自定义函数。它可以作为tick级别处理的另一种灵活实现方式。

特点与注意事项:

  • 初始化调用:该函数只能在初始化阶段 initialize 函数中调用。
  • 多线程并行:可以多次设定,以多个线程并行运行,但需要注意不同线程之间的逻辑关联处理。
  • 最小间隔seconds 设置最小时间间隔为3秒,小于3秒默认设定为3秒。

代码示例:

def initialize(context):
    g.security = '600570.SS'
    set_universe(g.security)
    # 定义一个周期处理函数,每3秒执行一次
    run_interval(context, interval_handle, seconds=3)

def interval_handle(context):
    # 获取实时行情快照
    snapshot = get_snapshot(g.security)
    if snapshot:
        last_px = snapshot[g.security].get('last_px')
        log.info('当前最新价: %s' % last_px)
        # 在此处编写您的tick级交易逻辑

总结

  • 如果您需要深度依赖Level2的逐笔数据和盘口档位,并且希望使用专门的tick下单接口,推荐使用 tick_data
  • 如果您只需要高频地(如每3秒)获取快照数据并执行自定义逻辑,run_interval 提供了更灵活的定时任务机制。
  • 另外,对于对速度要求极高的策略,还可以结合 on_order_response(委托主推)和 on_trade_response(成交主推)事件函数作为tick级的补充。