3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在 QMT 平台中,如果需要脱离 K 线(Bar)的行情驱动,按照固定的时间间隔执行特定的逻辑(例如每 5 秒查询一次账户、定时撤单或定时发送心跳包),可以使用 QMT 提供的定时器接口 ContextInfo.run_time()。
本文将详细介绍如何配置 run_time 定时器,实现每 5 秒运行一次特定回调函数的功能。
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
以下是一个完整的 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
ContextInfo.run_time() 定时器接口仅在实盘/模拟运行模式下有效。在历史数据回测模式下,该函数没有实际意义,不会被触发。init(ContextInfo) 和 handlebar(ContextInfo) 这两个基本方法,否则策略将无法正常加载运行。stop(ContextInfo) 函数进行线程的清理与释放。