迅投QMT量化交易系统新手指南及常见问题

迅投QMT门槛

迅投QMT量化交易系统是一款基于python语言开发的量化交易平台,它提供了丰富的量化交易功能,包括策略开发、回测、实盘交易等。

迅投QMT量化交易系统的门槛相对较低,只需要具备一定的编程基础,资金门槛很低,就可以开始使用。

其实迅投QMT还是比较适合入门级和中级个人投资者的,如果是那种特别专业的个人投资者或者机构的投资者,不一定会选择迅投QMT,还有其他的量化交易平台,比如大家经常能在龙虎榜上面看到的华鑫某某某,当然华鑫的门槛会更高,对资金和对技术能力都会有更高的门槛。

首先就是开通一个券商,他们要能支持QMT的接入,然后开通QMT的账号,就可以开始使用了。有一些券商基本没什么开户门槛,可以开通QMT,如果有需要,可以私信我,与我联系,可以与我的客户经理联系,其实也就只是帮个忙,不是全职干这个的哈。

python版本

QMT使用的语言是python,版本为3.6。如果完全不懂python的话,要么赶紧学习,要么这个帖子就是一个劝退帖。

QMT自带python库

QMT里面内置了一些常用的python库,包括:

  • numpy, pandas, patsy, scipy, statsmodels, TA_Lib 其中多种指标如 ADX, MACD, RSI, 布林轨道等;K 线形态识别,如黄昏之星,锤形线等等可以使用TA_Lib库。

QMT自带策略

QMT里面自带了一些策略,包括:

  • 均线策略
  • 日内交易策略
  • 国债逆回购策略 等等,当然这些仅供参考,基本上大家都要自己编写自己的策略。

QMT的安装

安装包要从你的券商那里下载,安装很简单,就普通安装一个软件有一样。

QMT的登陆

需要从自己的券商那里获取,有一个用户名和一个密码,然后登陆即可。一般在开通QMT交易权限的时候,券商会告诉你用户名和密码。

QMT的运行环境

需要一台Windows电脑,也可以使用云服务器,电脑的性能取决于你自己的策略,如果策略的数量不多,且策略并不复杂,其实普通的电脑都没有问题。对于新手来说,完全可以使用一台现有的电脑开始使用,如果后面上了复杂的策略,慢慢的再增加性能更好的电脑硬件。我自己的策略比较简单,我把我的电脑的一些硬件,比如USB接口只开启了一个,声卡什么用不到的硬件都关闭了,只保留了必须的硬件,这样可以保证电脑的性能,也可以保证电脑的稳定性,同时电耗也会比较低,目前我的电耗每天不到0.5度。

QMT的运行,很多时候,我们并不是一直盯着的,会需要在电脑上/云服务器上面安装一个远程协助软件,这样可以随时远程连接到QMT,然后进行一些操作。

一些Bug与解决方案

QMT量化交易系统中的 账号成交状态变化主推 deal_callback() , 当账号成交状态有变化时,这个函数被客户端调用。

在使用的过程中发现,deal_callback() 函数在会被调用多次,后来咨询国金证券QMT的工作人员后,才发现,会在至少如下两种情况下调用:

  1. 当账号成交状态有变化时,会调用 deal_callback() 函数。
  2. 当网络出现中断之后,QMT系统与服务器重新连接的时候,会调用 deal_callback() 函数, 并且把当日的所有成交全部都推送一遍。

因此务必不可以相信 deal_callback() 函数的推送数据,因为 deal_callback() 函数的推送数据可能是重复推送的。为了解决这个问题,我们需要自己建立数据库,去记录每一次下单,下单的成交状态。后续所有的下单,都要基于自己的数据库数据,不可相信QMT的推送数据。

如下摘取自迅投QMT的官方文档:

下单与回报相关
为保证以尽快的速度执行交易信号, qmt 客户端提供的交易接口是异步的, 以快速交易参数填2的passorder函数为例,调用后会立刻发出委托, 然后返回。不会等待委托回报, 也不会阻塞 python线程的运行。
委托/成交/持仓/账号信息的更新, 是在客户端后台进行的, python策略中无法手动控制。python提供的取账号信息接口 get_trade_detail_data, 与四种交易回调函数, 都是从客户端本地缓存中读取数据 / 触发调用,不是调用时查询柜台再返回。客户端本地缓存状态定期接收柜台推送刷新,有交易主推的柜台50ms一次,没有交易主推的柜台1-6秒一次。 不能认为get_trade_detail_data查到的状态是与柜台完全一致的, 比如卖出委托后立刻查询, 不会查到对应委托, 可用资金也不会变多。
实盘策略需要设计盘中保存/更新委托状态的机制。常见的做法是用全局变量字典保存委托状态, 给每一笔委托独立的投资备注作为字典的key,委托状态作为字典的value, 下单后默认设置为待报, 之后查到委托后更新状态。如果某品种股票存在待报状态委托, 暂停该品种后续报单, 防止发生超单的情况。(实现可以参考实盘示例7-调整至目标持仓Demo)
QMT 所有策略是在同一个线程中被调用的,任意一个策略阻塞线程(死循环 sleep 加锁等操作)会导致所有策略的执行被阻塞,所以不能在策略里写等待操作。如需要多线程 / 多进程的用法,可以使用极简模式配合 xtquant 库使用

deal_callback()没有被调用 deal_callback() 函数没有被调用,或者定义了deal_callback() 函数,收不到推送数据,可能是因为没有在初始化的时候,设置set_account()函数。要先在init里调用ContextInfo.set_account后生效 另外,推送仅在实盘运行模式下生效。

def init(ContextInfo):
    # 设置对应的资金账号
    # 示例需要在策略交易界面运行
    ContextInfo.set_account(account)

关于线程和进程

QMT中,python无法使用多线程和多进程,而且所有策略都在同一线程中执行,所以策略中应该尽量避免阻塞类的写法,否则会影响其他策略的执行。

其他文章

其他相关文章,可以关注CSDN专栏(看本博客的最顶端),点进去专栏,可以看到所有与QMT量化交易相关的文章。感谢关注。

本文更新于2025年2月11日,关注本博客,csdn专栏(看本博客文章最顶端)或者WTSolutions的知乎,获取最新的更新提醒。

相关推荐
三皮仔32 分钟前
安装WPS后,导致python调用Excel.Application异常,解决办法
python·excel·wps
java_python源码1 小时前
[含文档+PPT+源码等]精品基于Python实现的django个性化健康餐计划订制系统
开发语言·前端·python
金融OG1 小时前
100.14 AI量化面试题:模型蒸馏(Model Distillation)和模型微调(Fine-tuning)的异同点
人工智能·python·机器学习·数学建模·金融
蹦蹦跳跳真可爱5892 小时前
Python----PyQt开发(PyQt高级:组件大小,界面位置,按钮,文本显示,文本输入,字体大小)
python·pyqt
游客5202 小时前
自动化办公|xlwings快速入门
linux·前端·python
hshpy3 小时前
To convert a JSONArray to a List<Map<String, String>> in Java
java·python·list
Joyner20183 小时前
python-leetcode-搜索二维矩阵
python·leetcode·矩阵
吃熊的鱼3 小时前
【大模型技术】accelerate和deepspeed
python·大模型
赵鑫亿3 小时前
python基础入门:8.1项目1:爬虫与数据分析
爬虫·python·数据分析