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_testTrue 时表示策略运行在回测环境,为 False 时表示运行在实盘环境(仿真或真实交易)。
  • is_last_bar 用于在 handlebar 中区分回测遍历和盘中实时更新。回测中每根 Bar 都会触发 handlebar,但仅在最后一根 Bar 时 is_last_barTrue;盘中运行时每根新 Bar 完成时 is_last_barTrue
  • 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']

【解释】

  • stockcodestock_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_timeend_timestart_cash 等仅在回测环境中有效
Tick 独有属性 tick_last_body 等仅在 Tick 周期运行时有效
属性只读性 大部分属性为只读,强行修改可能导致不可预期的行为
自定义属性 自定义属性在策略重启后丢失,需在 init 中重新初始化

【建议】

  1. 访问不确定是否存在的属性前,使用 hasattr(ContextInfo, 'attr_name') 检查
  2. 回测配置属性在实盘中不可依赖,应使用 do_back_test 判断运行环境后分支处理
  3. 自定义属性命名建议加前缀(如 my_),避免与内置属性冲突

QMT ContextInfo 来源与更新时间

【事实】 本页面内容基于 QMT 官方文档整理。

项目
数据来源 QMT 官方文档
更新时间 2026-08-04
验证时间 2026-08-04
适用版本 以当前客户端版本为准