🚀 AI 一键生成 qmt 策略代码

如何在 QMT 策略中实现定时执行特定任务?

qmt | 发布时间: 2025/11/24
以下内容由 EasyQuant 生成。

问题描述

我希望我的代码能在每天下午2点50分自动执行一次,该如何实现?

解决方案

在 QMT 平台中,实现每天特定时间(如 14:50)自动执行代码,最标准且推荐的方法是使用 ContextInfo.run_time 函数。

该函数可以设置一个定时器,按照设定的周期(此处为每天)和起始时间触发指定的回调函数。

以下是具体的实现代码和说明:

实现代码

# -*- coding: gbk -*-

def init(ContextInfo):
    # 设置定时任务
    # 参数1: "on_time_job" -> 要执行的回调函数名称
    # 参数2: "1nDay" -> 运行周期,表示每1天执行一次
    # 参数3: "2023-01-01 14:50:00" -> 起始时间。日期可以是过去的时间,关键是时间部分要设为 14:50:00
    # 参数4: "SH" -> 驱动行情的市场,一般填 "SH" 或 "SZ"
    ContextInfo.run_time("on_time_job", "1nDay", "2023-01-01 14:50:00", "SH")
    
    print("策略初始化完成,已设置每天 14:50 执行任务")

def handlebar(ContextInfo):
    # QMT 策略必须包含 handlebar 函数,即使里面什么都不写
    pass

def on_time_job(ContextInfo):
    """
    这是自定义的函数,会在每天 14:50 被 run_time 自动调用
    """
    print("当前时间 14:50,开始执行定时任务...")
    
    # --- 在此处编写你的核心逻辑 ---
    
    # 示例:获取当前账户资金情况
    # account_id = '你的资金账号'
    # ContextInfo.get_trade_detail_data(account_id, 'stock', 'account')
    
    # 示例:执行下单操作
    # passorder(...)
    
    print("定时任务执行完毕")

代码详解

  1. ContextInfo.run_time: 这是 QMT 提供的核心定时函数。
    • 函数名: 必须传入字符串格式的函数名(如 "on_time_job"),该函数必须在策略中定义,且接收 ContextInfo 作为参数。
    • 周期: "1nDay" 代表每隔 1 天运行一次。
    • 起始时间: 格式为 YYYY-MM-DD HH:MM:SS。QMT 会根据这个时间点和周期计算下一次触发时间。只要时间部分写对(14:50:00),日期写一个过去的时间(如 2023-01-01)即可,系统会自动推算到今天的 14:50。
  2. on_time_job: 这是你自己定义的函数,名字可以随意取(需与 run_time 第一个参数一致)。所有需要在 14:50 执行的交易逻辑、数据处理或日志输出都写在这个函数里。
  3. handlebar: 这是 QMT 的标准回调函数,虽然在这个需求中主要逻辑在定时函数里,但 handlebar 必须存在,否则策略会报错。

注意事项

  • 运行模式: 该代码在实盘/模拟交易模式下有效。
  • 软件状态: 请确保在下午 14:50 时,QMT 客户端处于运行状态且策略已启动。