get_full_tick — QMT 全推 Tick 数据 API 参考

ContextInfo.get_full_tick 是 QMT 内置 Python 中用于获取最新全推 Tick 数据的函数。调用后立即返回指定证券的当前 Tick 快照,包含最新价、开盘价、最高价、最低价、成交量、成交额以及多档买卖盘信息。与 subscribe_quote 的区别在于,get_full_tick 是主动拉取方式,不会注册回调。

QMT get_full_tick 函数原型与适用环境

【事实】 函数原型:

ContextInfo.get_full_tick(stock_code)

【事实】 适用环境与权限要求:

环境 是否支持 说明
回测环境 不适用 回测中无实时 Tick 数据
模拟信号环境 不适用 信号模式无实时行情
仿真交易环境 支持 获取仿真行情的全推 Tick
真实交易环境 支持 获取实时行情的全推 Tick
所需权限 行情权限 需在客户端中开通行情权限

【解释】 get_full_tick 仅在盘中实时运行环境有效。回测环境中应使用 get_market_data_ex 获取历史 Tick 数据。

QMT get_full_tick 参数详解

stock_code — 证券代码

【事实】 stock_codestrlist 类型,指定要查询的证券代码。

参数类型 示例 说明
str '600000.SH' 查询单个证券
list ['600000.SH', '000001.SZ'] 查询多个证券

【建议】 批量查询时传入 list 类型可减少函数调用次数,提高效率。

QMT get_full_tick 返回值结构

【事实】 返回值为 dict 类型,以证券代码为键,以 Tick 数据字典为值。

【事实】 返回值结构:

{
    '600000.SH': {
        'last_price': 10.52,
        'open': 10.50,
        'high': 10.55,
        'low': 10.48,
        'last_volume': 100,
        'amount': 1052000.0,
        'bid_price': [10.51, 10.50, 10.49, 10.48, 10.47, 0, 0, 0, 0, 0],
        'ask_price': [10.52, 10.53, 10.54, 10.55, 10.56, 0, 0, 0, 0, 0],
        'bid_volume': [500, 800, 1200, 2000, 3000, 0, 0, 0, 0, 0],
        'ask_volume': [300, 600, 1000, 1500, 2500, 0, 0, 0, 0, 0],
        'stock_code': '600000.SH',
        'time': 20240104093015
    }
}

【事实】 Tick 数据字段说明:

字段 类型 含义
last_price float 最新成交价
open float 今日开盘价
high float 今日最高价
low float 今日最低价
last_volume int 最新成交量(单笔)
amount float 今日累计成交额
bid_price list[float] 买价列表,索引 0~9 对应买一至买十
ask_price list[float] 卖价列表,索引 0~9 对应卖一至卖十
bid_volume list[int] 买量列表,索引 0~9 对应买一至买十
ask_volume list[int] 卖量列表,索引 0~9 对应卖一至卖十
stock_code str 证券代码
time int 时间戳,格式 YYYYMMDDHHMMSS

【解释】 买卖盘档位数量取决于行情权限。Level-1 行情通常提供 5 档买卖盘,Level-2 行情提供 10 档买卖盘。未使用的档位价格为 0,数量为 0。

QMT get_full_tick 示例代码

获取单个证券的 Tick 数据

# -*- coding: utf-8 -*-

def handlebar(ContextInfo):
    if not ContextInfo.is_last_bar():
        return

    # 获取 600000.SH 的最新 Tick 数据
    tick_data = ContextInfo.get_full_tick('600000.SH')

    if tick_data:
        tick = tick_data.get('600000.SH')
        if tick:
            print(f'证券代码: {tick["stock_code"]}')
            print(f'最新价: {tick["last_price"]}')
            print(f'开盘价: {tick["open"]}')
            print(f'最高价: {tick["high"]}')
            print(f'最低价: {tick["low"]}')
            print(f'成交额: {tick["amount"]}')

            # 打印五档买卖盘
            bid_price = tick['bid_price']
            ask_price = tick['ask_price']
            bid_volume = tick['bid_volume']
            ask_volume = tick['ask_volume']

            for i in range(5):
                if bid_price[i] > 0:
                    print(f'  买{i+1}: {bid_price[i]} x {bid_volume[i]}')
                if ask_price[i] > 0:
                    print(f'  卖{i+1}: {ask_price[i]} x {ask_volume[i]}')
    else:
        print('未获取到 Tick 数据')

获取多个证券的 Tick 数据

def handlebar(ContextInfo):
    if not ContextInfo.is_last_bar():
        return

    # 批量获取多只证券的 Tick 数据
    stocks = ['600000.SH', '000001.SZ', '000002.SZ']
    tick_data = ContextInfo.get_full_tick(stocks)

    for stock in stocks:
        tick = tick_data.get(stock)
        if tick:
            last_price = tick['last_price']
            bid1 = tick['bid_price'][0] if tick['bid_price'] else 0
            ask1 = tick['ask_price'][0] if tick['ask_price'] else 0
            print(f'{stock}: 最新价={last_price}, '
                  f'买一={bid1}, 卖一={ask1}')

计算买卖价差和盘口深度

def handlebar(ContextInfo):
    if not ContextInfo.is_last_bar():
        return

    tick_data = ContextInfo.get_full_tick('600000.SH')
    tick = tick_data.get('600000.SH')

    if tick and tick['last_price'] > 0:
        bid_price = tick['bid_price']
        ask_price = tick['ask_price']
        bid_volume = tick['bid_volume']
        ask_volume = tick['ask_volume']

        # 买卖价差
        if bid_price[0] > 0 and ask_price[0] > 0:
            spread = ask_price[0] - bid_price[0]
            print(f'买卖价差: {spread}')

        # 五档买盘深度
        bid_depth = sum(v for v in bid_volume[:5] if v > 0)
        ask_depth = sum(v for v in ask_volume[:5] if v > 0)
        print(f'五档买盘深度: {bid_depth}')
        print(f'五档卖盘深度: {ask_depth}')

        # 盘口压力比
        if ask_depth > 0:
            pressure_ratio = bid_depth / ask_depth
            print(f'盘口压力比: {pressure_ratio:.2f}')
            if pressure_ratio > 1.5:
                print('买盘压力较大,偏向多头')
            elif pressure_ratio < 0.67:
                print('卖盘压力较大,偏向空头')

QMT get_full_tick 注意事项

【事实】 使用该函数需注意以下事项:

注意项 说明
数据时效性 返回的是调用时刻的最新快照,非历史数据
行情权限 买卖盘档位数取决于行情权限(Level-1/Level-2)
非交易时间 非交易时间段返回的 Tick 数据为上一交易日的最后数据
停牌证券 停牌证券返回的 Tick 数据中价格可能为 0
数据来源 数据来自全推行情,需确保行情源已连接

【建议】

  1. 使用前检查 last_price 是否大于 0,以排除停牌或无数据的情况
  2. 批量查询时传入 list 类型可提高效率
  3. 回测环境中该函数无效,应使用 get_market_data_ex 获取历史 Tick 数据
  4. 如需持续监控行情变化,建议使用 subscribe_quote 订阅行情,而非在 handlebar 中轮询 get_full_tick

QMT get_full_tick 与 subscribe_quote 对比

【事实】 两种获取实时 Tick 数据方式的对比:

对比项 get_full_tick subscribe_quote
获取方式 主动拉取(Poll) 被动推送(Push)
触发时机 由策略代码主动调用 行情变化时自动触发回调
数据完整性 获取调用时刻的快照 每次行情更新都会触发
适用场景 按需查询、低频监控 实时监控、高频策略
资源消耗 按需消耗,不调用不消耗 持续占用资源
回测支持 不支持 不支持

【建议】 如果策略需要捕捉每一次行情变化(如高频策略),使用 subscribe_quote;如果仅需在特定时刻查询当前行情(如定时下单),使用 get_full_tick 更合适。

QMT get_full_tick 相关函数

函数 说明 链接
ContextInfo.subscribe_quote 订阅实时行情(推送方式) subscribe_quote
ContextInfo.unsubscribe_quote 取消行情订阅 unsubscribe_quote
ContextInfo.get_market_data_ex 获取历史 K 线数据 get_market_data_ex
ContextInfo.get_last_price 获取最新价 行情与数据获取
ContextInfo.get_bid_price 获取买盘价格 行情与数据获取

QMT get_full_tick 来源与更新时间

【事实】 本页面内容基于 QMT 官方文档整理。

项目
数据来源 QMT 官方文档
更新时间 2026-08-04
验证时间 2026-08-04
适用版本 以当前客户端版本为准