我是Mr.看海,我在尝试用信号处理的知识积累和思考方式做量化交易,目的是实现财务自由~

书接上回。

这篇开始正式介绍我开发的量化交易系统,量化交易的第一步就是获取历史数据,用于后续的数据处理、训练以及回测。

在QMT系统中其实是可以下载历史数据的,但是导出数据只能选择日线,无法导出tick、1m和5m等等分时数据,所以无法依托这个模块为后续我想做的量化交易系统提供输入。况且考虑后续系统的完整性,数据下载模块就撸起袖子自己干了!

完整版QMT的数据导出模块

一、关于API接口

由于我采用的是MiniQMT的框架方案,MiniQMT中提供了XtQuant服务,该服务中包含行情模块和交易模块。

Xtdata 作为行情模块,本模块旨在提供精简直接的数据满足量化交易者的数据需求,主要提供行情数据(历史和实时的K线和分笔)、财务数据、合约基础信息、板块和行业分类信息等通用的行情数据。
Xttrader 作为交易模块,封装了策略交易所需要的 Python API 接口,可以和MiniQMT客户端交互进行报单、撤单、查询资产、查询委托、查询成交、查询持仓以及接收资金、委托、成交和持仓等变动的主推消息。

在数据下载模块中,我们要用的就是行情模块Xtdata。

历史数据下载可以使用download_history_data方法,然后通过get_local_data读取到本地。调用方式可参考下列代码:

# 下载数据到本地
xtdata.download_history_data(stock, period=period_type, start_time=start_date, end_time=end_date)
        
# 从本地读取数据
data = xtdata.get_local_data(field_list=["time"] + field_list, stock_list=[stock], period=period_type, start_time=start_date, end_time=end_date)

接口支持下载tick数据,也就是分笔数据,分笔数据支持的字段如下:

tick数据字段列表

如果下载的是1m / 5m / 1d 的K线数据,支持的字段会更少一些,具体包括:

1m / 5m / 1d 数据字段列表

其实还可以下载除权数据、财务数据等,但是目前阶段这些先不考虑纳入我们的系统,后续有需要再做拓展。

二、数据下载模块

下边讲一讲该模块的设计思路以及主要功能,先放一下完整的界面截图。

1.设置数据存储路径

这里没有太多可说的,选好路径之后数据将会下载到这个文件夹当中。

2.设置需要下载的股票列表

我考虑通过导入股票清单的方式来设置需要下载的股票是比较简易的一种方式,我设定的是导入csv格式的文件,文件中写上股票代码和股票名称,就像下图。

csv文件中的内容示例

对应的这部分的界面如下,支持导入多个csv文件,这样就可以预设多个文件,比如沪深300股票清单存一个csv文件,上证50存成一个,还可以存一些自己特挑的股票,然后一股脑地导入进来。

3.周期类型和字段选择

周期类型可以选择tick、1m、5m和1d四种,这也是接口支持的几种类型。

需要注意,选择tick类型和选择其他类型周期,对应可选的字段列表是不同的,当选择tick时,有以下16种可选的字段。

当选择其他类型周期时,可选以下11种字段。字段列表会根据选择的周期类型自动显示不同的列表。

4.日期范围、时间段选择

可以选择起始和结束的日期范围,可以通过图形界面自由点选。

时间段可以设置全天,也可以指定时间段。

5.进度条

根据实测,如果设置需要下载的股票数量多、时间跨度长,那么程序需要运行的时间还是蛮长的。

因此设置一个数据下载进度条也是十分有必要的。效果如下图。

6.状态提示

软件运行的状态需要及时掌握,就像上图中的“正在下载数据...”,这个位置是软件的最底部,也是状态显示栏。

一些报错信息也会在这里显示,就像这样:

当然,为了更醒目地提示报错信息,当运行存在故障时,将会有弹窗提醒。

7.MiniQMT服务链接状态显示

使用XtQuant的程序时需要保证MiniQMT客户端处于运行状态,为此我在模块中加入了链接服务状态显示,也就是软件界面右上角的提示灯。对了,我在模块中内置了启动MiniQMT的指令,一键启动非常方便。

绿色代表成功链接

红色代表未成功链接

8.帮助文档

点击界面右上角的问号,将会弹出简易的帮助文档,给大家提供一些快捷的提示。

9.成功下载数据文件

一切设置完成并点击下载数据后,期望中的数据文件将会一个个地存到指定路径当中,每只股票将会存成一个csv文件。

对于下载的数据文件名,我特地规范了其命名,之所以这样做,是为了后续在读取数据的过程中,能够通过文件名得到这段数据的基本信息。命名规则设定如下:

 文件命名规则:
    - 存储的文件名格式: "{股票代码}_{周期类型}_{起始日期}_{结束日期}_{时间段}.csv"
    - 示例: "000001.SZ_tick_20240101_20240430_all.csv"
      - 股票代码: 000001.SZ
      - 周期类型: tick
      - 起始日期: 20240101
      - 结束日期: 20240430
      - 时间段: all (表示全部时间段)
    - 如果指定了具体的时间段,时间段部分将替换为 "HH_MM-HH_MM" 的格式。
      - 示例: "000001.SZ_tick_20240101_20240430_09_30-11_30.csv"
      - 时间段: 09_30-11_30 (表示 09:30 到 11:30 的时间段)

下载完成后的文件夹内容就像这样:

打开第一个文件,其中的数据内容就像这样:

结语

至此数据下载模块就完成了,其中尽可能考虑了功能的全面性和易用性,并且为后续模块开发使用和衔接留下了充分的空间。

我是Mr.看海,我在尝试用信号处理的知识积累和思考方式做量化交易,目的是实现财务自由~

感谢大家的关注,欢迎关注我的公众号“看海的城堡”,微信号“khscience”。

往期内容

Mr.看海:【深度学习量化交易1】一个金融小白尝试量化交易的设想、畅想和遐想

Mr.看海:【深度学习量化交易2】财务自由第一步,三个多月的尝试,找到了最合适我的量化交易路径

更多推荐