前言
上篇从概念上介绍了miniQMT和它的优势,本篇开始实操的第一步:连接客户端,让你知其然,也只其所以然,话不多说,开干!
登录客户端
一切的开始,我们要首先保证QMT极简版客户端的登录,原理也很简单,真正提供行情和交易接口的服务,在客户端中,xtquant包只是与客户端建立通信。
一定要保证客户端成功登录!!!不要犯低级错误!!!然后去问别人为什么不好用!
如上图,一定要勾选【极简模式】选项,然后输入账号密码登录。
需要说明一下,QMT客户端在非交易时间,特别是周末,很可能无法登录,这是正常现象,无需大惊小怪,所以,一些重要的测试,最好在交易时段进行。
通信设置
可以看到,登录界面左下角有个【通信设置】按钮,我们点开看一下。
这里默认是不需要我们修改的,默认即可,但我们可以通过这里理解一下,QMT与云端连接的有两部分:【行情主站】和【交易中心】
- 行情主站:提供行情数据,在miniQMT模式下,通过
xtdata
模块调用 - 交易中心:提供交易接口,在miniQMT模式下,通过
xttrader
模块调用
至于xtdata
和xttrade
分别是什么,我后面会详细介绍。
下载XtQuant
下载地址:http://docs.thinktrader.net/vip/pages/633b48/
好,现在我们聚焦到xtquant
这个东西,它是一个Python包,可以下载下来使用。
需要说明的是,迅投并没有把包发布到PyPi,所以我们不能使用pip install
来安装,只能手动下载,放到我们Python项目的根目录下,作为本地包,引入使用。
关于Python包和模块的概念,不是本系列文章的解释重点,属于Python基础部分,若这方面知识体系有缺失的朋友,建议找渠道学习一下,最简单快速的方式,就是让ChatGPT教你,它这方面贼6。
那,xtquant
是做什么的呢?可以将xtquant
理解为操作miniQMT的一组API方法,通过调用xtquant中的方法,我们可以实现行情获取、下单指令等操作,以实现我们的策略。
xtquant
的调用,并不需要编写在QMT软件内部,只需要保证QMT极简模式已登录,在任何可以执行Python的环境里,都可以调用xtquant
。
但,需要保证的是,xtquant
的调用程序,与QMT软件在同一个操作系统中,目前官方提供的接口,不支持RPC远程调用。
构建本地项目
不管你用什么工具,Python的项目应该会搭建吧,为了写这个系列文章,我再Github上建一个。
可以看到,把下载下来的xtquant
放到我们项目的根文件夹,这样就可以引用到了。
注意,因为xtquant中用到了pandas
作为数据的描述结构,所以我们这里要安装一下pandas
。
poetry add pandas
或者
pip install pandas
这里取决于你用了什么包管理器作为工具,对这方面缺乏了解的话,就默认用pip
。
下面,我们开始实战代码,创建一个jupter notebook文件,在其中编写我们的程序。上面提到过,xtquant
中最重要两个模块,就是xtdata
和xttrader
,下面分别实战这两部分。
xtdata
xtdata
是数据获取接口,我们可以实现数据的获取,下载,订阅等功能。
下面是一个简单的例子,保证我们的QMT客户端成功登录后,下面这个接口即可调通。
from xtquant import xtdata
xtdata.download_history_data2(stock_list=['600519.SH'], period='1d')
res = xtdata.get_market_data(stock_list=['600519.SH'], period='1d')
print(res)
获取回来的数据是一个字典,每个key对应的值,是一个pandas.DataFrame
对象,我们可以根据我们的需要,处理数据结果。
对于xtdata
更详细的介绍,以后我们再说,这里先有个简单的印象,可以理解为,所有跟数据获取相关的API都在这个模块里。
xttrader
xttrader
是交易相关的模块,我们可以用它来下单,撤单等。
下面是个简单的例子,一个链接客户端并下单的例子
import random
from xtquant.xttype import StockAccount
from xtquant.xttrader import XtQuantTrader
from xtquant import xtconstant
# miniQMT安装路径
mini_qmt_path = r'D:\国金证券QMT交易端\userdata_mini'
# QMT账号
account = 'xxxx'
# 创建session_id
session_id = int(random.randint(100000, 999999))
# 创建交易对象
xt_trader = XtQuantTrader(mini_qmt_path, session_id)
# 启动交易对象
xt_trader.start()
# 连接客户端
connect_result = xt_trader.connect()
if connect_result == 0:
print('连接成功')
# 创建账号对象
acc = StockAccount(account)
# 订阅账号
xt_trader.subscribe(acc)
# 下单
res = xt_trader.order_stock(acc, stock_code='600000.SH', order_type=xtconstant.STOCK_BUY, order_volume=100, price_type=xtconstant.FIX_PRICE, price=7.44)
res
这里有几个关键对象
- mini_qmt_path :这是QMT的安装路径,需要选到
userdata_mini
这个文件夹 - account:你的QMT账号
- xt_trader:被创建的交易对象
连接成功后,就可以愉快的下单了。
注意:在非交易时间,很可能会委托失败,请及时查看客户端中的信息,失败会在消息中显示。
总结
本篇我们通过xtquant
连接了QMT客户端,并通过xtdata
获取了股票交易数据,通过xttrader
连接你的资金账号下单,执行下单操作。
在之后的文章中,会逐个介绍xtquant
的每个重要API,必要的时候,会做源码解析。
本文实例代码可以在这里获取:https://github.com/zsrl/miniqmt-demo
目前,QMT需要找券商公司开通,具体开通方法及要求,可以参看《QMT开通规则分享》