• 【miniQMT实盘量化3】获取历史行情数据


    前言

    上篇文章,介绍了如何与miniQMT建立连接,这篇开始,我们会深入探讨miniQMT的每个功能接口。首先,从获取历史数据开始。

    迅投的官方文档目前已经更新,miniQMT对应原生API部分

    接口汇总

    与历史行情数据相关的接口,且文档上写的,有以下几个:

    xtdata.download_history_data()
    xtdata.download_history_data2()
    xtdata.get_market_data()
    xtdata.get_local_data()
    
    • 1
    • 2
    • 3
    • 4

    下面就逐一阐述每个接口。

    下载数据

    在miniqmt的逻辑里,使用历史数据,需要先下载历史数据,所以,我们先介绍两个下载历史数据的接口。

    download_history_data

    这是单股数据下载接口,具体使用如下

    xtdata.download_history_data(stock_code='002358.SZ', period='1d', start_time='20230101', end_time='20231115')
    
    • 1

    此接口有四个参数:

    • 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)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    运行结果如下,可以用回调来监听进度

    在这里插入图片描述

    获取数据

    关于数据获取,主要有两个方法:get_market_dataget_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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    在这里插入图片描述

    例子中的参数,跟下载接口是一样的,但这个接口有几个缺省参数,没有特殊需要可以不传,下面逐一说明。

    • 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']
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    在这里插入图片描述
    可以看到,返回结果就是以股票代码为键值的字典,每个键值对应的值,是一个数据表,这样,拿到的数据就非常好处理,也便于查看。

    总结

    本篇文章介绍了如何通过miniQMT,下载、获取历史行情数据。当我们拿到历史数据之后,就可以进行量化分析、回测等一系列操作。

    根据我的观察,miniQMT获取的数据质量和速度,还是要比网上的一些开源库强很多,更适合深入、稳定的使用。

    miniQMT具体开通方法及要求,可以参看《QMT开通规则分享》

  • 相关阅读:
    2023NOIP游寄
    DAY04-网页布局实战&常用HTML标签&完整盒模型
    为什么多级页表比单级页表更节省内存?
    【数据结构】树和二叉树的概念及结构(一)
    Centos7 安装部署Kubernetes(k8s)集群实现过程
    ExtJS 数据处理-Associations(关联)
    【C++编程语言】之STL常用算法之 排序算法 sort()函数 random_shuffle()函数 merge()函数 reverse()函数
    自定义注解、数字字典注解
    JavaScript
    花了一周时间,更新了下软考云题库Web版
  • 原文地址:https://blog.csdn.net/u010214511/article/details/134395748