迅投QMT社区 门户 查看主题

量化教程--qmt量化常见问题解答1

发布者: 落花忆流年 | 发布时间: 2026-5-12 17:34| 查看数: 24| 评论数: 0|帖子模式

今天继续按计划更新教程内容,今天更新量化常见的量化问题的解答,更新计划,上一篇更新的算法算法研究--单边网格卖出原理

1 策略算法原理
2qmt使用教程
3策略算法原理
4量化研报
5 ptrad使用教程
6 因子分析
7策略算法原理




我整理了qmt常见的问题1000条内容,后面持续更新,利用ai深度训练; 文档,同时参考了我写的很多量化教程,实盘系统训练的内容

3683bad00a2d7a198c92e131ec283359.png

c3776de06c747474ee64a2fc191a6e0c.png

8df7e0611327a0c5c3e7fcde905f7d72.png

1QMT量化交易框架的核心运行机制是什么

30b7d182c23cd6d25a704a3704397847.png

QMT系统模型是根据行情驱动,逐K线运行的。点击运行模型时,模型从第0根K线开始运行到最后一根K线,每根K线调用一次Python模型中的handlebar(ContextInfo)函数。在实时行情中,handlebar会随着主图标的tick更新被调用,但只有k线结束时最后一个分笔触发的handlebar调用,对ContextInfo的修改才有效,这是为了模拟k线效果。

2QMT策略代码的基本结构是怎样的?

69eaa21f5778137a2fa1cf42c7df17d9.png

QMT Python API策略代码结构分两个部分:初始化函数init(ContextInfo)和行情事件函数handlebar(ContextInfo)。init在整个策略中只执行一次,一般用于设置交易佣金、滑点、基准、初始化股票池、资金账号、全局变量等。handlebar在每根K线(或每个有效tick)被调用,是策略逻辑和交易信号生成的核心。

3如何解决安装第三方Python库时出现的`ImportError: Forbidden: Module openpyxl not in whitelist!`报错?

459c6686ca7ed023927a03f1cdddf22f.png

该报错是由于券商后台开启了Python库白名单。如果您使用的是券商提供的QMT终端,需要联系所属券商开通对应Python库的白名单权限。您也可以选择在本地安装独立的Python 3.6环境,并使用pip install命令将库安装到QMT客户端的bin.x64\Lib\site-packages目录下。

4QMT支持哪些默认集成的第三方Python库?

658a1fb91951d3dc98f7df25264f92d9.png

QMT自带的Python环境集成了以下常用库:NumPy、Pandas、Patsy、SciPy、Statsmodels、TA_Lib(技术分析库)。这些库可以直接在策略代码中import使用,无需额外安装。

5QMT中不同板块(主板、创业板、科创板)的委托数量规则是什么?

f70efad36868a791466ee0c339456917.png

  1. **科创板**:连续交易时段限价单笔最大10万股,市价单笔最大5万股,盘后定价交易单笔最大100万股。200股起,1股递增。
  2. **创业板**:连续交易时段限价单笔最大30万股,市价单笔最大15万股。100股起,100股递增。
  3. **主板**(6和0开头):连续交易时段单笔最大100万股。100股起,100股递增。

6在策略回测时,推荐使用哪种复权方式?为什么?

41a27272cfd65f7a589d07913a4e2079.png

推荐在回测中使用**等比前复权价**。实际中配股、增发等动作会造成价格异常波动,使用等比前复权可以避免这种波动对回测的影响。它始终以统一标准的价格进行买卖,方便的同时也能得到更贴合历史数据的回测收益和表现。

7`ContextInfo`对象的逐K线保存机制具体是怎样的?

66f892cbb4b645bf4babb04d2062b79e.png

ContextInfo由底层维护并传递给系统函数。同一根K线(bar)内,ContextInfo本质上是同一个变量,对其修改只对本次handlebar调用的下文起作用。handlebar里对ContextInfo的修改在该bar结束后才会保存,在下一个bar体现出来。每次handlebar调用前会对ContextInfo进行深拷贝,如果新的分笔不是新K线的第一个分笔,则判断上一个分笔不是K线最后分笔,ContextInfo对象会被回退为之前深拷贝的那个。此机制目的是模拟K线效果,只在K线结束的分笔生效一次。

8`passorder`函数中的`quickTrade`参数(快速交易参数)有哪几种取值?分别代表什么含义?

ee575b3b9336bd48760f2044f49e2e95.png

quickTrade参数默认为0。

  • **传0**:只在K线结束分笔时调用passorder产生有效信号,其他情况调用不产生信号。适用于希望K线结束下单(信号不闪烁)的场景。
  • **传1**:在当前K线为最新K线时(ContextInfo.is_last_bar()为True)调用passorder产生有效信号,历史K线调用不产生信号。适用于希望盘中出现信号立即下单,但接受信号闪烁风险的场景。
  • **传2**:任何情况下调用passorder都产生有效信号,不会丢弃任何一次调用的信号。**注意**:在定时器回调、行情回调函数、after_init函数中调用下单函数时,必须传2,确保不会漏单。

9为什么调用`passorder`后立刻查询`get_trade_detail_data`,查不到对应委托,可用资金也没变化?

b4c202089d32fcf187bb193c89c04f42.png

QMT的交易接口是异步的。以quickTrade=2的passorder为例,调用后会立刻发出委托然后返回,不会等待委托回报,也不会阻塞Python线程。委托、成交、持仓、账号信息的更新是在客户端后台进行的,Python策略无法手动控制。get_trade_detail_data和四种交易回调函数都是从客户端本地缓存中读取数据/触发调用,不是实时查询柜台。客户端本地缓存状态定期接收柜台推送刷新(有交易主推的柜台约50ms一次)。因此不能认为查询到的状态与柜**全实时一致。

10实盘策略中如何设计可靠的委托状态管理机制,防止超单

550bfd26c29743f479a9a9a70007ea09.png

常见的做法是:

  1. 使用**全局变量字典**保存委托状态。
  2. 给每一笔委托一个独立的userOrderId(投资备注)作为字典的key,委托状态(如'待报'、'已报'、'部分成交'、'全部成交'、'已撤'等)作为字典的value。
  3. 下单后,默认将该笔委托的状态设置为'待报'。
  4. 之后通过交易回调函数或定期查询get_trade_detail_data来获取委托回报,并更新字典中对应委托的状态。
  5. 如果某品种股票存在'待报'或'已报'状态的委托,则暂停该品种的后续报单,防止发生超单。可参考实盘示例7(调整至目标持仓Demo)的实现。

更多的内容按计划更新,不懂的问我就可以,加我备注入群可以加入量化研究群

c6fad70dcca600d914fcee01094e3e9e.jpg

量化福利,需要的找我就可以

504ad5e69802ac4e9d86eb8454807c7e.png

最新评论

客服专线

400-080-8112

用思考的速度交易,用真诚的态度合作,我们是认真的!
  • 关注公众号
  • 添加微信客服
Copyright © 2001-2026 迅投QMT社区 版权所有 All Rights Reserved. 京ICP备2025122616号-3
关灯 快速发帖
扫一扫添加微信客服
QQ客服返回顶部
快速回复 返回顶部 返回列表