🚀 AI 一键生成 qmt 策略代码

如何在 QMT 策略中处理实时 Tick 行情并做出快速反应?

qmt | 发布时间: 2025/11/24
以下内容由 EasyQuant 生成。

问题描述

我想在每一笔新的分笔成交数据到来时都执行一次我的判断逻辑,该如何做?

解决方案

在 QMT 中,要在每一笔新的分笔成交数据(Tick)到来时执行判断逻辑,最推荐的方式是使用 ContextInfo.subscribe_quote 函数进行行情订阅。

通过将订阅周期设置为 'tick' 并指定一个回调函数,每当有新的 Tick 数据推送时,系统会自动触发该回调函数。

以下是具体的实现代码示例和说明:

实现代码

# -*- coding: gbk -*-

def init(ContextInfo):
    # 1. 设定要订阅的股票代码
    stock_code = '600000.SH'
    
    # 2. 调用订阅函数
    # 参数说明:
    # stock_code: 股票代码
    # period='tick': 指定订阅周期为分笔数据
    # dividend_type='none': 分笔数据通常不复权
    # callback=on_tick_callback: 指定数据推送时触发的回调函数
    ContextInfo.subscribe_quote(stock_code, period='tick', dividend_type='none', callback=on_tick_callback)
    
    print(f"已订阅 {stock_code} 的Tick数据")

def on_tick_callback(datas):
    """
    这是回调函数,每当有新的Tick数据到来时会被调用
    datas: 字典类型 {code: dataframe}
    """
    # 遍历推送来的数据(通常只有订阅的那一只,但也可能多只)
    for stock_code, df in datas.items():
        # df 是一个 pandas DataFrame,包含该 tick 的详细信息
        # 获取最新价
        last_price = df['lastPrice'][0]
        # 获取时间
        time_str = df.index[0]
        # 获取成交量
        volume = df['volume'][0]
        
        # --- 在此处编写你的判断逻辑 ---
        print(f"收到Tick推送 - 代码: {stock_code}, 时间: {time_str}, 最新价: {last_price}, 成交量: {volume}")
        
        # 示例逻辑:如果价格大于某值则打印日志
        if last_price > 10.0:
            print(f"{stock_code} 价格突破 10.0 元")

def handlebar(ContextInfo):
    # handlebar 是 K 线驱动的,如果主要逻辑在 on_tick_callback 中处理,这里可以留空
    pass

关键点说明

  1. subscribe_quote 函数

    • 这是实现事件驱动的核心。
    • 必须在 init 中调用。
    • period 参数必须设置为 'tick'
  2. 回调函数 (callback)

    • 你需要定义一个函数(如上例中的 on_tick_callback),并将其函数名作为参数传给 subscribe_quote
    • 回调函数的入参 datas 是一个字典,Key 是股票代码,Value 是包含 Tick 数据的 pandas.DataFrame
  3. 数据结构

    • 返回的 DataFrame 包含了 Tick 的详细字段,如 lastPrice (最新价), amount (成交额), volume (成交量), askPrice (卖价), bidPrice (买价) 等。
  4. 运行模式

    • 此功能在实盘模拟交易模式下有效,能够实时响应行情。
    • 在回测模式下,如果数据精度足够,也会模拟 Tick 推送。