【深度学习量化交易9】miniQMT快速上手教程案例集——使用xtQuant获取基本面数据篇

我是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中,获取基本面数据主要涉及到三个核心函数:

  1. download_financial_data() - 下载单只股票的财务数据
  2. download_financial_data2() - 批量下载多只股票的财务数据
  3. get_financial_data() - 获取已下载的财务数据

与行情数据类似,基本面数据的获取也需要先下载数据到本地,然后才能查询。不同的是,基本面数据是按照报表期进行组织的,包含了资产负债表、利润表、现金流量表等多个报表。

1. 基本的财务数据获取流程

下面通过一个简单的案例来演示这个过程:

python 复制代码
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: 支持批量下载,可监控下载进度,异步执行
python 复制代码
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()函数是获取财务数据的核心接口,它支持多种查询方式:

python 复制代码
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支持以下主要财务报表:

  1. Balance - 资产负债表
  2. Income - 利润表
  3. CashFlow - 现金流量表
  4. Capital - 股本表
  5. Holdernum - 股东数
  6. Top10holder - 十大股东
  7. Top10flowholder - 十大流通股东
  8. Pershareindex - 每股指标

每个报表都包含了大量的字段,具体字段说明可以参考附录中的财务数据字段列表。

三、注意事项

  1. 使用前确保miniQMT已启动并正常运行
  2. 获取数据前需要先下载对应的财务数据
  3. 财务数据更新频率相对较低,建议按季度更新即可
  4. 下载数据时注意控制批量大小,建议单次不超过50只股票
  5. 查询时注意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 - 本次信息
  • 返回

  • 备注

    • 同步执行,补充数据完成后返回

关于看海量化交易系统

关于上边提到的我正在开发的基于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进行获取实时行情数据篇

相关推荐
JD技术委员会18 分钟前
Rust 语法噪音这么多,是否适合复杂项目?
开发语言·人工智能·rust
liruiqiang0523 分钟前
机器学习 - 投票感知器
人工智能·算法·机器学习
cheungxiongwei.com25 分钟前
Rust 驱动的 Python 工具革命:Ruff 和 uv 与传统工具的对比分
python·rust·uv
web135085886353 小时前
Python大数据可视化:基于python的电影天堂数据可视化_django+hive
python·信息可视化·django
刘什么洋啊Zz3 小时前
MacOS下使用Ollama本地构建DeepSeek并使用本地Dify构建AI应用
人工智能·macos·ai·ollama·deepseek
东方芷兰3 小时前
伯克利 CS61A 课堂笔记 11 —— Mutability
笔记·python
奔跑草-4 小时前
【拥抱AI】GPT Researcher 源码试跑成功的心得与总结
人工智能·gpt·ai搜索·deep research·深度检索
禁默5 小时前
【第四届网络安全、人工智能与数字经济国际学术会议(CSAIDE 2025】网络安全,人工智能,数字经济的研究
人工智能·安全·web安全·数字经济·学术论文
不会Hello World的小苗6 小时前
Java——列表(List)
java·python·list
boooo_hhh6 小时前
深度学习笔记16-VGG-16算法-Pytorch实现人脸识别
pytorch·深度学习·机器学习