QMT量化交易框架的核心设计:ContextInfo
发布时间:12小时前阅读:55
任何一套成熟的量化交易框架,不管平台怎么变,不管底层是回测引擎还是实盘交易系统,几乎所有框架都会给策略开发者提供一个类似的对象
在 QMT 里,它叫 ContextInfo。
它不是行情接口,也不是下单函数,但几乎所有策略都要围绕它来写。
更关键的是,它往往出现在策略最核心的两个函数里:
def init(ContextInfo):
pass
def handlebar(ContextInfo):
pass
这说明它不是一个可有可无的参数,而是整个策略运行环境的入口。 那么问题来了:
为什么每个量化平台,几乎都需要这样一个“上下文对象”?

答案其实很直接:
因为量化策略不是单纯写交易逻辑,它还需要知道三件事:
我现在运行在什么环境里?我能调用哪些系统能力?当前策略处于什么状态?
而 ContextInfo 解决的,正是这个问题。
这篇文章我们就从 ContextInfo 入手,讲清楚它到底是什么、里面有哪些核心能力、在策略中应该怎么用,以及新手最容易踩的一个坑:为什么自定义变量挂在 ContextInfo 上,经常会莫名其妙被重置。
一、contextinfo是什么?
在 QMT 中,ContextInfo 可以理解为策略的全局运行上下文对象。它把行情、K线、股票池、账号、回测参数、交易接口、定时器、策略状态等信息统一封装起来,让策略代码不用关心底层系统是怎么运行的,只需要通过 ContextInfo 去获取数据、执行操作、控制流程。
所以,理解 ContextInfo,不是只学会一个 QMT 对象那么简单。
它本质上是在帮你理解量化交易框架的一种核心设计思想:
策略代码和交易系统之间,必须有一个统一的交互入口。
二、能做什么?核心功能分类
ContextInfo 的功能非常多,为了便于理解,我们把它分成二大类来梳理。
第一类:属性(信息)
就是系统当前的状态数据,比如:

第二类:方法(功能)
就是系统提供的各种操作能力,比如:

三、最重要的避坑指南:ContextInfo 的变量回滚机制
这是整篇文章最关键的部分,也是新手最容易踩的坑。
问题现象
很多新手会这样写代码:
预期是stock_list会不断累加,但实际运行后发现,stock_list的值总是被重置,根本无法跨 K 线保持。
原因
ContextInfo 有一个变量回滚机制:ContextInfo 会随着 bar 的切换而重置到上一根 bar 的结束状态。
• 在回测模式下,每次调用 handlebar 处理新的一根 K 线之前,系统会自动将 ContextInfo 的属性恢复到初始状态。这是为了保证历史一致性——确保你在处理当前 K 线时,不会受到非预期的状态污染。
• 在实盘模式下,每个 tick 触发 handlebar 时,ContextInfo 也会被深拷贝。只有当 K 线结束时的最后一个 tick 对 ContextInfo 做的修改才会被保留,其他 tick 的修改会被丢弃。 简单来说:
ContextInfo 不具备跨 K 线稳定存储自定义变量的能力。
正确做法:用全局变量或全局类来存储状态
用全局类实例来保存状态,就能完美避开 ContextInfo 的回滚机制。因为 Python 对象的生命周期贯穿整个策略运行过程,它不会被系统重置。
四、职责分离原则
记住这个原则:
• ContextInfo:用来调用系统、获取行情数据、查询 K 线状态。它是"接口",不是"仓库"。
• 全局变量/全局类:用来保存策略运行过程中的自定义状态,如持仓标记、计数器、信号标志等。它是"仓库"。 把这两者的职责分清楚,你的策略代码就会稳定得多。
五、总结
ContextInfo 是 QMT 策略框架中最核心的对象,它承担了三大职责:
1.载体:
所有系统级操作(获取行情、设定账号、设置定时器等)都通过它完成。
2.上下文环境:
封装了 K 线状态、市场信息、回测参数等策略运行所需的全部环境数据。
3.函数间数据桥梁:
在 init、handlebar、stop 等函数之间传递系统级数据。
但它有一个关键限制:不能用来稳定存储自定义变量,
因为它的属性会在 K 线切换时被回滚。自定义状态应该用全局变量或全局类来管理。
理解 ContextInfo 的本质和使用边界,是写好 QMT 策略的第一步。掌握了它,你才能真正理解 QMT 策略的运行机制,避免那些让人抓狂的"变量莫名消失"问题。
QMT开通流程
1.线上开户,10分钟完成,7x24小时办理业务
2.开户成功后入金达到门槛(低),即可提交QMT/Ptrade申请
3.开通后通过邮箱获取下载地址,登录即可使用
智能交易可能因系统、通讯等原因无法正常使用或无法按照您的设置价格发出委托指令及完成成交,最终成交价格及数量以交易所、登记结算机构等记录为准。请密切关注交易回报情况及条件单设置情况。以上信息仅供参考,不构成对委托指令成交的承诺,不构成投资建议,不构成收益或避免损失的承诺。请您务必仔细阅读相关风险提示及协议,了解各类智能交易功能的区别及不同风险,审慎决策是否使用相关功能。
投资有风险,入市需谨慎!
彩蛋:
1. 新开户享惊喜优惠佣金
2. QMT/PTrade量化软件免费使用
3. 智能条件单,网格交易,预约打新等功能支持;
4. 新客理财领取(限额),赠送Level-2十档行情(佣金宝APP)
5. 支持底仓增强策略,内置多种交易策略,适合长期持仓用户做自动日内回转交易;
6. 88开头,可选数字靓号开户。
更多需求了解,欢迎点击文章上方“问一问”,或文章下方微信+电话,直接联系沟通需求!
温馨提示:投资有风险,选择需谨慎。
下一篇资讯:
暂无下一篇
-
9月解禁潮来了:近2900亿!解禁不等于减持,这几类股要留神
2026-08-31 13:57
-
银行理财信披新规9月1日落地:以后买理财,这3处变化得看清
2026-08-31 13:57
-
开户后想换客户经理,怎么操作?
2026-08-31 13:57


问一问

+微信
分享该文章
