🚀 AI 一键生成 qmt 策略代码

QMT 平台 get_full_tick 函数获取数据原理解析及两种方式对比

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

问题描述

get_full_tick是怎么获取数据的?

1、直接 get_full_tick
2、先 subscribe_whole_quote 再 get_full_tick
请问两个方式 get_full_tick 是怎么获取数据的?有什么区别

解决方案

QMT 中 get_full_tick 获取数据原理解析

在 QMT(及衍生版本如迅投极速交易终端)中,get_full_tick 用于获取指定股票的最新分笔(Tick)快照数据(包含最新价、成交量、买卖五档等)。关于你提到的两种获取方式,其底层数据流转机制和适用场景有显著区别:

1. 直接调用 get_full_tick

获取原理
当你直接调用 ContextInfo.get_full_tick(stock_code) 时,程序会直接去本地客户端的内存缓存中读取该股票的最新 Tick 快照。

  • 如果该股票当前在你的 QMT 软件主图/副图上处于活跃状态,或者属于基础股票池,本地缓存中可能有较新的数据,此时能直接返回。
  • 如果该股票未被客户端关注,本地缓存中可能没有数据数据是过期的(Stale)。此时直接调用可能会返回空值,或者触发一次同步的网络请求去服务器拉取(这会导致策略执行阻塞和延迟)。

2. 先订阅(subscribe_quote / subscribe_whole_quote)再调用 get_full_tick

获取原理
当你先调用订阅函数(如 QMT 内置的 ContextInfo.subscribe_quote 或独立 API 中的 subscribe_whole_quote)时,客户端会向行情服务器发送一条长连接指令,要求服务器主动、实时地推送该股票(或全市场)的每一次 Tick 变动。

  • 客户端接收到推送后,会在后台自动更新本地内存中的 Tick 缓存。
  • 此时你再调用 get_full_tick,程序只是简单地从这个被实时维护的本地热缓存中读取最新快照。数据不仅绝对新鲜,而且读取速度极快(微秒级),不会产生网络阻塞。

两种方式的核心区别对比

对比维度 方式一:直接 get_full_tick 方式二:先订阅,再 get_full_tick
数据时效性 无法保证实时。可能获取到过期数据,甚至获取不到。 绝对实时。本地缓存由服务器推送的数据实时刷新。
执行延迟 较高。若本地无缓存,可能触发同步网络请求,阻塞策略运行。 极低。纯内存读取,无网络 I/O 阻塞。
网络开销 每次请求可能产生一次独立的网络交互(拉模式)。 建立一次长连接后,服务器增量推送(推模式),整体效率高。
适用场景 偶尔查询某只活跃股票的当前价格(低频、非核心逻辑)。 高频交易、多股监控、事件驱动策略(强烈推荐)。

总结与建议

在编写严谨的量化策略时,强烈建议采用“方式二”。即在策略初始化(init)阶段,先通过 ContextInfo.subscribe_quote 订阅你关注的股票池行情,然后在 handlebar 或回调函数中通过 get_full_tick 获取最新快照。这样可以确保你的策略基于最准确、延迟最低的盘口数据进行交易决策,避免因数据过期导致的滑点或废单。