QMT Python API

回调函数

回调函数概述

QMT 提供多种回调函数,用于监听委托、成交、持仓、资金等事件。回调函数在实盘运行模式下生效,需要先在 init 里调用 ContextInfo.set_account 后才会生效。每个回调的第一个参数是 ContextInfo 实例(习惯命名为 C)。

回调函数触发时机用途
order_callback(C, data)委托状态变化时获取委托信息
deal_callback(C, data)成交回报时获取成交信息
position_callback(C, data)持仓变化时获取持仓信息
account_callback(C, data)资金账号变化时获取资金信息
orderError_callback(C, data, msg)委托失败时获取失败原因

提示

  1. 回调函数仅在实盘运行模式下生效。
  2. 需要先在 init 里调用 ContextInfo.set_account 后生效。
  3. 回调函数是用户在策略脚本中定义的,引擎会在相应时机自动调用。

交易主推回调函数

委托状态变化主推 - order_callback

原型

qmt://docs/python
Python
1def order_callback(C, data):
2 # data 为委托对象
3 pass

释义

当账号委托状态有变化时,这个函数被客户端调用。用于获取委托回报信息。

参数

字段名数据类型解释
CobjectContextInfo 特定对象,策略模型全局对象
dataobject委托对象,包含委托的详细信息

返回值

示例

qmt://docs/python
Python
1#coding:gbk
2def print_attr(obj):
3 """提取对象所有 m_ 开头的属性"""
4 attr_dict = {}
5 for attr in dir(obj):
6 try:
7 if attr[:2] == 'm_':
8 attr_dict[attr] = getattr(obj, attr)
9 except:
10 pass
11 return attr_dict
12 
13def init(C):
14 C.accound_id = account
15 
16def order_callback(C, data):
17 print('委托', print_attr(data))

成交状态变化主推 - deal_callback

原型

qmt://docs/python
Python
1def deal_callback(C, data):
2 # data 为成交对象
3 pass

释义

当账号成交状态有变化时,这个函数被客户端调用。用于获取成交回报信息。

参数

字段名数据类型解释
CobjectContextInfo 特定对象,策略模型全局对象
dataobject成交对象,包含成交的详细信息

返回值

示例

qmt://docs/python
Python
1#coding:gbk
2def print_attr(obj):
3 """提取对象所有 m_ 开头的属性"""
4 attr_dict = {}
5 for attr in dir(obj):
6 try:
7 if attr[:2] == 'm_':
8 attr_dict[attr] = getattr(obj, attr)
9 except:
10 pass
11 return attr_dict
12 
13def init(C):
14 C.accound_id = account
15 
16def deal_callback(C, data):
17 print('成交', print_attr(data))

持仓状态变化主推 - position_callback

原型

qmt://docs/python
Python
1def position_callback(C, data):
2 # data 为持仓对象
3 pass

释义

当账号持仓状态有变化时,这个函数被客户端调用。用于获取持仓信息。

参数

字段名数据类型解释
CobjectContextInfo 特定对象,策略模型全局对象
dataobject持仓对象,包含持仓的详细信息

返回值

示例

qmt://docs/python
Python
1#coding:gbk
2def print_attr(obj):
3 """提取对象所有 m_ 开头的属性"""
4 attr_dict = {}
5 for attr in dir(obj):
6 try:
7 if attr[:2] == 'm_':
8 attr_dict[attr] = getattr(obj, attr)
9 except:
10 pass
11 return attr_dict
12 
13def init(C):
14 C.accound_id = account
15 
16def position_callback(C, data):
17 print('持仓', print_attr(data))

资金账号状态变化主推 - account_callback

原型

qmt://docs/python
Python
1def account_callback(C, data):
2 # data 为账号对象
3 pass

释义

当资金账号状态有变化时,这个函数被客户端调用。用于获取资金信息。

参数

字段名数据类型解释
CobjectContextInfo 特定对象,策略模型全局对象
dataobject账号对象,包含资金账号的详细信息

返回值

示例

qmt://docs/python
Python
1#coding:gbk
2def print_attr(obj):
3 """提取对象所有 m_ 开头的属性"""
4 attr_dict = {}
5 for attr in dir(obj):
6 try:
7 if attr[:2] == 'm_':
8 attr_dict[attr] = getattr(obj, attr)
9 except:
10 pass
11 return attr_dict
12 
13def init(C):
14 C.accound_id = account
15 
16def account_callback(C, data):
17 print('资金账号', print_attr(data))

账号异常下单主推 - orderError_callback

原型

qmt://docs/python
Python
1def orderError_callback(C, data, msg):
2 # data 为下单参数对象
3 # msg 为错误信息
4 pass

释义

当账号下单异常时,这个函数被客户端调用。用于获取下单失败的原因。

参数

字段名数据类型解释
CobjectContextInfo 特定对象,策略模型全局对象
dataobject下单参数对象,包含下单时的参数信息
msgstring错误信息,描述下单失败的原因

返回值

示例

qmt://docs/python
Python
1#coding:gbk
2def print_attr(obj):
3 """提取对象所有 m_ 开头的属性"""
4 attr_dict = {}
5 for attr in dir(obj):
6 try:
7 if attr[:2] == 'm_':
8 attr_dict[attr] = getattr(obj, attr)
9 except:
10 pass
11 return attr_dict
12 
13def init(C):
14 C.accound_id = account
15 
16def orderError_callback(C, data, msg):
17 print('失败', print_attr(data))
18 print('失败', msg)

工具函数

通用属性提取工具 - print_attr

原型

qmt://docs/python
Python
1def print_attr(obj):
2 """提取对象所有 m_ 开头的属性"""
3 attr_dict = {}
4 for attr in dir(obj):
5 try:
6 if attr[:2] == 'm_':
7 attr_dict[attr] = getattr(obj, attr)
8 except:
9 pass
10 return attr_dict

释义

提取对象所有 m_ 开头的属性,返回为字典。用于在回调函数中打印和查看委托、成交、持仓、资金等对象的所有属性字段。

参数

字段名数据类型解释
objobject回调函数中传入的数据对象

返回值

返回一个字典,键为属性名(m_ 开头),值为对应属性值。

示例

qmt://docs/python
Python
1def order_callback(C, data):
2 print('委托', print_attr(data))
3 
4def deal_callback(C, data):
5 print('成交', print_attr(data))

回调注册完整示例

以下示例展示了如何在一个策略脚本中注册全部回调函数:

qmt://docs/python
Python
1#coding:gbk
2 
3def print_attr(obj):
4 """提取对象所有 m_ 开头的属性"""
5 attr_dict = {}
6 for attr in dir(obj):
7 try:
8 if attr[:2] == 'm_':
9 attr_dict[attr] = getattr(obj, attr)
10 except:
11 pass
12 return attr_dict
13 
14def init(C):
15 C.accound_id = account
16 
17# ===== 回调函数 =====
18def order_callback(C, data):
19 print('委托', print_attr(data))
20 
21def deal_callback(C, data):
22 print('成交', print_attr(data))
23 
24def position_callback(C, data):
25 print('持仓', print_attr(data))
26 
27def account_callback(C, data):
28 print('资金账号', print_attr(data))
29 
30def orderError_callback(C, data, msg):
31 print('失败', print_attr(data))
32 print('失败', msg)

K线运行模式

逐 tick 运行 - handlebar

原型

qmt://docs/python
Python
1def handlebar(C):
2 # 逐 K线 tick 运行
3 pass

释义

与选择的K线无关,逐 K线 tick 运行,有行情变化就触发交易。适合需要实时响应的场景。

参数

字段名数据类型解释
CobjectContextInfo 特定对象,策略模型全局对象

返回值

示例

qmt://docs/python
Python
1def handlebar(C):
2 passorder(23, 1101, account, '300001.SZ', 42, -1, 100, '1', 2, '1', C)

K线收盘运行 - on_bar

原型

qmt://docs/python
Python
1def on_bar(C):
2 # 当前K线结束后运行一次
3 pass

释义

当前K线结束后运行一次。例如周期为1分钟,则每分钟结束运行一次。适合按K线周期决策的场景。

参数

字段名数据类型解释
CobjectContextInfo 特定对象,策略模型全局对象

返回值

示例

qmt://docs/python
Python
1def on_bar(C):
2 passorder(23, 1101, account, '600000.SH', 42, -1, 100, '1', 2, '1', C)

常用 K 线判断工具函数

K线判断方法一览

方法返回类型说明
C.get_bar_timetag(C.barpos)int获取当前K线时间戳(毫秒),用于判断当前K线对应的日期
C.is_last_bar()bool判断是否为最后一根K线,最后一根K线才下单
C.is_new_bar()bool判断是否为新K线的第一个tick,新K线开始时初始化

示例

qmt://docs/python
Python
1def handlebar(C):
2 # 获取当前K线时间
3 current_time = C.get_bar_timetag(C.barpos)
4 from datetime import datetime
5 dt = datetime.fromtimestamp(current_time / 1000)
6 bar_date = dt.strftime('%Y%m%d')
7 
8 # 最后一根K线才下单
9 if C.is_last_bar():
10 pass
11 
12 # 新K线的第一个tick
13 if C.is_new_bar():
14 pass

策略生命周期回调总览

用户在策略脚本中定义以下函数,引擎按顺序调用。inithandlebar 是必须的,其余为可选。

回调调用时机必需
init(C)策略启动时,仅调用一次
after_init(C)init 完成之后调用一次
handlebar(C)每根K线触发一次(回测逐 bar 驱动 / 实盘行情驱动)
on_backtest_finished(C)回测全部 bar 跑完后调用
stop(C)策略停止前调用(实盘退出时)
account_callback(C, account_info)账户状态变动(实盘推送)
order_callback(C, order_info)订单状态回报
deal_callback(C, deal_info)成交回报
position_callback(C, position_info)持仓变动
orderError_callback(C, passorder_info, msg)下单失败

提示

回调缓存查询可通过以下方法获取缓存的回报数据:

  • C.get_account_callback_cache(data):获取账户缓存
  • C.get_order_callback_cache(data):获取订单缓存
  • C.get_deal_callback_cache(data):获取成交缓存
  • C.get_position_callback_cache(data):获取持仓缓存

提示

更多交易明细查询函数(持仓/委托/成交/资金)请参阅 交易函数,数据结构(委托对象/成交对象/持仓对象/账号对象)请参阅 数据结构

智能助手

咨询式 AI · 带入当前文档

智能助手加载中...