前言
上篇文章,介绍了如何与miniQMT建立连接,这篇开始,我们会深入探讨miniQMT的每个功能接口。首先,从获取历史数据开始。
迅投的官方文档目前已经更新,miniQMT对应原生API部分
接口汇总
与历史行情数据相关的接口,且文档上写的,有以下几个:
xtdata.download_history_data()
xtdata.download_history_data2()
xtdata.get_market_data()
xtdata.get_local_data()
下面就逐一阐述每个接口。
下载数据
在miniqmt的逻辑里,使用历史数据,需要先下载历史数据,所以,我们先介绍两个下载历史数据的接口。
download_history_data
这是单股数据下载接口,具体使用如下
xtdata.download_history_data(stock_code='002358.SZ', period='1d', start_time='20230101', end_time='20231115')
此接口有四个参数:
- stock_code:就是股票的代码,取值为股票代码.交易所代号
- period:代表周期,这个参数比较重要,很多接口都有这个参数,其取值如下图。这里需要注意,不同的周期对应不同的数据,比如,若执行下载
period='1d'
的某股票数据,不代表拥有其他周期的数据,假若想使用tick
级别数据,需要再次执行下载。
- start_time:可以缺省,不传默认就是从数据起始日期开始下载。
- end_time:可以缺省,不传默认就以当下最新时间为截止时间。关于这两个参数,需要注意的是,如果下载
tick
周期的数据,不写起止日期会下载大量数据,可能会造成长期等待或者程序卡死,所以建议根据自己的需要进行设置。
该接口没有返回值,不报错即下载成功。
download_history_data2
该接口与上面的接口功能类似,只是参数从stock_code
变为了stock_list
,可以批量传多个股票代码,并增加了一个回调函数,适用于批量下载数据场景。
from xtquant import xtdata
def on_progress(data):
print(data)
xtdata.download_history_data2(stock_list=['600309.SH', '600989.SH', '002714.SZ'], period='tick', start_time='20231111', end_time='20231115', callback=on_progress)
运行结果如下,可以用回调来监听进度
获取数据
关于数据获取,主要有两个方法:get_market_data
和get_local_data
,这两个方法的入参基本相同,只是返回的结果格式不同,我个人更建议使用get_local_data
这个方法,因为他的结果数据是pd.DataFrame
。
get_market_data
from xtquant import xtdata
xtdata.download_history_data2(stock_list=['600309.SH', '600989.SH', '002714.SZ'], period='1d', start_time='20231111', end_time='20231115')
res = xtdata.get_market_data(stock_list=['600309.SH', '600989.SH', '002714.SZ'], period='1d', start_time='20231111', end_time='20231115')
res
例子中的参数,跟下载接口是一样的,但这个接口有几个缺省参数,没有特殊需要可以不传,下面逐一说明。
- field_list:这个参数是个数组,可以传要查询的字段,比如:
field_list=['close']
,那就是只返回收盘价的数据。 - count: 缺省值是-1,如果设为正数,结果只返回count条数据。
- dividend_type:获取复权数据,取值有
"front" "back" "front_ratio" "back_ratio"
- fill_data:缺省值为
True
,自定补全缺失数据,比如哪天停盘了之类的,这个参数我觉得不用改,就一直为True就可以了。
这个接口返回的数据格式,我感觉比较奇葩,处理起来比较麻烦。
get_local_data
这个接口的参数用法,与get_market_data一致,我们直接看例子:
from xtquant import xtdata
xtdata.download_history_data2(stock_list=['600309.SH', '600989.SH', '002714.SZ'], period='1d', start_time='20231111', end_time='20231115')
res = xtdata.get_local_data(stock_list=['600309.SH', '600989.SH', '002714.SZ'], period='1d', start_time='20231111', end_time='20231115')
res['600309.SH']
可以看到,返回结果就是以股票代码为键值的字典,每个键值对应的值,是一个数据表,这样,拿到的数据就非常好处理,也便于查看。
总结
本篇文章介绍了如何通过miniQMT,下载、获取历史行情数据。当我们拿到历史数据之后,就可以进行量化分析、回测等一系列操作。
根据我的观察,miniQMT获取的数据质量和速度,还是要比网上的一些开源库强很多,更适合深入、稳定的使用。
miniQMT具体开通方法及要求,可以参看《QMT开通规则分享》