🚀 AI 一键生成 qmt 策略代码

QMT中如何用get_market_data_ex替代get_full_tick获取最新Level2数据?

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

问题描述

get_full_tick无法获取lv2,可以用get_market_data_ex替代吗?

get_full_tick 无法获取 lv2,可以用 get_market_data_ex 替代并且只获取实时最新数据?

解决方案

核心解答

可以的。 在 QMT 平台中,get_full_tick 主要用于获取基础的最新分笔快照数据,确实无法直接获取 Level2 的特色指标。你可以完全使用 get_market_data_ex 来替代,并通过设置特定的参数来只获取实时的最新 Level2 数据

替代方案与参数设置

get_market_data_ex 是一个功能非常强大的数据获取接口,它支持获取 Level2 的快照指标和大单统计数据。为了只获取实时最新的一条数据,你需要这样设置参数:

  1. period (周期):设置为 'l2quoteaux' (Level2 行情快照指标) 或 'l2transactioncount' (Level2 大单统计)。
  2. count (数据个数):设置为 1,表示只取最新的一条数据。
  3. end_time (结束时间):保持为空字符串 '',系统会默认视为获取最新数据。

Python 代码示例

以下是在 QMT 策略中获取最新 Level2 数据的代码示例:

#coding:gbk

def init(ContextInfo):
    # 设置股票池,例如平安银行
    ContextInfo.set_universe(['000001.SZ'])

def handlebar(ContextInfo):
    # 确保在最后一根K线(实时行情)才触发
    if not ContextInfo.is_last_bar():
        return
        
    stock_list = ContextInfo.get_universe()
    
    # 1. 获取最新的 Level2 行情快照指标 (l2quoteaux)
    # count=1 且 end_time='' 表示只获取最新的一条数据
    l2_quote_data = ContextInfo.get_market_data_ex(
        fields=[],               # 空列表代表获取所有字段
        stock_code=stock_list, 
        period='l2quoteaux',     # 指定为 L2 快照指标
        start_time='', 
        end_time='',             # 为空视为最新
        count=1,                 # 只取1条
        dividend_type='none',
        fill_data=True,
        subscribe=True
    )
    
    print("最新 L2 快照数据:")
    for code, df in l2_quote_data.items():
        if not df.empty:
            print(f"代码: {code}")
            print(df)
            # 例如获取委买总量:df['totalBidQuantity'].iloc[-1]

    # 2. 获取最新的 Level2 大单统计数据 (l2transactioncount)
    l2_trans_data = ContextInfo.get_market_data_ex(
        fields=[], 
        stock_code=stock_list, 
        period='l2transactioncount', # 指定为 L2 大单统计
        start_time='', 
        end_time='', 
        count=1, 
        dividend_type='none',
        fill_data=True,
        subscribe=True
    )
    
    print("最新 L2 大单统计数据:")
    for code, df in l2_trans_data.items():
        if not df.empty:
            print(f"代码: {code}")
            print(df)

⚠️ 重要注意事项

  1. 权限要求:获取 Level2 数据(l2quoteauxl2transactioncount必须额外开通 Level-2 增强版权限,否则接口可能返回空数据或报错。
  2. 性能优化:如果你需要高频、低延迟地处理 L2 数据,建议结合 ContextInfo.subscribe_quote() 接口使用回调函数(callback)的方式进行订阅推送,这样比在 handlebar 中轮询调用 get_market_data_ex 效率更高。