我是Mr.看海,我在尝试用信号处理的知识积累和思考方式做量化交易,应用深度学习和AI实现股票自动交易,目的是实现财务自由~目前我正在开发基于miniQMT的量化交易系统。
在前几篇的文章中讲到,我正在开发的看海量化交易系统,底层是使用miniQMT的Python接口实现的数据获取和交易执行。作为系统开发的基础,在此我将系统梳理一下miniQMT的Python接口库XtQuant,并以案例集的形式对常用功能进行演示和讲解。当然最权威的教程还是XtQuant的官方文档,本文是作为一个易用快查手册,方便我自己查阅,同时也为做相关研究的朋友提供一个参考。
我会将系统的教程案例集做成一个系列并集结成册,需要查看完整教程的朋友可以关注我的公众号:看海的城堡。我正在开发的基于miniQMT的量化交易系统,也欢迎大家关注和使用。
一、基本概念介绍
1.1 miniQMT、XtQuant和xtdata的关系
miniQMT是一个量化交易终端软件。它作为本地服务器运行,负责与交易所建立连接,接收和存储行情数据,并提供数据下载和交易接口。
XtQuant是miniQMT的Python接口库,作为Python程序与miniQMT之间的桥梁。它通过TCP连接与本地miniQMT服务通信,包含行情(xtdata)和交易(xttrader)两个主要模块。
xtdata是XtQuant中专门用于获取行情数据的模块。它提供了获取各类行情数据的API接口,本质是向miniQMT发送数据请求并处理返回结果。它既支持查询历史数据,也支持订阅实时行情。
1.2 xtdata模块能实现的主要功能
xtdata模块作为行情数据获取的核心模块,提供了全面的数据服务功能。
- 在历史数据方面,它不仅支持获取各种周期(日线、分钟线、周线等)的K线数据,还能获取分笔成交的tick数据,并且提供了前复权、后复权等多种复权方式。
- 对于实时行情,xtdata提供了两种订阅模式:可以针对单只股票订阅特定周期的数据,也可以订阅全市场的tick数据。此外,它还支持Level2深度行情数据的获取(需要单独开通权限),为高频交易提供了数据基础。
- 在基本面数据方面,xtdata提供了完整的财务数据查询功能,包括资产负债表、利润表、现金流量表等财务报表,以及主要的财务指标数据。同时,它还提供了股票列表、交易日历、除权除息等基础信息的查询接口。
- 对于指数投资者来说,xtdata提供了指数成分股、成分股权重、指数行情等数据的获取功能。在板块数据方面,支持查询行业分类、概念板块、地域板块等多维度的分类数据。
- ETF基金投资者可以通过xtdata获取ETF的申赎清单、成分股信息和净值数据。对于期货和期权交易者,xtdata也提供了主力合约、期权链、商品期权等衍生品数据的查询功能。
这篇文章我将着重介绍其中的板块及成分股数据获取功能,其他功能我将在后续系列文章中介绍。
二、板块数据与成分股数据获取的运行逻辑与演示案例
在量化交易中,板块数据和成分股数据是非常重要的基础数据。XtQuant提供了完整的接口来获取这些数据。
2.1 板块数据获取的基本流程
在获取板块数据前,我们首先需要使用download_sector_data()函数下载板块分类数据。这个函数不需要任何参数,会同步下载所有板块的最新分类数据。由于板块数据变化频率较低,建议在程序启动时调用一次,或者每周、每月定期更新。需要注意的是,这是一个同步操作,在数据下载完成前会阻塞程序的执行。
下载完成后,我们可以通过get_sector_list()函数获取所有可用的板块列表。这个函数会返回一个字符串列表,包含了所有板块的名称。返回的板块列表中包含了行业板块、概念板块、地域板块等多种类型。
获取到板块列表后,就可以使用get_stock_list_in_sector()函数来获取特定板块的成分股列表。这个函数接受板块名称作为参数,返回该板块下所有成分股的代码列表。返回的股票代码采用"code.market"的格式(如"600000.SH")。
下面通过案例演示获取板块数据的基本流程:
from xtquant import xtdata# 1.下载板块分类数据
xtdata.download_sector_data()# 2.获取所有板块列表
sector_list = xtdata.get_sector_list()
print("板块列表示例:")
for sector in sector_list[:5]:print(sector)# 3.获取某个板块的成分股
stocks = xtdata.get_stock_list_in_sector("沪深300")
print("\n沪深300成分股示例:")
print(stocks[:5])
运行结果:
板块列表示例:
上期所
上证A股
上证B股
上证期权
上证转债沪深300成分股示例:
['600000.SH', '600009.SH', '600010.SH', '600011.SH', '600015.SH']
2.2 获取指数成分股与权重数据
对于指数投资来说,成分股权重数据是非常重要的基础数据。在获取指数成分股权重数据时,我们首先需要调用download_index_weight()函数下载最新的权重数据。这个函数会同步下载所有指数的成分股权重信息,由于数据量较大,特别是首次下载时可能需要较长时间。建议每周更新一次数据,以确保使用的是最新的权重信息。
下载完成后,我们可以使用get_index_weight()函数获取特定指数的成分股权重信息。这个函数需要传入指数代码(如"000300.SH"代表沪深300指数),会返回一个字典,其中key是成分股代码,value是对应的权重值。返回的权重值采用百分比表示,例如5表示该股票占指数5%的权重。在使用这些数据时,建议检查权重总和是否接近100%,以验证数据的合理性。
示例代码:
from xtquant import xtdata# 1.下载指数成分权重数据
xtdata.download_index_weight()# 2.获取指数成分股权重
weights = xtdata.get_index_weight("000300.SH") # 沪深300指数
print("沪深300成分股权重示例(前5个):")
total_weight = 0
for stock, weight in list(weights.items())[:5]:print(f"{stock}: {weight}%")
运行结果:
沪深300成分股权重示例(前5个):
000001.SZ: 0.549%
000002.SZ: 0.291%
000063.SZ: 0.494%
000100.SZ: 0.437%
000157.SZ: 0.172%
三、注意事项
1. 数据更新建议
- 在每个交易日开始前更新一次板块和成分股数据
- 重要指数成分股调整生效日要提前更新数据
- 建议把数据更新操作加入策略的初始化流程中
2. 使用要点
- 获取板块成分股时要先调用download_sector_data()下载数据
- 获取指数权重数据前要先调用download_index_weight()
- 权重数据的使用要注意新股上市、停牌等特殊情况的处理
- 建议对获取的数据进行缓存,避免频繁调用接口
3. 常见问题处理
- 如果板块名称不存在,get_stock_list_in_sector会返回空列表
- 新股上市后如需立即使用,要及时更新板块数据
- 成分股权重数据可能有1-2天的延迟,要在策略中预留处理机制
附录1:安装与环境配置
1. 启动并登录miniQMT
以上提到的所有功能,都需要miniQMT的运行支持。miniQMT是迅投科技开发的量化交易终端软件,在很多券商都可以开通。之前的文章介绍过miniQMT的开通方式,大家可以翻阅:Mr.看海:如何轻松开通miniQMT,开启量化交易大门
2. 安装xtquant
xtquant库可以通过pip直接安装:
pip install xtquant
3. 环境要求
- Python版本: 3.7-3.11
- 常用依赖库: numpy, pandas
- 操作系统: Windows (目前仅支持Windows系统)
关于看海量化交易系统
关于上边提到的我正在开发的基于miniQMT的量化交易系统,目前已经开放数据下载、可视化、数据清洗模块,有需要的朋友可以关注公众号“看海的城堡”获取。
目前平台更新的进展大致如下:
2024.10.11 完成历史数据下载模块初步版本。2024.10.12 GUI界面更新了打开QMT终端和指示灯功能 数据可视化界面解决了部分bug
2024.11.08 1.将数据下载和数据清洗模块合并为GUI.py文件 2.加入了报错日志保存的功能 3.读取股票列表的函数文件,加入了支持各种编码模式。
2024.11.15 1.基本完成数据下载和数据清洗模块 2.完成软件界面可根据显示器分辨率自动调整大小,并保持界面居中
2024.11.16 完善重复数据清理的逻辑,需进行时间戳与数据双重验证,以判定是否为重复数据。
2024.11.17 1.添加了数据可视化模块 2.在平台主界面新增了工具栏,可通过工具栏打开可视化模块。3.重新整理了data文件夹,使其更具结构化 4.修正了1d数据下载可能存在的bug 5.修正底层下载数据的函数,对于下载1d数据,不再下载time列
2024.11.18 美化了界面,优化了软件界面布局,丰富了文件信息内容(增加了市场分部、周期类型、日期范围),图例解析为中文显示,日内数据休市时间使用灰色区域显示。
2024.11.20 在可视化模块中加入了重载文件夹数据功能。
2024.11.22 增加了设置界面,添加了icon图标。
2024.11.26 添加splash加载界面,显示程序加载进度。
2024.11.28 实现程序打包为exe安装包,并支持中文安装界面。
2024.11.29 发布第一个稳定版本V1.0.0
2024.12.01 发布V1.1.6,完善日志管理。
2024.12.02 发布V1.1.8,优化激活管理和界面日志记录,修复激活提示重复显示问题。改进状态指示器逻辑,避免重复记录相同状态。
2024.12.02 发布V1.2.0,更新股票列表获取和保存功能,添加成分股支持;优化日志记录,增强错误处理机制;修复界面关闭时的线程管理问题;改进设置对话框,添加股票列表管理功能。此提交提升了用户体验和系统稳定性。
2024.12.02 发布V1.2.1,内置了对沪深A股、深证A股、上证A股、创业板、科创板、中证500成分股、沪深300成分股、上证50成分股的股票列表,以及常用指数的列表。设置界面新增了对上述股票列表的更新功能。
2024.12.05 发布稳定版本V1.2.3,修复了多个界面和功能问题,提升了用户体验和系统稳定性。
相关文章
【深度学习量化交易1】一个金融小白尝试量化交易的设想、畅享和遐想
【深度学习量化交易2】财务自由第一步,三个多月的尝试,找到了最合适我的量化交易路径
【深度学习量化交易3】为了轻松免费地下载股票历史数据,我开发完成了可视化的数据下载模块
【深度学习量化交易4】 量化交易历史数据清洗——为后续分析扫清障碍
【深度学习量化交易5】 量化交易历史数据可视化模块
【深度学习量化交易6】优化改造基于miniQMT的量化交易软件,已开放下载~(已完成数据下载、数据清洗、可视化模块)
【深度学习量化交易7】miniQMT快速上手教程案例集——使用xtQuant进行历史数据下载篇
【深度学习量化交易8】miniQMT快速上手教程案例集——使用xtQuant进行获取实时行情数据篇
【深度学习量化交易9】miniQMT快速上手教程案例集——使用xtQuant获取基本面数据篇