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

JoinQuant量化平台中的Tick事件是什么?如何使用handle_tick?

joinquant | 发布时间: 2026/5/29
以下内容由 EasyQuant 生成。

问题描述

tick事件是什么?

在API文档里面,提到了tick事件,handle_tick(context, tick)在订阅的标的产生tick事件时被调用。如果没有 tick 事件, 则不会被调用。
可是我在API文档里面,却没有找到对tick事件的说明或解释。

解决方案

在 JoinQuant(聚宽)量化平台中,Tick 事件是高频(Tick级别)策略运行的核心驱动力。要理解 Tick 事件,首先需要理解什么是 Tick 数据

1. 什么是 Tick 数据?

Tick 数据指的是交易所发布的盘面行情快照。它记录了某一特定时刻市场上该标的的最新成交价、成交量、买卖盘挂单(如买一到买五、卖一到卖五)等信息。

在 JoinQuant 平台中,不同品种的 Tick 数据快照频率如下:

  • 股票/场内基金/指数:每 3秒 产生一次快照(提供买五卖五数据)。
  • 期货:每 0.5秒 产生一次快照(提供买一卖一数据)。

2. 什么是 Tick 事件?

Tick 事件就是指**交易所产生并推送了一个新的 Tick 数据(行情快照)**这一动作。

在你的量化策略中,如果你将运行频率设置为 tick 级别,并且通过 subscribe() 函数订阅了某个标的(例如平安银行 000001.XSHE),那么:

  • 每当平安银行在真实市场中产生了一个新的 3秒快照,JoinQuant 系统就会捕捉到这个Tick 事件
  • 系统捕捉到事件后,会自动调用你策略中编写的 handle_tick(context, tick) 函数。
  • 如果没有新的快照产生(例如停牌、非交易时间,或者某些极度冷门标的在某段时间内没有任何盘口变化),就不会产生 Tick 事件,handle_tick 也就不会被调用。

3. 如何在策略中使用 Tick 事件?

要让 handle_tick 正常工作,你需要完成以下几个步骤:

  1. 设置运行频率:在创建回测或模拟交易时,频率必须选择为 tick
  2. 开启真实价格模式:Tick 级回测必须使用真实价格模式 set_option('use_real_price', True)
  3. 订阅标的:在 before_trading_start 或其他初始化函数中,使用 subscribe(security, 'tick') 订阅你关注的标的。
  4. 编写处理逻辑:在 handle_tick(context, tick) 中编写你的高频交易逻辑。

示例代码:

import jqdata

def initialize(context):
    # 开启真实价格模式(Tick回测必须)
    set_option('use_real_price', True)
    # 设置基准和手续费等...

def before_trading_start(context):
    # 订阅平安银行的 tick 事件
    subscribe('000001.XSHE', 'tick')

# 当平安银行产生新的行情快照(每3秒)时,此函数被触发
def handle_tick(context, tick):
    # tick 对象包含了当前的盘面快照信息
    print(f"时间: {tick.datetime}, 最新价: {tick.current}, 买一价: {tick.b1_p}, 卖一价: {tick.a1_p}")
    
    # 在这里编写你的高频交易逻辑
    # if tick.current > ...:
    #     order('000001.XSHE', 100)

def after_trading_end(context):
    # 收盘后取消订阅
    unsubscribe_all()

4. tick 对象包含哪些信息?

handle_tick 被触发时,传入的 tick 参数是一个对象,包含了当时的盘面快照信息,主要属性包括:

  • tick.code: 标的代码
  • tick.datetime: tick 发生的时间
  • tick.current: 最新价
  • tick.high / tick.low: 截至到当前时刻的最高价/最低价
  • tick.volume / tick.money: 截至到当前时刻的累计成交量/成交额
  • tick.a1_p ~ tick.a5_p: 卖一价到卖五价
  • tick.b1_p ~ tick.b5_p: 买一价到买五价
  • tick.a1_v ~ tick.a5_v: 卖一量到卖五量
  • tick.b1_v ~ tick.b5_v: 买一量到买五量

总结

简单来说,Tick 事件就是“行情刷新了一下”handle_tick 就是一个监听器,只要你订阅的股票行情刷新了,它就会立刻告诉你:“行情更新了,这是最新的盘口数据(tick对象),你要不要下单?”