3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
pause_task 与 resume_task API 实战在盘中执行智能算法交易(如 TWAP、VWAP、冰山委托等)时,如果遇到市场剧烈波动、流动性枯竭或触发风控条件,经常需要对正在运行的算法任务进行动态暂停,并在市场恢复平稳后重新启动。
QMT Python API 提供了 pause_task 和 resume_task 函数,配合 get_trade_detail_data 函数即可实现对算法任务的精细化控制。
get_trade_detail_data在控制任务前,需要先获取当前账号下的运行任务及其任务编号(m_nTaskId)。
get_trade_detail_data(accountID, strAccountType, 'TASK')
pause_task暂停指定的智能算法任务。
pause_task(taskId, accountId, accountType, ContextInfo)
'',则表示暂停该资金账号下所有可暂停的任务。True 表示成功发出暂停信号,False 表示失败。resume_task重启之前已暂停的智能算法任务。
resume_task(taskId, accountId, accountType, ContextInfo)
'',则表示启动该资金账号下所有已暂停的任务。True 表示成功发出重启信号,False 表示失败。以下示例展示了如何在策略逻辑中获取任务列表,并根据条件分别执行暂停与恢复操作:
#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
如果需要一次性控制该资金账号下的所有算法任务,可以将 taskId 设置为空字符串 '':
pause_task('', account_id, account_type, ContextInfo)resume_task('', account_id, account_type, ContextInfo)pause_task 与 resume_task 函数主要在实盘运行模式下针对智能算法交易生效,回测模式下无实际意义。init 中调用了 ContextInfo.set_account(account) 绑定了对应的资金账号。