我是Mr.看海,我在尝试用信号处理的知识积累和思考方式做量化交易,应用深度学习和AI实现股票自动交易,目的是实现财务自由~目前我正在开发基于miniQMT的量化交易系统。
在前几篇的文章中讲到,我正在开发的看海量化交易系统,底层是使用miniQMT的Python接口实现的数据获取和交易执行。作为系统开发的基础,在此我将系统梳理一下miniQMT的Python接口库XtQuant,并以案例集的形式对常用功能进行演示和讲解。当然最权威的教程还是XtQuant的官方文档,本文是作为一个易用快查手册,方便我自己查阅,同时也为做相关研究的朋友提供一个参考。
我会将系统的教程案例集做成一个系列并集结成册,需要查看完整教程的朋友可以关注我的公众号:看海的城堡。我正在开发的基于miniQMT的量化交易系统,也欢迎大家关注和使用。
一、基本概念介绍
1.miniQMT、XtQuant和xtdata的关系
miniQMT是一个量化交易终端软件。它作为本地服务器运行,负责与交易所建立连接,接收和存储行情数据,并提供数据下载和交易接口。
XtQuant是miniQMT的Python接口库,作为Python程序与miniQMT之间的桥梁。它通过TCP连接与本地miniQMT服务通信,包含行情(xtdata)和交易(xttrader)两个主要模块。
xtdata是XtQuant中专门用于获取行情数据的模块。它提供了获取各类行情数据的API接口,本质是向miniQMT发送数据请求并处理返回结果。它既支持查询历史数据,也支持订阅实时行情。
2.xtdata模块能实现的主要功能
xtdata模块作为行情数据获取的核心模块,提供了全面的数据服务功能。
- 在历史数据方面,它不仅支持获取各种周期(日线、分钟线、周线等)的K线数据,还能获取分笔成交的tick数据,并且提供了前复权、后复权等多种复权方式。
- 对于实时行情,xtdata提供了两种订阅模式:可以针对单只股票订阅特定周期的数据,也可以订阅全市场的tick数据。此外,它还支持Level2深度行情数据的获取(需要单独开通权限),为高频交易提供了数据基础。
- 在基本面数据方面,xtdata提供了完整的财务数据查询功能,包括资产负债表、利润表、现金流量表等财务报表,以及主要的财务指标数据。同时,它还提供了股票列表、交易日历、除权除息等基础信息的查询接口。
- 对于指数投资者来说,xtdata提供了指数成分股、成分股权重、指数行情等数据的获取功能。在板块数据方面,支持查询行业分类、概念板块、地域板块等多维度的分类数据。
- ETF基金投资者可以通过xtdata获取ETF的申赎清单、成分股信息和净值数据。对于期货和期权交易者,xtdata也提供了主力合约、期权链、商品期权等衍生品数据的查询功能。
二、基本面数据获取的运行逻辑与演示案例
在XtQuant中,获取基本面数据主要涉及到三个核心函数:
- download_financial_data() - 下载单只股票的财务数据
- download_financial_data2() - 批量下载多只股票的财务数据
- get_financial_data() - 获取已下载的财务数据
与行情数据类似,基本面数据的获取也需要先下载数据到本地,然后才能查询。不同的是,基本面数据是按照报表期进行组织的,包含了资产负债表、利润表、现金流量表等多个报表。
1. 基本的财务数据获取流程
下面通过一个简单的案例来演示这个过程:
from xtquant import xtdata# 1.下载单只股票的财务数据
xtdata.download_financial_data(stock_list=["000001.SZ"],table_list=["Balance", "Income"] # 下载资产负债表和利润表
)# 2.查询财务数据
data = xtdata.get_financial_data(stock_list=["000001.SZ"],table_list=["Balance", "Income"],start_time="20230101",end_time="20240101",report_type="report_time" # 按报告期查询
)# 3.打印结果
print("平安银行财务数据:")
for stock_code in data:print(f"\n{stock_code}的财务数据:")for table_name in data[stock_code]:print(f"\n{table_name}表主要指标:")print(data[stock_code][table_name].head())
2. 财务数据下载函数的对比
在数据下载阶段,我们可以使用download_financial_data()或download_financial_data2()函数。
主要区别:
- download_financial_data: 适合单只或少量股票下载,同步执行
- download_financial_data2: 支持批量下载,可监控下载进度,异步执行
from xtquant import xtdata# 示例1: 使用download_financial_data下载单只股票
xtdata.download_financial_data(stock_list=["000001.SZ"],table_list=["Balance", "Income", "CashFlow"] # 三大报表
)# 示例2: 使用download_financial_data2批量下载
def on_progress(data):print(f"已完成:{data['finished']}/{data['total']} - {data['message']}")xtdata.download_financial_data2(stock_list=["000001.SZ", "600000.SH"],table_list=["Balance", "Income", "CashFlow"],start_time="20230101", # 可选:按披露日期筛选end_time="20240101", # 可选:按披露日期筛选callback=on_progress # 进度回调函数
)
3. 财务数据查询的详细说明
get_financial_data()函数是获取财务数据的核心接口,它支持多种查询方式:
from xtquant import xtdata# 示例1:按报告期查询
data1 = xtdata.get_financial_data(stock_list=["000001.SZ"],table_list=["Balance", "Income"],start_time="20230101",end_time="20240101",report_type="report_time" # 按报告期查询
)# 示例2:按披露日期查询
data2 = xtdata.get_financial_data(stock_list=["000001.SZ"],table_list=["Balance", "Income"],start_time="20230101", end_time="20240101",report_type="announce_time" # 按披露日期查询
)
4. 支持的财务报表类型
XtQuant支持以下主要财务报表:
- Balance - 资产负债表
- Income - 利润表
- CashFlow - 现金流量表
- Capital - 股本表
- Holdernum - 股东数
- Top10holder - 十大股东
- Top10flowholder - 十大流通股东
- Pershareindex - 每股指标
每个报表都包含了大量的字段,具体字段说明可以参考附录中的财务数据字段列表。
三、注意事项
- 使用前确保miniQMT已启动并正常运行
- 获取数据前需要先下载对应的财务数据
- 财务数据更新频率相对较低,建议按季度更新即可
- 下载数据时注意控制批量大小,建议单次不超过50只股票
- 查询时注意report_type参数的设置:
- report_time: 按报告期查询,适合分析某个时点的财务状况
- announce_time: 按披露日期查询,适合做历史回测
附录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系统)
获取财务数据
get_financial_data(stock_list, table_list=[], start_time='', end_time='', report_type='report_time')
- 释义
- 获取财务数据
- 参数
- stock_list - list 合约代码列表
- table_list - list 财务数据表名称列表
'Balance' #资产负债表
'Income' #利润表
'CashFlow' #现金流量表
'Capital' #股本表
'Holdernum' #股东数
'Top10holder' #十大股东
'Top10flowholder' #十大流通股东
'Pershareindex' #每股指标 - start_time - string 起始时间
- end_time - string 结束时间
- report_type - string 报表筛选方式
'report_time' #截止日期
'announce_time' #披露日期
- 返回
- dict 数据集 { stock1 : datas1, stock2 : data2, ... }
- stock1, stock2, ... :合约代码
- datas1, datas2, ... :dict 数据集 { table1 : table_data1, table2 : table_data2, ... }
- table1, table2, ... :财务数据表名
- table_data1, table_data2, ... :pd.DataFrame 数据集,数据字段详见附录 - 财务数据字段列表
- 备注
- 无
下载财务数据
download_financial_data(stock_list, table_list=[])
- 释义
- 下载财务数据
- 参数
- stock_list - list 合约代码列表
- table_list - list 财务数据表名列表
- 返回
- 无
- 备注
- 同步执行,补充数据完成后返回
download_financial_data2(stock_list, table_list=[], start_time='', end_time='', callback=None)
- 释义
- 下载财务数据
- 参数
- stock_list - list 合约代码列表
- table_list - list 财务数据表名列表
- start_time - string 起始时间
- end_time - string 结束时间
- 以m_anntime披露日期字段,按[start_time, end_time]范围筛选
- callback - func 回调函数
- 参数为进度信息dict
- total - 总下载个数
- finished - 已完成个数
- stockcode - 本地下载完成的合约代码
- message - 本次信息
- 参数为进度信息dict
- 返回
- 无
- 备注
- 同步执行,补充数据完成后返回
关于看海量化交易系统
关于上边提到的我正在开发的基于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进行获取实时行情数据篇