【深度学习量化交易8】miniQMT快速上手教程案例集——使用xtQuant进行获取实时行情数据篇

我是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也提供了主力合约、期权链、商品期权等衍生品数据的查询功能。

这篇文章我将着重介绍其中的实时行情数据获取功能,其他功能我将在后续系列文章中介绍。

二、实时数据获取的运行逻辑与演示案例

xtdata模块中,获取实时数据有三种常用方式:先下载再读取的方式、回调函数触发方式、获取市场快照方式,其中前两种方式需要先向服务器订阅(subscribe)数据,而第三种方式可以直接调用获取。

2.1 先下载再读取的方式

第一步:使用subscribe_quote()函数订阅单只股票的实时行情,或者使用subscribe_whole_quote()函数订阅全市场行情。经过订阅的数据实质上也是下载到了本地,这一点是和download_history_data函数一样的,只不过使用订阅的函数得到的数据会自动更新到本地。

第二步:使用get_market_data或get_market_data_ex函数,读取本地的数据。

需要注意的一点是,实时数据是从调用的那一刻起开始存储,比如从上午10点启动,那么9点30分到10点钟的数据本地是没有的,为了将数据补充完整,方便后续处理,可以先调用download_history_data补充数据,再启动订阅。当然如果你不需要用到之前的数据,那么直接订阅也可以。

先下载再读取的方式比较简单直观,不过实时性会稍微差一些。毕竟当调用get_market_data函数时,得到的数据可能已经是几秒钟前更新的了。

from xtquant import xtdata
import time
# 1.下载数据
xtdata.download_history_data(
    stock_code="000004.SZ",
    period="tick",
    start_time="20241212",   #这个时间要根据运行程序日期修改
    end_time="20241212"      #这个时间要根据运行程序日期修改,也可缺省
)
# 2.订阅数据
seq = xtdata.subscribe_quote(
    stock_code="000004.SZ",  # 平安银行
    period="tick",             # 1分钟K线
    count=-1                 # 获取当天所有数据
)
# 3.等待订阅完成
time.sleep(1)
# 4.定期获取数据
for i in range(5):  # 演示获取5次
    data = xtdata.get_market_data_ex(
        field_list=["time", "open", "high", "low", "close", "volume"],
        stock_list=["000004.SZ"],
        period="tick"
    )
    print(f"\n第{i+1}次获取数据:")
    print(data)
    time.sleep(3)  # 每3秒获取一次
# 5.取消订阅
xtdata.unsubscribe_quote(seq)

运行结果(因为程序是收盘后运行的,所以有全天的运行数据):

第1次获取数据:
{'000004.SZ':                          time   open   high    low close  volume
20241213091500  1734052500000   0.00   0.00   0.00   NaN       0
20241213091509  1734052509000   0.00   0.00   0.00   NaN       0
20241213091518  1734052518000   0.00   0.00   0.00   NaN       0
20241213091527  1734052527000   0.00   0.00   0.00   NaN       0
20241213091536  1734052536000   0.00   0.00   0.00   NaN       0
...                       ...    ...    ...    ...   ...     ...
20241213145924  1734073164000  20.03  20.84  19.65  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mr.看海

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值