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

QMT 平台如何设置定时器?run_time 定时任务配置与 5 秒回调函数实现指南

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

问题描述

请根据以下 SEO 主题生成完整页面内容:

Title: qmt 定时器使用指南:run_time 定时任务配置

Question: qmt 如何设置定时器,每 5 秒运行一次特定回调函数?

解决方案

QMT 定时器使用指南:run_time 定时任务配置

在 QMT 平台中,如果需要脱离 K 线(Bar)的行情驱动,按照固定的时间间隔执行特定的逻辑(例如每 5 秒查询一次账户、定时撤单或定时发送心跳包),可以使用 QMT 提供的定时器接口 ContextInfo.run_time()

本文将详细介绍如何配置 run_time 定时器,实现每 5 秒运行一次特定回调函数的功能。


1. 定时器接口介绍

接口定义

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

参数说明

  • funcName (string): 回调函数的名称(需要以字符串形式传入)。
  • period (string): 重复调用的时间间隔。格式为 数字 + 时间单位
    • "5nSecond":表示每 5 秒运行一次回调函数。
    • "500nMilliSecond":表示每 500 毫秒运行一次回调函数。
    • "5nDay":表示每 5 天运行一次回调函数。
  • startTime (string): 定时器第一次启动的时间,标准格式为 "YYYY-MM-DD HH:MM:SS"。如果希望定时器在策略启动时立刻运行,可以设置一个历史时间(如 "2019-10-14 13:20:00")。
  • market (string): 市场简称代码(如 "SH""SZ")。

回调函数定义

回调函数必须接受一个参数 ContextInfo,用于在函数内部访问策略运行环境对象。

def myHandlebar(ContextInfo):
    # 你的定时任务逻辑
    pass

2. 每 5 秒运行一次回调函数的完整源码

以下是一个完整的 QMT Python 策略示例。该策略在初始化时设置了一个定时器,自指定时间起,每 5 秒会自动调用一次 myHandlebar 函数,打印 "hello world"。

#coding:gbk
import time

def init(ContextInfo):
    # 设置定时器:自 2019-10-14 13:20:00 起,每 5 秒 (5nSecond) 运行一次 myHandlebar 回调函数
    ContextInfo.run_time("myHandlebar", "5nSecond", "2019-10-14 13:20:00", "SH")
    print("定时器初始化成功!")

def myHandlebar(ContextInfo):
    # 定时执行的回调函数逻辑
    print("定时器触发:hello world")

def handlebar(ContextInfo):
    # 传统的行情驱动函数,此处保持 pass 即可
    pass

3. 重要注意事项

  1. 回测模式限制ContextInfo.run_time() 定时器接口仅在实盘/模拟运行模式下有效。在历史数据回测模式下,该函数没有实际意义,不会被触发。
  2. 必须保留基础结构:即使你的策略完全依赖定时器驱动,Python 策略中也必须保留 init(ContextInfo)handlebar(ContextInfo) 这两个基本方法,否则策略将无法正常加载运行。
  3. 多线程与停止:如果你的定时任务涉及复杂的线程操作,建议在策略关闭前,利用 stop(ContextInfo) 函数进行线程的清理与释放。