QMT Python API

系统函数

策略生命周期函数

用户在策略脚本中定义以下函数,引擎会在相应时机调用。每个回调的第一个参数是 ContextInfo 实例(习惯命名为 C)。inithandlebar 是必须定义的,其余为可选。

函数调用时机必需
init(C)策略启动时调用一次
after_init(C)init 之后调用一次
handlebar(C)每根 K 线调用一次(回测逐 bar 驱动 / 实盘行情驱动)
on_backtest_finished(C)回测全部 bar 跑完后调用
stop(C)策略停止前调用(实盘退出时)

初始化函数 - init

提示

init 是必需的回调函数,必须在策略脚本中定义。

原型

qmt://docs/python
Python
1def init(C):

释义

初始化函数,策略启动时调用一次。用于初始订阅行情、订阅账号信息等初始化操作。init 函数执行完成前部分接口无法使用。

参数

字段名数据类型解释
CobjectContextInfo 实例,策略运行环境对象,可以用于存储自定义的全局变量

返回值

示例

qmt://docs/python
Python
1def init(C):
2 C.set_commission(0.0003)

初始化后函数 - after_init

原型

qmt://docs/python
Python
1def after_init(C):

释义

后初始化函数,在 init 执行完成后、handlebar 执行之前调用一次。可以用于放置一次性触发的下单、取数据操作代码。有些 init 里不支持的函数可以在 after_init 里调用。

参数

字段名数据类型解释
CobjectContextInfo 实例,策略运行环境对象,可以用于存储自定义的全局变量

返回值

示例

qmt://docs/python
Python
1def init(C):
2 print('init')
3 
4def after_init(C):
5 print('系统会在 init 执行完后和执行 handlebar 之前调用 after_init')
6 
7def handlebar(C):
8 if C.is_last_bar():
9 print('handlebar')

行情事件函数 - handlebar

提示

handlebar 是必需的回调函数,必须在策略脚本中定义。

原型

qmt://docs/python
Python
1def handlebar(C):

释义

行情事件函数,每根 K 线运行一次。实时行情获取状态下,先每根历史 K 线运行一次,再在每个 tick 数据到来后驱动运行一次。历史 K 线上,按时间顺序每根 K 线触发一次调用;盘中,每个新到达的 tick 数据驱动运行一次。可以作为行情驱动的函数,实现指标计算、回测、实盘下单的效果。

参数

字段名数据类型解释
CobjectContextInfo 实例,策略运行环境对象,可以用于存储自定义的全局变量

返回值

示例

qmt://docs/python
Python
1def handlebar(C):
2 data = C.get_market_data_ex(['close'], [C.stock_code], period='1d', count=20)
3 if C.stock_code not in data:
4 return
5 closes = data[C.stock_code]['close']
6 ma5 = closes.iloc[-5:].mean()
7 ma20 = closes.iloc[-20:].mean()
8 
9 if ma5 > ma20 and C.is_last_bar():
10 order_shares(C.stock_code, 100, C=C)
11 elif ma5 < ma20 and C.is_last_bar():
12 order_shares(C.stock_code, -100, C=C)

回测完成函数 - on_backtest_finished

原型

qmt://docs/python
Python
1def on_backtest_finished(C):

释义

回测全部 bar 跑完后调用。仅在回测模式下触发,实盘模式下不会调用。

参数

字段名数据类型解释
CobjectContextInfo 实例,策略运行环境对象,可以用于存储自定义的全局变量

返回值

示例

qmt://docs/python
Python
1def on_backtest_finished(C):
2 # 回测全部 bar 跑完后调用
3 print('回测完成')

停止处理函数 - stop

原型

qmt://docs/python
Python
1def stop(C):

释义

策略停止前调用(实盘退出时)。复杂策略模型,如中间有起线程可通过在该函数内实现停止线程操作。注意,当前版本 stop 函数被调用时交易连接已断开,不能在 stop 函数中做报单 / 撤单操作。

参数

字段名数据类型解释
CobjectContextInfo 实例,策略运行环境对象,可以用于存储自定义的全局变量

返回值

示例

qmt://docs/python
Python
1def stop(C):
2 print('strategy is stop !')

Bar 状态方法

以下方法通过 ContextInfo 实例(即 C)调用,用于判断当前 K 线状态。

方法返回说明
C.is_last_bar()bool当前是否为最后一根 K 线
C.is_new_bar()bool当前是否为新 K 线的第一个 tick
C.get_bar_timetag(index)int获取指定 K 线的毫秒时间戳

是否为最后一根K线 - ContextInfo.is_last_bar

原型

qmt://docs/python
Python
1C.is_last_bar()

释义

判定当前是否为最后一根 K 线。返回 True 表示是右侧最新 K 线,False 表示不是最新 K 线。

参数

返回值

boolTrue 表示是最后一根 K 线,False 表示不是。

示例

qmt://docs/python
Python
1def handlebar(C):
2 print(C.is_last_bar())

判定是否为新的K线 - ContextInfo.is_new_bar

原型

qmt://docs/python
Python
1C.is_new_bar()

释义

某根 K 线的第一个 tick 数据到来时,判定该 K 线为新的 K 线,其后的 tick 不会认为是新的 K 线。历史 K 线每根都是新 K 线;盘中每根新 K 线第一个分笔返回 True,其他分笔返回 False

参数

返回值

boolTrue 表示是新 K 线的第一个 tick,False 表示不是。

示例

qmt://docs/python
Python
1def handlebar(C):
2 print(C.is_new_bar())

获取指定K线的时间戳 - ContextInfo.get_bar_timetag

原型

qmt://docs/python
Python
1C.get_bar_timetag(index)

释义

获取指定索引处 K 线的毫秒时间戳。indexC.barpos 可取当前 bar 的时间戳。

参数

字段名数据类型解释
indexintK 线索引,传 C.barpos 取当前 bar

返回值

int:指定 K 线的毫秒时间戳。

示例

qmt://docs/python
Python
1def handlebar(C):
2 timetag = C.get_bar_timetag(C.barpos)
3 print(timetag)

交易回调函数

除了上述生命周期函数外,策略脚本还可以定义以下交易回调函数,用于接收实盘交易主推数据。详见回调函数

回调调用时机必需
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)下单失败

智能助手

咨询式 AI · 带入当前文档

智能助手加载中...