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

QMT 平台如何配置毫秒级定时器?run_time 高频监控实战指南

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

问题描述

qmt 毫秒级高频监控:如何配置 run_time 极速定时器?
qmt支持毫秒级别的定时任务吗?如何用run_time设置毫秒定时器?

解决方案

QMT 毫秒级高频监控:如何配置 run_time 极速定时器?

在量化交易中,尤其是高频交易或盘中极速监控场景下,毫秒级的定时任务至关重要。QMT 平台完全支持毫秒级别的定时任务。通过内置的 ContextInfo.run_time() 接口,开发者可以轻松创建高频定时器。


一、run_time 接口详解

ContextInfo.run_time() 用于在策略运行期间设置定时器,驱动指定的回调函数按照设定的时间间隔循环执行。

1. 接口定义

ContextInfo.run_time(funcName, period, startTime, market)

2. 参数说明

  • funcName (string): 回调函数的名称(需在策略中定义)。
  • period (string): 重复调用的时间间隔。支持以下格式:
    • 毫秒级:'XnMilliSecond'(如 '500nMilliSecond' 表示每 500 毫秒运行一次)
    • 秒级:'XnSecond'(如 '5nSecond' 表示每 5 秒运行一次)
    • 天级:'XnDay'(如 '5nDay' 表示每 5 天运行一次)
  • startTime (string): 定时器第一次启动的时间,格式为 "YYYY-MM-DD HH:MM:SS"。如果希望定时器立刻启动,可以设置一个历史时间。
  • market (string): 市场简称代码(如 'SH''SZ')。

⚠️ 注意事项

  1. 回测限制run_time() 定时器仅在实盘/模拟运行模式下有效,在历史回测模式下没有意义。
  2. 回调函数参数:被调用的回调函数必须且只能接收一个参数:ContextInfo

二、毫秒级定时器 Python 策略源码示例

以下是一个完整的 QMT 策略示例,展示了如何配置一个 500毫秒 执行一次的高频监控定时器:

#coding:gbk
import time

def init(ContextInfo):
    # 设定交易账号(实盘/模拟需绑定)
    # ContextInfo.set_account("6000000248")
    
    # 设置定时器:自 2023-01-01 起,每 500 毫秒执行一次 my_high_frequency_monitor 函数
    ContextInfo.run_time("my_high_frequency_monitor", "500nMilliSecond", "2023-01-01 09:30:00", "SH")
    print("【系统初始化】毫秒级定时器已成功注册!")

def my_high_frequency_monitor(ContextInfo):
    # 获取当前高精度时间戳
    current_time = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime())
    milliseconds = int((time.time() % 1) * 1000)
    
    # 执行高频监控逻辑,例如获取最新盘口、判断撤单或快速下单
    print(f"【高频监控触发】当前时间: {current_time}.{milliseconds:03d}")
    
    # 示例:在此处编写您的盘口监控与极速交易逻辑
    # passorder(23, 1101, ...)

def handlebar(ContextInfo):
    # 传统的逐K线驱动函数,在使用定时器时可保持为空
    pass

三、高频定时器的实战建议

  1. 避免阻塞操作:由于毫秒级定时器执行频率极高,回调函数(如上例中的 my_high_frequency_monitor)内部切勿编写耗时较长的阻塞代码(如复杂的网络请求、大规模数据计算或同步 I/O 读写),否则会导致定时器队列积压,影响交易时效。
  2. 合理设置间隔:虽然 QMT 支持极低延迟的毫秒级触发,但过高频的调用(如低于 100 毫秒)会极大地消耗 CPU 资源。建议根据实际业务场景(如套利、盘口微秒级变化监控)合理评估并设置时间间隔。