一、什么是QMT
此部分为扫盲内容,有一定了解者可以跳过。
概念
它是一款量化交易客户端软件,由一家叫做迅投公司出品,可以直接登录你的券商账号进行股票交易,但与同花顺/通信达不同的是,它暴露了基于python的交易API,可以执行程序化交易。
顺便查了一下迅投这个公司的背景,21年冲击过创业板,后来放弃了。招股说明书链接
界面
以国金版为例,其登录界面如下,不同券商登录界面略有区别(不一定有极简模式)
进入软件以后的界面如下,主要分为行情、交易、模型研究、模型交易几个模块,各个券商的QMT界面大同小异。
二、为什么使用QMT
以前,自动化交易一直是散户的痛,大部分的自动化接口,都只针对机构,散户可以使用的方法很少,虽然有类似easyTrader的开源库解决过类似的问题,但是通过模拟按键的方式,我也尝试改造过,但不是很稳定。
而QMT,是直接调用券商接口,这就打通了量化交易最后这一环,暴露python API,可以用程序直接调用,这就很大程度上提升了自动化交易的稳定性,可编程性也很高。
三、QMT vs miniQMT(极简模式)
miniQMT是QMT的极简模式,这个模式一些券商有,一些券商没有。如何分辨有没有,就是看登录界面上有没有极简模式这个选项,当客户端以极简模式启动时,界面如下:
miniQMT与QMT最大的不同就是:
QMT模式需要将程序写在QMT客户端软件里运行;
而miniQMT模式,直接可以使用xtquant这个python包,在软件之外,写python程序与QMT客户端连接,进行程序化下单。聪明的朋友们应该看懂了,这样QMT客户端就完全变成一个交易终端了,我们的量化程序,完全可以独立于QMT运行,只要保证极简客户端运行着就好了。这就很大的释放了变成能力。
三、代码实战
多说无益,上代码,这里以miniQMT(极简模式)进行演示
下载xtquant
首先我们需要下载xtquant这个python包,我推荐从迅投官网下载,下面是下载链接
xtquant下载:http://docs.thinktrader.net/vip/pages/633b48/
下载最新版本即可,下载之后,将这个包放在你自己的python项目里,保证使用import
可以引到。
官网的例子还是相对复杂,这里还是从最简单的示例开始,抽丝剥茧
创建交易对象
import random
from xtquant.xttrader import XtQuantTrader
path = r'D:\国金证券QMT交易端\userdata_mini'
session_id = int(random.randint(100000, 999999))
xt_trader = XtQuantTrader(path, session_id)
创建xt_trader
对象需要两个参数:
path
:路径,就是安装QMT软件的文件下下的/userdata_mini
文件夹。
session_id
: 回话id,当创建多个xt_trader
对象时,需要不同,这里我们用6位随机数字生成。
连接QMT客户端
xt_trader.start()
connect_result = xt_trader.connect()
print(connect_result)
if connect_result == 0:
print('连接成功')
执行xt_trader.connect()
,需要保证已登录QMT极简模式并保持客户端运行状态,即可连接成功。非极简模式进入客户端,是连接不成功了,亲测。
订阅账户
from xtquant.xttype import StockAccount
acc = StockAccount('xxxxx')
subscribe_result = xt_trader.subscribe(acc)
print(subscribe_result)
这一步是用来订阅资金账户的,xxxxx
替换成你正在登录的资金账户号,订阅成功subscribe_result
会是0,不成功是-1
下单
from xtquant import xtconstant
stock_code = '000429.SZ'
order_id = xt_trader.order_stock(acc, stock_code, xtconstant.STOCK_BUY, 100, xtconstant.FIX_PRICE, 7.5)
print(order_id)
xtconstant.STOCK_BUY
表单下单类型是买入,xtconstant.FIX_PRICE
代表报价类型是限价,执行成功后,在miniQMT终端里,就直接可以看到委托记录,这就可以确认,我们的委托成功了。方法会返回订单变化,即下图中的订单编号。
撤单
可直接用订单编号撤单,执行以下方法,注意订单编号是数字格式
xt_trader.cancel_order_stock(acc, 1082130954)
这样,刚才下的单就撤掉了
四、如何开通
目前,QMT需要找券商公司开通,具体开通方法及要求,可以参看《QMT开通规则分享》
五、总结
本文介绍了QMT的基本概念和使用方法,并用miniQMT模式进行了实战,感觉相当好用,程序化交易不再是瓶颈了。后面会持续使用分享用法。