🚀 AI 一键生成 qmt 策略代码
立即体验

QMT平台如何利用Level 2数据构建订单流失衡(OBI)高频交易策略?

qmt | 发布时间: 2026/8/12
以下内容由 EasyQuant 生成。

问题描述

QMT Level2高频量化:基于买卖盘口订单流失衡(OBI)的日内策略
在QMT量化平台中,如何使用Level 2数据构建订单流失衡(OBI)高频交易策略?

解决方案

QMT Level2高频量化:基于买卖盘口订单流失衡(OBI)的日内策略

在日内高频交易中,**订单流失衡(Order Book Imbalance, OBI)**是一个非常经典的微观结构指标。它通过量化买卖盘口委托量的非对称性,来预测价格在极短时间内的未来走势。QMT平台支持订阅和获取Level 2高频行情快照指标(l2quoteaux),这为我们构建OBI高频策略提供了底层数据支持。


一、 订单流失衡 (OBI) 核心原理

最基础的订单流失衡指标(OBI)计算公式如下:

$$
OBI_t = \frac{V^{Bid}_t - V^{Ask}_t}{V^{Bid}_t + V^{Ask}_t}
$$

其中:

  • $V^{Bid}_t$:$t$时刻的委买总量(totalBidQuantity
  • $V^{Ask}_t$:$t$时刻的委卖总量(totalOffQuantity

策略逻辑

  • 当 $OBI_t > \text{Threshold}$(买盘力量远大于卖盘),预示价格短期大概率上涨,触发买入信号。
  • 当 $OBI_t < -\text{Threshold}$(卖盘力量远大于买盘),预示价格短期大概率下跌,触发卖出或平仓信号。

二、 QMT Level 2 数据接口介绍

在QMT中,我们可以通过 ContextInfo.get_market_data_exContextInfo.subscribe_quote 接口,将 period 参数设置为 'l2quoteaux' 来获取Level 2行情快照。该指标包含以下核心字段:

  • totalBidQuantity: 委买总量
  • totalOffQuantity: 委卖总量
  • avgBidPrice: 委买均价
  • avgOffPrice: 委卖均价

三、 QMT Python 策略源码实现

以下是在QMT中实现基于 OBI 指标的高频日内交易策略模板:

#encoding:gbk
import pandas as pd
import numpy as np

def init(ContextInfo):
    # 设定股票池与交易账号
    ContextInfo.stock = '600000.SH'
    ContextInfo.set_universe([ContextInfo.stock])
    ContextInfo.accid = '6000000248' # 请替换为您的实际资金账号
    ContextInfo.set_account(ContextInfo.accid)
    
    # 策略参数设置
    ContextInfo.threshold = 0.5  # OBI 阈值
    ContextInfo.trade_volume = 100  # 每次下单股数
    
    # 订阅Level 2行情快照数据
    ContextInfo.subscribe_quote(ContextInfo.stock, period='l2quoteaux', callback=on_l2_quote)
    print("Level 2 OBI 策略初始化完成")

def handlebar(ContextInfo):
    pass

def on_l2_quote(datas):
    """
    Level 2 数据推送回调函数
    """
    for code, df in datas.items():
        if df.empty:
            continue
        
        # 获取最新的一条Level 2快照数据
        latest_data = df.iloc[-1]
        
        total_bid = latest_data.get('totalBidQuantity', 0)
        total_ask = latest_data.get('totalOffQuantity', 0)
        
        if (total_bid + total_ask) == 0:
            continue
            
        # 计算 OBI 指标
        obi = (total_bid - total_ask) / (total_bid + total_ask)
        
        # 获取当前持仓状态
        # 实际实盘中建议通过 get_trade_detail_data 查询真实持仓
        
        # 交易信号判定
        if obi > 0.5:
            # 买盘极度失衡,看涨,买入
            print(f"[信号] OBI={obi:.2f} > 0.5,触发买入 {code}")
            passorder(23, 1101, '6000000248', code, 5, -1, 100, 'OBI_Strategy', 1, 'Buy_Signal', 'VWAP')
            
        elif obi < -0.5:
            # 卖盘极度失衡,看跌,卖出
            print(f"[信号] OBI={obi:.2f} < -0.5,触发卖出 {code}")
            passorder(24, 1101, '6000000248', code, 5, -1, 100, 'OBI_Strategy', 1, 'Sell_Signal', 'VWAP')

四、 策略优化与实盘注意事项

  1. 撤单流引入:Level 2 快照中还包含 withdrawBidQuantity(买入撤单总量)和 withdrawOffQuantity(卖出撤单总量)。高频交易中,虚假申报频繁,结合撤单流可以有效识别“假买盘”或“假卖盘”,提高 OBI 的预测准确度。
  2. 滑点与手续费控制:高频策略对交易成本极其敏感。在QMT中实盘运行此策略时,建议配合**智能算法交易(如 smart_algo_passorder 的 TWAP/VWAP 算法)**进行拆单申报,以降低冲击成本。
  3. 快速交易参数:在调用 passorder 时,将 quickTrade 参数设置为 1,可以实现信号触发时立即下单,避免等待当前K线走完,确保高频策略的执行速度。