在QMT中,“订阅”与“反订阅”数据是实现实时市场交互的核心功能,尤其适用于需要快速响应市场变化的策略。以下是针对不同接口的详细使用指南及降重后的讲解:

一、核心订阅接口概述

QMT提供三种关键接口,分别用于不同场景的数据订阅与管理:

  1. subscribe_quote用途:订阅单个或多个股票的特定周期行情(如K线或Tick)。限制:券商端通常限制同时订阅100个标的,且仅支持一档行情数据。适用场景:精准监控少数标的,如个股分钟级K线。
  2. subscribe_whole_quote用途:全推订阅整个市场或指定股票列表的实时分笔(Tick)数据。特点:每次推送增量数据,仅包含有变动的品种,适合多标的同步监控。
  3. unsubscribe_quote用途:通过订阅ID取消已订阅的数据,释放资源。必要性:避免超出订阅上限,优化资源利用率。

二、接口实战详解

1. subscribe_quote:单标的行情订阅

案例:订阅贵州茅台(600519.SH)的1分钟K线,实时打印收盘价。

# 回调函数:处理新到达的K线数据
def on_kline_update(data):
    stock_code = "600519.SH"
    latest_close = data[stock_code]["close"].iloc[-1]
    print(f"【实时接收】茅台1分钟收盘价: {latest_close}")

# 初始化策略时启动订阅
def init(ContextInfo):
    print("启动订阅:茅台1分钟行情...")
    ContextInfo.subscribe_quote(
        "600519.SH",
        period="1m",
        callback=on_kline_update
    )

# handlebar可留空,因逻辑在回调中完成
def handlebar(ContextInfo): pass

关键点

  • 回调驱动on_kline_update被动接收数据,适合高频更新场景。
  • 周期参数period="1m"可替换为"tick"获取逐笔数据。
  • 效率提示:每3秒推送一次数据,确保低延迟。

2. subscribe_whole_quote:全推订阅多标的

案例:同时监控平安银行(000001.SZ)、茅台(600519.SH)、50ETF(510050.SH)的Tick数据。

# 回调函数:打印全量Tick数据
def call_back(data): print(data)

# 初始化时订阅全市场或自定义列表
def init(ContextInfo):
    stock_list = ["000001.SZ", "600519.SH", "510050.SH"]
    ContextInfo.subID = ContextInfo.subscribe_whole_quote(stock_list, callback=call_back)

# handlebar中可输出订阅ID验证
def handlebar(ContextInfo):
    print(f"当前订阅ID: {ContextInfo.subID}")

优势对比

  • 批量处理:无需逐个订阅,适合多标的监控。
  • 增量推送:仅传输变动数据,减少带宽消耗。
  • 盘口数据:相比subscribe_quote,可获取更详细的逐笔成交与委托簿数据。

3. unsubscribe_quote:资源释放管理

案例:动态取消已订阅的行情,避免资源浪费。

# 初始化时创建订阅并保存ID
def init(ContextInfo):
    ContextInfo.stock_list = ["000001.SZ", "600519.SH"]
    ContextInfo.subID = ContextInfo.subscribe_whole_quote(ContextInfo.stock_list, callback=print)

# 运行中根据条件取消订阅
def handlebar(ContextInfo):
    if some_exit_condition:  # 自定义退出条件,如达到盈利目标
        ContextInfo.unsubscribe_quote(ContextInfo.subID)
        print("已取消订阅,释放资源。")

最佳实践

  • ID绑定:订阅时务必保存返回的subID,作为反订阅凭证。
  • 及时清理:策略退出前或不再需要数据时调用,防止超限。

三、总结与建议

  • 事件驱动设计:优先利用回调函数处理实时数据,降低轮询开销。
  • 资源优先级:高频策略选用subscribe_whole_quote,低频则用subscribe_quote节省配额。
  • 生命周期管理:结合handlebar逻辑动态调整订阅,平衡性能与需求。

掌握这三个接口,即可构建高效的实时交易策略,灵活应对市场波动。立即尝试将示例代码嵌入您的策略,体验QMT的实时数据处理能力!

(注:点我红色头像旁边有个咨询TA,加我微或者电话联系我)



温馨提示:投资有风险,选择需谨慎。