第十章:数据模块:回测的”燃料库”

兵马未动,粮草先行。在量化交易的征程中,数据就是最重要的”粮草”。没有准确、完整的历史数据,再精妙的策略也无法进行有效的回测验证。看海量化交易系统深谙此道,专门设计了功能强大的数据管理体系,确保用户在策略开发过程中拥有充足可靠的数据支撑。

10.1 数据管理体系概述

看海量化交易系统的数据管理功能经过精心设计,形成了一个完整的数据生态系统。整个数据管理体系由三大核心模块构成:本地数据管理、定时数据补充和CSV数据管理。每个模块都承担着特定的职责,相互配合,共同为量化策略的开发和回测提供坚实的数据基础。

10.1.1 核心概念辨析

在深入了解各个模块之前,首先需要明确两个容易混淆的概念:数据补充与数据下载。这两个概念虽然都涉及获取股票数据,但其目的和用途截然不同。

数据补充是指将股票的历史行情数据下载并存储到本地的二进制格式文件中,这些数据专门供系统内部的回测引擎使用。补充的数据以高效的二进制格式存储,能够快速读取和处理,是策略回测的基础。这些数据存储在userdata_mini\datadir目录下,按照交易所、周期和时间段进行分类组织。

datadir目录

datadir目录

其中包括了上交所、深交所股票、权重信息、成分股信息等等。打开“SH”文件夹可以看到有这几个子文件夹:

SH文件夹内数据

SH文件夹内数据

其中文件夹的数字代表的是秒,0文件夹中存的是tick数据,60存的是1m数据,300存的是5m数据,86400则是1d数据。再进一步打开则是DAT文件,这就是QMT的二进制数据了。

DAT数据

DAT数据

“数据下载”功能的核心在于将金融数据以独立、可见、可直接操作的 .csv 文件格式提供给用户。这种设计使得数据变得”触手可及”,为后续的分析研究铺平了道路。

  • 应用场景:
    • 直接检视数据:在Excel或文本编辑器中检查数据质量、格式及具体数值。
    • 利用外部工具分析:将数据导入Python(使用Pandas库)、R等进行复杂的统计建模或策略回测原型开发。
    • 与其他系统集成:作为标准数据格式,方便导入其他研究平台。
  • 复权处理: 该功能支持在下载时直接选择复权方式,允许用户获取基于特定复权逻辑(如前复权、后复权)的CSV数据。

csv数据文件

csv数据文件

理解这两个概念的区别至关重要。

对于大多数新手来说,你需要使用的是“数据补充”而非“数据下载”功能。在后续一些进阶的案例中,我们将会使用“数据下载”得到的CSV数据进行一些深度学习模型的训练,以演示“数据下载”功能的用法。

10.1.2 三大数据管理模块

基于上述概念,看海量化交易系统将数据管理功能划分为三个独立而又相互关联的模块:

本地数据管理模块负责查看和管理已经存储在本地的二进制格式数据。通过这个模块,用户可以直观地了解本地数据的存储情况,查看特定股票在特定时间段的详细行情数据,并进行必要的数据补充操作。这个模块就像一个数据仓库的管理员,让用户对本地数据的状况了如指掌。

定时补充数据模块实现了数据补充的自动化。用户可以设置定时任务,让系统在每个交易日的指定时间自动补充最新的行情数据。这个模块特别适合那些需要每日更新数据进行策略回测的用户,免去了手动操作的繁琐,确保数据始终保持最新状态。

CSV数据管理模块专注于数据的导出和清洗功能。通过这个模块,用户可以将需要的股票数据以CSV格式下载到本地,并使用内置的数据清洗工具处理数据中的异常值、缺失值等问题。清洗后的高质量数据可以直接用于各种数据分析场景。我还专门为该模块开发了一个可视化研究的子模块。

10.1.3 数据存储结构

了解数据的存储结构有助于更好地使用数据管理功能。miniQMT的二级制本地数据采用了层次化的目录结构来组织数据:

userdata_mini/
└── datadir/
    ├── SH/                     # 上海交易所数据
    │   ├── 0/                  # tick数据
    │   │   └── 600000/         # 股票代码文件夹
    │   │       ├── 20240101.dat
    │   │       └── 20240102.dat
    │   ├── 60/                 # 1分钟线数据
    │   │   └── 600000.dat
    │   ├── 300/                # 5分钟线数据
    │   │   └── 600000.dat
    │   └── 86400/              # 日线数据
    │       └── 600000.dat
    └── SZ/                     # 深圳交易所数据
        └── ...                 # 结构同上海交易所

在这个结构中,第一层按交易所划分(SH代表上海,SZ代表深圳),第二层按数据周期划分(0代表tick,60代表1分钟,300代表5分钟,86400代表日线)。对于tick数据,由于数据量巨大,进一步按股票代码创建子文件夹,每个交易日的数据存储为一个独立的.dat文件。而K线数据则直接以股票代码命名文件,所有时间段的数据存储在同一个文件中。

在本地管理模块的使用中,你将会对该结构有更深的了解。

10.2 本地数据管理模块

本地数据管理模块是数据管理体系的核心组件,提供了直观的界面来查看和管理存储在本地的所有历史行情数据。通过主界面工具栏中的”本地数据管理”按钮即可打开此模块。

本地数据管理模块界面

本地数据管理模块界面

10.2.1 界面布局与功能分区

本地数据管理模块采用了经典的三栏式布局设计,从左到右依次为:数据补充工具栏、数据结构树和数据内容展示区。这种布局既保证了功能的完整性,又提供了良好的操作体验。

左侧的数据补充工具栏集成了快速补充数据的功能。用户无需返回主界面,就可以直接在查看数据的同时进行数据补充操作。工具栏包含了股票池选择、周期类型选择、日期范围设置等常用功能,并配有清晰的操作按钮。

数据补充工具栏

数据补充工具栏界面

中间的数据结构树以树形结构展示了本地数据的组织层次。最顶层显示交易所(上交所、深交所),展开后可以看到各个数据周期(tick数据、1分钟线、5分钟线、日线),再次展开则显示该周期下所有有数据的股票列表。这种层次化的展示方式让用户能够快速定位到感兴趣的数据。

数据结构树

数据结构树展示

右侧的数据内容展示区是一个功能强大的表格控件,用于显示具体的行情数据。表格支持排序、筛选等操作,并且会根据数据类型自动调整列的显示。

数据内容展示区

数据内容展示区

10.2.2 数据查看操作流程

使用本地数据管理模块查看数据的操作流程设计得非常直观。首先,在中间的数据结构树中点击想要查看的交易所节点,例如”上交所”。此时节点会展开,显示该交易所下的所有数据周期。

接下来点击具体的周期节点,比如”1分钟线数据”。系统会立即在右侧的数据内容展示区显示该周期下所有股票的列表。列表中包含股票代码、股票名称、文件大小、最后修改时间等信息,让用户对数据的基本情况一目了然。

要查看某只股票的具体数据,只需在股票列表中点击对应的股票代码。系统会自动加载该股票的所有历史数据并显示在表格中。加载过程中会显示进度提示,对于数据量较大的股票,系统采用了异步加载技术,确保界面不会出现卡顿。

对于tick数据,由于其特殊的存储方式,查看流程略有不同。点击”tick数据”节点后,系统首先显示有tick数据的股票列表。点击某只股票后,会进一步显示该股票所有有数据的交易日列表。最后点击具体的日期,才会加载并显示当天的tick数据。这种分级加载的方式有效避免了一次性加载大量数据造成的性能问题。

10.2.3 数据补充功能详解

本地数据管理模块内置的数据补充功能让用户可以在查看数据的同时,方便地补充缺失的数据。数据补充工具栏提供了完整的补充功能,其操作流程经过精心优化。

股票选择是数据补充的第一步。工具栏提供了两种选择股票的方式:通过预设的股票池快速选择,或者手动添加特定股票。预设股票池包括沪深A股、创业板、科创板、中证500成分股、沪深300成分股、上证50成分股等常用分类。用户可以勾选多个股票池,系统会自动合并去重。

对于需要补充特定股票数据的情况,可以使用”添加股票”功能。点击”添加股票”按钮后,系统会弹出输入对话框,用户输入股票代码(如000001.SZ)即可。系统会自动识别股票名称并添加到股票列表中。如果需要批量添加,可以使用”导入股票”功能,从CSV文件中批量导入股票列表。

周期类型的选择决定了要补充哪种频率的数据。系统支持tick、1分钟、5分钟和日线四种周期,用户可以根据策略需求选择合适的数据周期。需要注意的是,tick数据的体积较大,补充时间较长,建议只在确实需要tick级别数据时才选择此选项。

日期范围的设置非常灵活。用户可以通过日期选择器精确指定起始日期和结束日期。系统会自动过滤非交易日,只补充有交易的日期数据。对于日内数据,还可以进一步设置时间范围,比如只补充上午或下午的数据。

完成所有设置后,点击”补充数据”按钮即可开始数据补充过程。系统会显示详细的进度信息,包括当前正在处理的股票、完成百分比、预计剩余时间等。补充过程中可以随时点击”停止补充”按钮中断操作。

需要注意,券商提供的miniQMT接口,对于不同周期的数据能够现在的时间范围不同,具体为:

tick:支持下载近一个月数据

1m/5m:支持下载近1年数据

1d:支持下载2005年以来数据

10.3 定时补充数据模块

定时补充数据模块是看海量化交易系统的一大亮点功能,它将繁琐的日常数据更新工作完全自动化。通过主界面工具栏的”定时补充数据”按钮可以打开此模块。

定时补充数据模块界面

定时补充数据模块界面

10.3.1 自动化数据更新的价值

在实际的量化交易实践中,保持数据的时效性至关重要。每个交易日结束后,都需要及时补充当天的行情数据,以便进行最新的策略回测和分析。如果依靠手动操作,不仅耗时费力,还容易因为疏忽而遗漏。

定时补充数据模块完美解决了这个问题。用户只需要进行一次性的配置,系统就会在每个交易日的指定时间自动执行数据补充任务。即使用户不在电脑前,只要电脑开机并运行程序,数据更新就会如期进行。

更重要的是,该模块具备智能识别交易日的能力。系统内置了完整的交易日历,能够自动识别周末、节假日等非交易日,避免无谓的补充操作。这种智能化的设计大大提升了系统的实用性。

10.3.2 配置界面详解

定时补充数据模块的配置界面设计得简洁而全面。界面左侧是配置区域,右侧是运行日志区域,让用户能够实时了解任务的执行情况。

定时补充配置界面

定时补充配置界面

股票池选择区域提供了与本地数据管理模块相同的股票池选项。用户可以选择一个或多个股票池,系统会自动合并处理。特别值得一提的是”自定义股票池”选项,用户可以维护一个自己关注的股票列表,系统会优先补充这些股票的数据。

周期类型选择支持多选,用户可以同时选择多个数据周期进行补充。比如同时选择1分钟线和日线,系统会依次补充这两种周期的数据。这种设计避免了需要配置多个任务的麻烦。

定时设置是整个模块的核心。用户可以设置每天执行补充任务的具体时间。建议设置在16:00以后,确保当天的交易已经结束,所有数据都已经产生。系统会在设定时间自动唤醒并执行任务。

除了定时执行,模块还提供了”立即执行一次”的功能。这在初次配置或需要临时补充数据时非常有用。点击该按钮,系统会立即按照当前配置执行一次数据补充任务。

10.3.3 任务执行与监控

当定时任务开始执行时,右侧的运行日志区域会实时显示详细的执行信息。日志采用时间戳格式,清晰记录每个操作步骤。

定时任务执行日志

定时任务执行日志示例

任务开始时,系统首先检查当天是否为交易日。如果不是交易日,会在日志中记录并跳过本次执行。如果是交易日,系统会按照配置的股票池和周期类型,逐一进行数据补充。

执行过程中,日志会显示当前正在处理的股票池、正在补充的周期类型、处理进度等信息。如果某只股票的数据补充失败,系统会记录详细的错误信息,但不会中断整个任务的执行。这种容错设计确保了个别股票的问题不会影响整体数据更新。

任务完成后,系统会生成执行摘要,包括成功补充的股票数量、失败的股票列表、总耗时等关键信息。用户可以通过这些信息快速了解任务的执行结果。

10.4 CSV数据模块:CSV数据下载

数据工具界面

CSV数据模块界面

10.4.1 设置数据存储路径

此路径仅对”数据下载”功能有效,指定生成的.csv文件存放在何处。您可以直接在输入框粘贴路径,或通过”浏览…”按钮选择。此设置会自动保存,下次无需重复设置。

💡 “数据补充”的路径

“数据补充”功能会直接将数据写入QMT的内部数据目录(通常是 userdata_mini\datadir),而不受此路径设置的影响

10.4.2 选择股票范围

系统提供了多种方式来定义您想获取数据的股票范围:

  • 预设板块/指数:直接勾选”沪深A股”、”沪深300成分股”等常用板块。
  • 自选清单:系统提供了一个便捷的”自选清单”功能。勾选此项后,直接点击加粗带下划线的”自选清单“文字,即可用记事本打开 otheridx.csv 文件,仿照其中的格式(股票代码,股票名称)编辑和保存您的常用列表。
  • 添加自定义列表:点击”添加自定义列表”按钮,可以从您的电脑中选择一个或多个已编辑好的股票列表文件。
  • 预览与管理:所有选中的列表都会显示在下方的预览框中,可随时点击”清空列表”来重新选择。

CSV文件内容示例

10.4.3 配置数据参数

  • 周期类型:支持tick1m5m1d四种。当您切换周期时,下方的”字段列表”会自动更新。
  • 复权方式:此项仅对”数据下载”有效。您可以选择”前复权”、”后复权”等,以获取计算好的复权数据csv文件。执行”数据补充”时,系统始终写入不复权的原始行情。
  • 字段选择:根据您的需求勾选要获取的数据字段。Tick周期和K线周期所支持的字段有所不同。

Tick周期字段

Tick周期可选字段

K线周期字段

K线周期可选字段

10.4.4 设定时间范围

您可以通过日历控件选择一个起止日期,并可选择是获取”全天”数据,还是”指定时间段”(如09:3010:00)的数据。当选择全天时,数据是从9:15集合竞价阶段开始下载。

10.4.5 执行任务与监控

  • 启动任务:配置完成后,点击 下载数据 按钮即可开始。
  • 监控状态:
    • 界面不阻塞:得益于多线程技术,无论是下载还是补充数据,界面都会保持流畅响应,不会出现”未响应”状态。
    • 随时中断:任务开始后,按钮会变为红色的”停止”按钮,您可以随时点击它来安全地终止当前任务。
    • 进度条:下方的进度条会实时反馈任务完成的百分比。
    • 状态栏:界面最底部的状态栏会滚动显示详细的日志信息,如”正在下载 xxx 的数据…”,或报告下载错误。

💡 下载文件命名规则

文件命名规则:
– 存储的文件名格式: “{股票代码}{周期类型}{起始日期}{结束日期}{时间段}_{复权方式}.csv”
– 示例1: “000001.SZ_tick_20240101_20240430_all_none.csv”
– 股票代码: 000001.SZ
– 周期类型: tick
– 起始日期: 20240101
– 结束日期: 20240430
– 时间段: all (表示全部时间段)
– 复权方式: none (表示不复权)
– 示例2: “000001.SZ_1d_20240101_20240430_all_front.csv”
– 复权方式: front (表示前复权)
– 如果指定了具体的时间段,时间段部分将替换为 “HH_MM-HH_MM” 的格式
– 示例: “000001.SZ_1m_20240101_20240430_09_30-11_30_none.csv”
– 时间段: 09_30-11_30 (表示 09:30 到 11:30 的时间段)
– 复权方式有以下几种:
– ‘none’: 不复权,使用原始价格
– ‘front’: 前复权,基于最新价格进行前复权计算
– ‘back’: 后复权,基于首日价格进行后复权计算
– ‘front_ratio’: 等比前复权,基于最新价格进行等比前复权计算
– ‘back_ratio’: 等比后复权,基于首日价格进行等比后复权计算


10.5 CSV数据模块:数据清洗

数据清洗模块可以说是和历史数据下载模块是一体的,它用于修正您已下载到本地的.csv文件。

10.5.1 待清洗的文件夹选择

此路径会自动与左侧”数据下载”模块的路径相关联,同时也可以手动修改,以增加该模块使用的便捷性和灵活性。

10.5.2 选择清洗操作

此处按需勾选需要执行的清洗任务。

⚠️ 注意

  • “移除异常值”应该慎重选择,因为它可能会剔除一些极端但有效的行情。
  • 点击”开始清洗”后,程序会直接在原数据上进行修改,即清洗后的数据将覆盖原数据。请务必提前备份重要数据。

10.5.3 清洗结果日志

程序会生成详细的清洗日志,以便用户确认清理的数据是否符合预期。

日志内容包括:

  • 处理文件的总数量
  • 每个文件的具体处理情况(如缺失值填充数量、重复数据删除数量等)
  • 被删除数据的具体内容,以便核对
  • 清洗完成的时间戳

如果想保存所有日志信息,可以点击”保存清洗日志”按钮,将报告导出为.txt文件。


10.6 详细操作指南:数据可视化工具

可视化模块主要为了做两件事:
第一,确认一下下载的数据的总体概况,比如总共有多少只股票的数据、占用的空间等基本信息。
第二,任意选取其中的某一只股票,绘制其数据文件中的各类数据的图线,也就是数据的可视化。

10.6.1 可视化模块与主界面的衔接

该功能作为工具模块内置于平台中,通过数据中心顶部的工具栏调用。点击第一个图标,即可弹出此可视化界面。

特别值得一提的是,该模块实现了与主界面的智能联动。它会自动继承主界面当前的数据文件夹路径,这意味着用户在下载完数据后可以直接点击图标进行分析,无需重复设置路径。当然,用户也可以通过界面上的”浏览…”按钮随时切换到其他数据文件夹。

10.6.2 文件信息统计

它能自动扫描文件夹,解析每个文件名,并提供全面的数据概览,帮助快速核实数据完整性。

统计信息包括:

  • 基础信息:股票总数、文件总大小
  • 市场分布:深市、沪市、北交所的股票数量统计
  • 数据特征:数据周期类型(tick、1m、5m、1d等)
  • 时间范围:数据的起止日期
    这些信息直观地展示在界面右上角,帮助用户快速了解数据集的基本特征。这个功能特别适合在批量下载数据后使用,可以帮助快速核实数据的完整性。

10.6.3 智能可视化展示

系统会根据数据特征自动调整显示模式:

  • 股票选择:在”股票”下拉菜单中,系统会自动将股票代码解析为股票名称。
  • 日期选择:如果数据是tick、1m或5m级别,会自动生成一个日期选择菜单。
  • 智能降采样:当数据量过大时,系统会自动降采样以保证图表响应流畅。

日线数据展示

10.6.4 交互功能与用户体验

为了提供更好的数据分析体验,系统实现了丰富的交互功能:

  • 通过鼠标框选来放大查看特定时间段的数据。
  • 右键点击可快速重置视图。
  • 鼠标悬停会显示该点的详细数据信息。
  • 点击图例可隐藏/显示对应数据曲线。

鼠标悬停显示详细数据

窗口局部缩放

这个可视化模块虽然看似简单,但在实现过程中考虑了很多实用性的细节。它既可以用来验证数据完整性,也能支持初步的技术分析。

10.7 数据管理最佳实践

经过对三大数据管理模块的详细介绍,我们可以总结出一套数据管理的最佳实践流程。这个流程能够帮助用户高效地管理数据,为策略开发提供可靠的数据支撑。

10.7.1 初始数据准备

对于新用户,首次使用系统时需要进行初始数据准备。建议按照以下步骤操作:

首先,使用本地数据管理模块查看当前的数据存储情况。了解已有哪些股票的数据,数据的时间范围是否满足需求。这一步帮助用户对数据现状有清晰的认识。

其次,根据策略开发需求,确定需要补充的数据范围。一般建议至少准备最近2-3年的日线数据,如果策略需要更细粒度的分析,再补充相应的分钟线数据。tick数据由于体积巨大,建议只对重点研究的股票进行补充。

然后,使用数据补充功能进行批量数据补充。可以先补充主要指数和蓝筹股的数据,确保补充流程正常,再扩展到更多股票。补充过程中注意观察日志,及时处理可能出现的问题。

最后,补充完成后,使用数据质量检查功能验证数据的完整性和准确性。发现问题及时重新补充或手动修正,确保数据质量达到策略回测的要求。

10.7.2 日常数据维护

完成初始数据准备后,需要建立日常数据维护机制,确保数据始终保持最新状态。

配置定时补充任务是最重要的一步。建议将补充时间设置在每个交易日的16:00之后,此时当天的交易已经结束,数据已经完整。选择需要定时更新的股票池和数据周期,一般日线数据是必选的,tick数据根据策略需求决定。

定期检查定时任务的执行日志。虽然系统会自动执行任务,但仍需要定期查看是否有异常情况。特别是在网络环境发生变化或系统更新后,要确认任务是否正常运行。

每月进行一次数据完整性检查。使用本地数据管理模块的批量检查功能,确认所有股票的数据都是连续和完整的。对于发现的数据缺口,及时进行补充。

建立数据备份机制。虽然系统的数据存储很可靠,但定期备份重要数据仍然是个好习惯。可以将整个datadir目录定期备份到其他存储设备。

10.7.3 数据分析工作流

当需要进行深入的数据分析时,CSV数据管理模块提供了完整的工作流支持。

确定分析目标和所需数据。明确需要分析哪些股票、什么时间段、需要哪些字段。这一步的明确性直接影响后续工作的效率。

使用数据下载功能导出所需数据。根据分析工具的要求选择合适的导出模板。如果使用Python进行分析,可以包含更多的原始字段;如果使用Excel,则选择关键字段即可。

运行数据清洗工具处理导出的数据。即使是高质量的原始数据,在特定的分析场景下也可能需要进一步清洗。比如某些分析不需要停牌日的数据,可以在清洗时过滤掉。

清洗完成后,数据就可以导入外部分析工具了。保持良好的文件命名和目录组织习惯,便于后续查找和复用。分析完成后,有价值的结果可以保存为策略代码或研究报告,形成知识积累。

通过遵循这套完整的数据管理流程,用户可以建立起高效、可靠的数据处理体系,为量化策略的开发提供坚实的数据基础。数据管理虽然是幕后工作,但其重要性不言而喻。只有拥有了优质的数据,才能开发出真正有效的量化策略。

风险提示

投资有风险,开户需谨慎。本系统仅为投资者提供量化交易相关的数据处理与分析工具,不构成任何投资建议。 请您在审慎思考后作出选择。特别声明:本系统对您与券商之间的交易、合作不承担任何法律责任。 市场有风险,投资需谨慎。

© 2024 看海量化交易系统 版权所有

官网:www.khsci.com/khQuant