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

QMT 算法任务控制:如何通过 pause_task 与 resume_task 动态暂停与恢复交易任务

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

问题描述

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

Title: QMT 算法任务控制:`pause_task` 与 `resume_task` API 实战

Question: 如何在盘中通过代码暂停和重新启动正在运行的智能算法交易任务?

解决方案

QMT 算法任务控制:pause_taskresume_task API 实战

在盘中执行智能算法交易(如 TWAP、VWAP、冰山委托等)时,如果遇到市场剧烈波动、流动性枯竭或触发风控条件,经常需要对正在运行的算法任务进行动态暂停,并在市场恢复平稳后重新启动

QMT Python API 提供了 pause_taskresume_task 函数,配合 get_trade_detail_data 函数即可实现对算法任务的精细化控制。


1. 核心 API 接口说明

1.1 获取任务明细 get_trade_detail_data

在控制任务前,需要先获取当前账号下的运行任务及其任务编号(m_nTaskId)。

get_trade_detail_data(accountID, strAccountType, 'TASK')

1.2 暂停任务 pause_task

暂停指定的智能算法任务。

pause_task(taskId, accountId, accountType, ContextInfo)
  • taskId (string): 任务编号。若传入空字符串 '',则表示暂停该资金账号下所有可暂停的任务。
  • 返回值: True 表示成功发出暂停信号,False 表示失败。

1.3 继续任务 resume_task

重启之前已暂停的智能算法任务。

resume_task(taskId, accountId, accountType, ContextInfo)
  • taskId (string): 任务编号。若传入空字符串 '',则表示启动该资金账号下所有已暂停的任务。
  • 返回值: True 表示成功发出重启信号,False 表示失败。

2. 盘中控制流程与实现代码

以下示例展示了如何在策略逻辑中获取任务列表,并根据条件分别执行暂停恢复操作:

#coding:gbk

def init(ContextInfo):
    # 设置交易账号
    ContextInfo.accid = '6000000248'
    ContextInfo.account_type = 'stock' # 股票账号类型;期货用 'future'
    ContextInfo.set_account(ContextInfo.accid)

def handlebar(ContextInfo):
    # 仅在最新 K 线或实时 tick 处理
    if not ContextInfo.is_last_bar():
        return

    account_id = ContextInfo.accid
    account_type = ContextInfo.account_type

    # 1. 获取当前账号下的所有任务信息
    task_list = get_trade_detail_data(account_id, account_type, 'TASK')
    
    for task in task_list:
        task_id = task.m_nTaskId
        status = task.m_eStatus # 任务状态
        print(f"任务ID: {task_id}, 当前状态: {status}")

        # 示例逻辑 1:当满足特定条件(如风控触发)时,暂停执行中的任务
        if should_pause_risk_condition():
            res = pause_task(task_id, account_id, account_type, ContextInfo)
            if res:
                print(f"成功发送暂停任务指令,任务ID: {task_id}")

        # 示例逻辑 2:当市场恢复正常,重新启动暂停的任务
        elif should_resume_condition():
            res = resume_task(task_id, account_id, account_type, ContextInfo)
            if res:
                print(f"成功发送重启任务指令,任务ID: {task_id}")

def should_pause_risk_condition():
    # 用户自定义的风控暂停判定逻辑
    return False

def should_resume_condition():
    # 用户自定义的恢复运行判定逻辑
    return False

3. 批量控制快捷技巧

如果需要一次性控制该资金账号下的所有算法任务,可以将 taskId 设置为空字符串 ''

  • 一键暂停所有任务pause_task('', account_id, account_type, ContextInfo)
  • 一键启动所有任务resume_task('', account_id, account_type, ContextInfo)

4. 注意事项

  1. 适用模式pause_taskresume_task 函数主要在实盘运行模式下针对智能算法交易生效,回测模式下无实际意义。
  2. 账号绑定:使用前请确保在 init 中调用了 ContextInfo.set_account(account) 绑定了对应的资金账号。