ContextInfo — QMT 策略上下文对象属性参考
ContextInfo 是 QMT 内置 Python 策略运行的核心上下文对象,贯穿策略的整个生命周期。所有回调和定时任务函数都接收 ContextInfo 作为参数,通过该对象可获取当前运行状态、回测配置、品种信息、账户信息、K 线数据等。本页面列出 ContextInfo 对象的全部常用属性。
QMT ContextInfo 运行状态属性
【事实】 以下属性反映策略当前的运行状态:
| 属性 | 类型 | 含义 | 示例 |
|---|---|---|---|
ContextInfo.do_back_test |
bool | 是否处于回测模式 | True / False |
ContextInfo.is_last_bar |
bool | 当前 Bar 是否为最后一根 Bar(最新 Bar) | True / False |
ContextInfo.barpos |
int | 当前 Bar 的位置索引(从 0 开始) | 100 |
ContextInfo.bar_size |
int | 当前 K 线序列的总 Bar 数量 | 5000 |
ContextInfo.run_time |
str | 策略的定时运行时间设置 | '10:00:00' |
ContextInfo.time_tick_size |
int | Tick 的时间间隔(毫秒) | 3000 |
【解释】
do_back_test为True时表示策略运行在回测环境,为False时表示运行在实盘环境(仿真或真实交易)。is_last_bar用于在handlebar中区分回测遍历和盘中实时更新。回测中每根 Bar 都会触发handlebar,但仅在最后一根 Bar 时is_last_bar为True;盘中运行时每根新 Bar 完成时is_last_bar为True。barpos是当前正在处理的 Bar 在整个 K 线序列中的位置索引,可用于获取特定位置的 Bar 数据。
【建议】 在 handlebar 中使用 ContextInfo.is_last_bar() 方法判断是否为最新 Bar,避免在回测遍历时重复执行交易逻辑。
QMT ContextInfo 回测配置属性
【事实】 以下属性仅在回测环境中有效:
| 属性 | 类型 | 含义 | 示例 |
|---|---|---|---|
ContextInfo.start_time |
str | 回测开始时间 | '20240101' |
ContextInfo.end_time |
str | 回测结束时间 | '20240630' |
ContextInfo.start_cash |
float | 回测初始资金 | 1000000.0 |
ContextInfo.commission |
float | 回测佣金费率 | 0.0003 |
ContextInfo.slippage |
float | 回测滑点设置 | 0.001 |
ContextInfo.dealvolume |
float | 回测成交量限制比例 | 0.1 |
ContextInfo.backtest_size |
int | 回测的 K 线数量 | 10000 |
【解释】
start_cash是回测开始时的初始资金,单位为元。commission是每次交易的手续费费率,如0.0003表示万分之三。slippage是回测中模拟的滑点,影响成交价格与委托价格的偏差。dealvolume限制每根 Bar 的最大成交量为当日成交量的比例,如0.1表示最多成交当日成交量的 10%。
【建议】 回测配置属性在实盘环境中可能返回默认值或无效值,策略逻辑不应依赖这些属性在实盘中的取值。
QMT ContextInfo 品种与周期属性
【事实】 以下属性反映当前策略绑定的品种和周期信息:
| 属性 | 类型 | 含义 | 示例 |
|---|---|---|---|
ContextInfo.stockcode |
str | 当前品种代码 | '600000.SH' |
ContextInfo.stock_code |
str | 当前品种代码(别名) | '600000.SH' |
ContextInfo.period |
str | 当前 K 线周期 | '1d' |
ContextInfo.dividend_type |
str | 复权方式 | 'front' |
ContextInfo.timetag |
int | 当前 K 线的时间戳 | 20240104000000 |
ContextInfo.universe |
list | 策略标的池 | ['600000.SH', '000001.SZ'] |
ContextInfo.trade_universe |
list | 交易标的池 | ['600000.SH'] |
【解释】
stockcode和stock_code是同一属性的不同名称,均返回当前品种代码。period的取值包括'1d'(日线)、'1m'(1 分钟)、'5m'(5 分钟)、'15m'(15 分钟)、'30m'(30 分钟)、'60m'(60 分钟)等。dividend_type的取值包括'none'(不复权)、'front'(前复权)、'back'(后复权)。universe是策略的标的池,包含所有需要监控的证券。trade_universe是交易标的池,是universe的子集。
QMT ContextInfo 账户信息属性
【事实】 以下属性反映策略绑定的交易账户信息:
| 属性 | 类型 | 含义 | 示例 |
|---|---|---|---|
ContextInfo.accountid |
str | 当前资金账号 ID | '12345678' |
ContextInfo.accountType |
str | 账户类型 | 'STOCK' |
【解释】
accountid是策略绑定的资金账号,用于交易和查询。可通过在init中赋值来设置。accountType的取值包括'STOCK'(普通股票)、'CREDIT'(信用)、'FUTURE'(期货)。
【建议】 在 init 中设置 ContextInfo.accountid,确保策略使用正确的交易账户。
QMT ContextInfo Tick 数据属性
【事实】 以下属性在 Tick 级别运行时有效:
| 属性 | 类型 | 含义 | 示例 |
|---|---|---|---|
ContextInfo.tick_last_body |
dict | 上一个 Tick 的数据 | {'last_price': 10.5, ...} |
ContextInfo.tick_last_volume |
int | 上一个 Tick 的成交量 | 100 |
【解释】 这些属性仅在 Tick 周期运行时有效,用于获取上一个 Tick 的快照数据。
QMT ContextInfo 自定义属性
【事实】 ContextInfo 对象支持动态添加自定义属性,用于在策略中存储全局状态:
def init(ContextInfo):
# 添加自定义属性
ContextInfo.my_counter = 0
ContextInfo.my_position = {}
ContextInfo.my_flag = True
def handlebar(ContextInfo):
# 读取和修改自定义属性
ContextInfo.my_counter += 1
print(f'已处理 {ContextInfo.my_counter} 根 Bar')
【解释】 自定义属性在整个策略生命周期内持久存在,可在不同回调函数之间共享状态。
【建议】 使用自定义属性时建议在 init 中初始化,避免在 handlebar 中因属性未定义而报错。
QMT ContextInfo 常用方法一览
【事实】 ContextInfo 对象的常用方法(非属性):
| 方法 | 说明 | 详细链接 |
|---|---|---|
get_market_data_ex(...) |
获取历史 K 线数据 | get_market_data_ex |
subscribe_quote(...) |
订阅实时行情 | subscribe_quote |
unsubscribe_quote(...) |
取消行情订阅 | unsubscribe_quote |
get_full_tick(...) |
获取全推 Tick 数据 | get_full_tick |
get_history_data(...) |
获取历史数据序列 | 行情与数据获取 |
get_market_data(...) |
获取市场数据 | 行情与数据获取 |
get_last_price(...) |
获取最新价 | 行情与数据获取 |
get_bid_price(...) |
获取买盘价格 | 行情与数据获取 |
get_ask_price(...) |
获取卖盘价格 | 行情与数据获取 |
order_volume(...) |
按数量下单 | 交易函数 |
order_value(...) |
按金额下单 | 交易函数 |
order_target(...) |
调仓到目标数量 | 交易函数 |
cancel(...) |
撤单 | 交易函数 |
get_account() |
获取账户信息 | 数据结构 |
get_positions() |
获取所有持仓 | 数据结构 |
get_position(stock) |
获取指定品种持仓 | 数据结构 |
get_orders() |
获取当日委托 | 交易函数 |
is_last_bar() |
判断是否为最新 Bar | 本页 |
set_universe(stocks) |
设置标的池 | 行情与数据获取 |
get_universe() |
获取标的池 | 行情与数据获取 |
do_download_history_data(...) |
下载历史数据 | 行情与数据获取 |
run_time(...) |
设置定时任务 | run_time |
QMT ContextInfo 示例代码
获取运行状态信息
# -*- coding: utf-8 -*-
def handlebar(ContextInfo):
if not ContextInfo.is_last_bar():
return
# 打印运行状态
print(f'是否回测: {ContextInfo.do_back_test}')
print(f'当前 Bar 位置: {ContextInfo.barpos}')
print(f'K 线总数: {ContextInfo.bar_size}')
print(f'当前品种: {ContextInfo.stockcode}')
print(f'当前周期: {ContextInfo.period}')
print(f'复权方式: {ContextInfo.dividend_type}')
print(f'当前账号: {ContextInfo.accountid}')
if ContextInfo.do_back_test:
print(f'回测开始: {ContextInfo.start_time}')
print(f'回测结束: {ContextInfo.end_time}')
print(f'初始资金: {ContextInfo.start_cash}')
使用自定义属性管理策略状态
def init(ContextInfo):
"""初始化策略状态"""
ContextInfo.accountid = 'YOUR_ACCOUNT_ID'
ContextInfo.buy_count = 0 # 买入次数
ContextInfo.sell_count = 0 # 卖出次数
ContextInfo.last_buy_price = 0 # 上次买入价
ContextInfo.max_position = 1000 # 最大持仓
def handlebar(ContextInfo):
if not ContextInfo.is_last_bar():
return
close = ContextInfo.get_close_price()
# 使用自定义属性控制交易逻辑
if ContextInfo.last_buy_price > 0:
profit_ratio = (close - ContextInfo.last_buy_price) / ContextInfo.last_buy_price
if profit_ratio > 0.05:
print(f'盈利 {profit_ratio:.2%},考虑卖出')
elif profit_ratio < -0.03:
print(f'亏损 {profit_ratio:.2%},考虑止损')
QMT ContextInfo 注意事项
【事实】 使用 ContextInfo 属性时需注意:
| 注意项 | 说明 |
|---|---|
| 属性版本差异 | 部分属性在不同客户端版本中命名或可用性可能不同 |
| 回测独有属性 | start_time、end_time、start_cash 等仅在回测环境中有效 |
| Tick 独有属性 | tick_last_body 等仅在 Tick 周期运行时有效 |
| 属性只读性 | 大部分属性为只读,强行修改可能导致不可预期的行为 |
| 自定义属性 | 自定义属性在策略重启后丢失,需在 init 中重新初始化 |
【建议】
- 访问不确定是否存在的属性前,使用
hasattr(ContextInfo, 'attr_name')检查 - 回测配置属性在实盘中不可依赖,应使用
do_back_test判断运行环境后分支处理 - 自定义属性命名建议加前缀(如
my_),避免与内置属性冲突
QMT ContextInfo 来源与更新时间
【事实】 本页面内容基于 QMT 官方文档整理。
| 项目 | 值 |
|---|---|
| 数据来源 | QMT 官方文档 |
| 更新时间 | 2026-08-04 |
| 验证时间 | 2026-08-04 |
| 适用版本 | 以当前客户端版本为准 |