3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在量化交易中,尤其是高频交易或盘中极速监控场景下,毫秒级的定时任务至关重要。QMT 平台完全支持毫秒级别的定时任务。通过内置的 ContextInfo.run_time() 接口,开发者可以轻松创建高频定时器。
ContextInfo.run_time() 用于在策略运行期间设置定时器,驱动指定的回调函数按照设定的时间间隔循环执行。
ContextInfo.run_time(funcName, period, startTime, market)
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')。⚠️ 注意事项:
- 回测限制:
run_time()定时器仅在实盘/模拟运行模式下有效,在历史回测模式下没有意义。- 回调函数参数:被调用的回调函数必须且只能接收一个参数:
ContextInfo。
以下是一个完整的 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
my_high_frequency_monitor)内部切勿编写耗时较长的阻塞代码(如复杂的网络请求、大规模数据计算或同步 I/O 读写),否则会导致定时器队列积压,影响交易时效。