【深度学习量化交易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. 基本的财务数据获取流程

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

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支持以下主要财务报表:

  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进行获取实时行情数据篇

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/889676.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网络层IP协议(TCP)

IP协议: 在了解IP协议之前,我们市面上看到的"路由器"其实就是工作在网络层。如下图: 那么网络层中的IP协议究竟是如何发送数据包的呢? IP报头: IP协议的报头是比较复杂的,作为程序猿只需要我们重…

Xcode

info.plist Appearance Light 关闭黑暗模式 Bundle display name 设置app名称,默认为工程名 Location When In Use Usage Description 定位权限一共有3个key 1.Privacy - Location When In Use Usage Description 2.Privacy - Location Always and When In U…

【CSS in Depth 2 精译_079】第 13 章:渐变、阴影与混合模式概述 + 13.1:CSS 渐变效果(一)——使用多个颜色节点

当前内容所在位置(可进入专栏查看其他译好的章节内容) 第四部分 视觉增强技术 ✔️【第 13 章 渐变、阴影与混合模式】 ✔️ 13.1 渐变 ✔️ 13.1.1 使用多个颜色节点(一) ✔️13.1.2 颜色插值13.1.3 径向渐变13.1.4 锥形渐变 文…

地下管线三维建模,市面上有哪些软件

1. 地下管线:城市“生命线” 地下管线是城市的重要基础设施,包括供水、排水、燃气、热力、电力、通信等管线,它们如同城市的“生命线”,支撑着城市的正常运转。如果缺乏完整和准确的地下管线信息,施工破坏地下管线的事…

说说你对java lambda表达式的理解?

大家好,我是锋哥。今天分享关于【说说你对java lambda表达式的理解?】面试题。希望对大家有帮助; 说说你对java lambda表达式的理解? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 Java Lambda 表达式是 Java 8 引入的一项重要特性&#…

网易云信荣获“HarmonyOS NEXT SDK星河奖”

近日,鸿蒙生态伙伴 SDK 开发者论坛在北京举行。 网易云信凭借在融合通信领域的技术创新和鸿蒙生态贡献,荣获鸿蒙生态“HarmonyOS NEXT SDK星河奖”。 会上,华为鸿蒙正式推出 SDK 生态繁荣伙伴支持计划,旨在为 SDK 领域伙伴和开发…

电压调整电路汇总

目录: 一、LDO线性稳压器 1、LM1117 2、NCV33275 3、TLE42764 4、TPS7B67xx-Q1 5、总结 二、DCDC转换器 1、LM2576 2、MC34063A 3、总结 原文件下载移步:LDO-DCDC的仿真与Altium原理图 一、LDO线性稳压器 1、LM1117 LM1117 是一款在 800mA 负…

2024美亚杯资格赛复现

参考: 2024“美亚杯”第十届中国电子数据取证大赛资格赛参考WP 2024美亚杯个人资格赛WP 第十届美亚杯个人赛内存和优盘解答 2024年美亚杯个人赛 资格赛 wp_2024美亚杯个人赛-CSDN博客 历年赛题及解析 - 美亚杯 第一次打,感觉就是题量很大&#xff…

练12:双指针

欢迎大家订阅【蓝桥杯Python每日一练】 专栏,开启你的 Python数据结构与算法 学习之旅! 文章目录 前言1 同向扫描2 反向扫描3 同向扫描与反向扫描的对比4 例题分析2.1 回文判定2.2 美丽的区间2.3 挑选子串 前言 双指针是一种常用于数组和链表类问题中&a…

360智脑张向征:共建可信可控AI生态 应对大模型安全挑战

发布 | 大力财经 人工智能的加速发展,有力推动了社会的数智化转型;与此同时,带来的相关安全风险也日益凸显。近日,在北京市举办的通明湖人工智能开发与应用大会上,360智脑总裁张向征以“大模型安全研究与实践”为主题&…

6.数据建模和数据检索及权限检查

总学习目录请点击下面连接 SAP ABAP开发从0到入职,冷冬备战-CSDN博客 目录 1.数据建模和ABAP字典的透明表 现实产品到数据库数据过程 飞行数据模型 做一个简单的引用。 从旅行社来看: 对于开发人员: 透明表 结构体和透明表 在系统中…

反复出现 idf.py: command not found 的解决办法

版本:ESP-IDF v4.4.8 1. 问题描述 当我们需要经常使用 ESP-IDF 时,总要反复安装编译链、设置环境,不然就会显示 idf.py: command not foundESP-IDF 是乐鑫官方的物联网开发框架,适用于ESP32、ESP32-S、ESP32-C 和ESP32-H 系列S…

IIC 通信协议

IIC 通信协议 参考:CSDN-Projectsauron、B站-江协科技 IIC Overview IIC协议(Inter-Integrated Circuit,可简写为 I2C),是一种用于各种电子设备之间进行通信和数据交换的串行通信协议。它是由飞利浦(Phil…

【图像处理】利用numpy、opencv、python实现车牌检测

| 利用opencv实现车牌检测 整体流程涉及5个部分 图像通道转换对比度增强边缘连接二值化边界区域裁剪 图像通道转换 将RGB图像转换为HSV图像,仅保留V通道。V通道表示颜色的明暗,常用于图像对比度拉伸、直方图均衡化等流程。 原图像: V通…

linux切换用户异常

1、报错现象 报错su: failed to execute /bin/bash: Resource temporarily unavailable 2、解决方案 vim /etc/security/limits.d/20-nproc.conf

UE5安装Fab插件

今天才知道原来Fab也有类似Quixel Bridge的插件,于是立马就安装上了,这里分享一下安装方法 在Epic客户端 - 库 - Fab Library 搜索 Fab 即可安装Fab插件 然后重启引擎,在插件面板勾选即可 然后在窗口这就有了 引擎左下角也会多出一个Fab图标…

Java、鸿蒙与嵌入式开发:技术选择与职业发展分析

在当今快速发展的科技领域中,Java、鸿蒙和嵌入式开发代表着不同的技术方向和职业机遇。每个方向都有其独特的市场价值和发展前景,让我们深入分析这三个领域的特点、发展趋势和职业规划。 Java开发方向已经发展了二十多年,仍然在软件开发领域…

synchronized 锁升级实现原理

synchronized 锁升级实现原理 对象的内存结构 在HotSpot虚拟机中,对象在内存中存储的布局可分为3块区域:对象头(Header)、实例数据(Instance Data)和对齐填充 我们需要重点分析MarkWord对象头 MarkWord …

vue3实现页签

效果 注意点 useStore涉及的部分是pina的缓存,需要改成自己的;userStore.tabStore是获取缓存里的页签,userStore.$patch(state > { state.tabStore tabStoreList.value }) 是存储改变的页签注意我的页签是根据路由path来判断的&#xf…

dfs算法搜索(详细)

目录 算法简介: 枚举方式: 1.每一个数都有两种状态,也就是选或不选,时间复杂度也就是2^n,每一个数都有选和不选两种状态。 2.生成给定集合所有可能排列的方法,与之不同的是同样是1 2 3三个数字&#xff0…