2.5 本地数据管理模块

一、为什么需要本地数据管理

在量化交易的策略开发过程中,数据是一切分析与回测的基础。然而,依赖在线数据源进行回测时,您可能会遇到以下诸多痛点:

1. MiniQMT数据源的局限性

传统的回测方式依赖MiniQMT作为数据源,虽然MiniQMT提供了丰富的行情数据接口,但在实际使用中存在诸多限制:

  • 依赖MiniQMT登录状态:回测前必须启动MiniQMT客户端并保持登录状态。周末或节假日期间,MiniQMT服务器可能会进行维护,导致无法获取数据,回测工作被迫中断。
  • 本地DAT文件格式封闭:MiniQMT将行情数据以二进制DAT格式存储在本地,这种格式是封闭的、不可读的,用户无法直接访问和解析,只能通过MiniQMT的API间接读取。
  • 数据读取效率不高:每次回测都需要通过MiniQMT的API逐笔读取数据,尤其在查询大量股票或长时间段数据时,效率较低,速度较慢。
  • 难以进行数据管理:由于DAT格式的封闭性,用户很难高效地知道本地已有哪些数据、缺失哪些数据,在进行增量补充断点续传数据完整性检测等操作时存在明显障碍。

2. DuckDB本地存储的优势

为了彻底解决上述问题,看海量化V3.2版本引入了基于DuckDB的本地数据存储与管理模块。相比MiniQMT的DAT格式,DuckDB为您的策略回测带来了质的飞跃:

  • 脱离MiniQMT依赖:数据一次性导入后,后续回测完全不依赖MiniQMT登录状态,周末维护期间也可正常回测,真正实现离线可用。
  • 开放的数据格式: DuckDB是开源的列式数据库,数据存储格式透明,用户可以自由访问、查询、导出,完全掌控自己的数据。
  • 高效的查询性能:相比MiniQMT的DAT格式,DuckDB的列式存储和索引机制使得查询速度大幅提升,尤其在处理大量股票和长时间段数据时,性能优势明显。
  • 完善的数据管理: DuckDB天然支持SQL查询,可以轻松实现数据完整性检测、缺失数据识别、增量补充、断点续传等高级功能,告别DAT格式的”黑盒”状态。
  • 一次导入,永久使用:数据长期保存在本地硬盘,避免重复下载,节省时间和网络流量。

3. 模块定位

本地数据管理模块的核心目标是:为策略回测提供高性能、高可靠性的本地数据支撑。通过一次性导入历史行情数据,构建属于您自己的本地数据库,从而在后续的回测工作中,享受极速的数据访问体验,专注于策略逻辑的优化与改进。


二、快速入门:启动数据管理器

1. 功能入口

在开始使用本地数据管理模块前,需要先在主界面的设置中切换数据源为DuckDB:

  1. 在看海量化主界面顶部菜单栏,点击【设置】按钮,打开设置对话框,点击【客户端设置】。
  2. 在设置界面中找到“数据源选择”配置项。
  3. 将数据源从默认的”MiniQMT在线数据”切换为“DuckDB本地数据库”
  4. 点击【确定】保存设置。

    完成数据源切换后,点击工具栏的【数据管理】,即可打开本地数据管理器窗口。

2. 界面总览

数据管理器的界面布局清晰,分为以下几个区域:

  • 工具栏:位于窗口顶部,包含三大核心功能按钮:
    • 从MiniQMT导入数据】:从在线数据源批量导入历史行情。
    • 定时补充】:设置定时任务,自动补充最新数据。
    • 统计信息】:查看本地数据库的整体状态和存储情况。
  • 左侧面板:股票树形列表,按市场(上海、深圳、北京)分组展示已导入的股票,并显示每只股票已有的数据周期及条数。

  • 右侧面板:分为上下两部分:

    • 上半部分:查询条件设置区域,可选择股票代码、周期、日期范围、复权类型等。
    • 下半部分:查询结果展示区域,以表格或图表形式展示数据。
  • 状态栏:位于窗口底部,显示操作进度条和实时提示信息。

3. 第一次使用:数据目录配置

在首次使用本地数据管理模块前,需要先配置数据根目录,这是本地数据库存储的位置。

配置步骤

  1. 在看海量化主界面顶部菜单栏,点击【设置】按钮,打开设置对话框。
  2. 在设置界面中找到“DuckDB数据路径”配置项。
  3. 点击【浏览】按钮,选择一个磁盘空间充足的目录作为数据存储路径。
    • 默认路径为软件安装目录下的./stock_data文件夹。
    • 强烈建议选择非系统盘(如D:\stock_dataE:\stock_data)以节省C盘空间。
  4. 点击【确定】保存设置。

重要提示:全量数据下载完毕后,数据库体积可能超过100GB(包含全市场股票的日线+分钟线+5分钟线数据)。如果还需要导入Tick数据,存储空间会更大。因此,强烈建议所选路径所在磁盘有至少200GB以上的可用空间,避免后续存储空间不足。

首次打开数据管理器

配置好数据路径后,点击【工具】→【数据管理】打开数据管理器:

  • 初始状态下,数据库为空,左侧股票树和右侧查询面板均无内容。
  • 系统会在数据根目录下自动创建市场文件夹(SH/SZ/BJ/)和元数据库文件(metadata.db)。
  • 您需要先通过【从MiniQMT导入数据】功能导入数据,才能开始使用查询等功能。

三、工具栏功能详解

工具栏的三大功能按钮是数据管理器的核心操作入口。下面逐一详细介绍它们的使用方法。

3.1 从MiniQMT导入数据

功能说明

从MiniQMT导入数据】是最常用的功能,它允许您从在线数据源(MiniQMT)批量导入历史行情数据到本地数据库。导入对话框提供两种导入模式,分别适用于不同的使用场景。

前置条件

在使用此功能前,请确保MiniQMT客户端已启动并成功登录(由您的券商提供)。如果未启动MiniQMT或未登录,导入时会提示”无法连接MiniQMT”,请先启动并登录MiniQMT客户端。

打开导入对话框

点击工具栏的【从MiniQMT导入数据】按钮,弹出导入对话框。对话框顶部有两个Tab页选项卡:

  1. 全量增量补充:一键扫描所有预设板块,自动补充缺失数据,适合日常维护和大规模数据更新。
  2. 自定义补充数据:灵活选择股票池和数据范围,适合针对性导入特定股票或时间段的数据。


模式一:全量增量补充

适用场景:

  • 首次导入,需要建立完整的本地数据库。
  • 定期维护,自动检测并补充缺失的数据段。
  • 大规模数据更新,覆盖全市场股票。

功能特点:

  • 预设板块全覆盖:自动扫描沪深A股、上证A股、深证A股、沪深300、上证50、中证500、创业板、科创板、沪深ETF、沪深转债、T0型ETF、常用指数等12个预设板块,覆盖数千只股票。
  • 智能缺失检测:系统自动检测每只股票在指定时间范围内的缺失数据段,只下载缺失部分,避免重复下载。
  • 断点续传:支持中途停止,下次启动时可继续上次未完成的任务,无需从头开始。

操作步骤:

步骤1:切换到”全量增量补充”Tab页

打开导入对话框后,默认显示”全量增量补充”页面(如果不是,请点击顶部Tab页切换)。

步骤2:设置数据周期和时间范围

对话框提供4种数据周期,每种周期可独立设置起止日期:

  • 日线(1d):
    • 默认时间范围:近10年(如2015-01-01至2025-01-05)
    • 默认勾选:✅
    • 说明:数据量小,建议全量导入
  • 1分钟(1m):
    • 默认时间范围:近1年(如2024-01-01至2025-01-05)
    • 默认勾选:✅
    • 说明:数据量较大,建议按需设置时间范围
  • 5分钟(5m):
    • 默认时间范围:近1年(如2024-01-01至2025-01-05)
    • 默认勾选:✅
    • 说明:数据量中等,适合短周期策略
  • Tick数据:
    • 默认时间范围:近1个月(如2024-12-05至2025-01-05)
    • 默认勾选:❌(数据量极大,默认不导入)
    • 说明:仅在高频策略开发时勾选

您可以根据实际需求调整每种周期的起止日期,或取消勾选不需要的周期。

步骤3:开始扫描并补充

点击【开始扫描并补充】按钮(绿色醒目按钮),系统开始执行以下流程:

  1. Phase 1 – 扫描阶段:遍历所有预设板块,获取股票列表。
  2. Phase 2 – 检测阶段:逐一检测每只股票在各周期的数据完整性,识别缺失数据段。
  3. Phase 3 – 下载阶段:并行下载缺失的数据,并保存到本地数据库。

步骤4:进度监控

导入过程中,界面实时显示以下信息:

  • 总进度条:显示整体完成百分比。
  • 状态标签:显示当前阶段(如”Phase 1: 扫描板块”、”Phase 2: 检测缺失”、”Phase 3: 下载数据”)。
  • 任务统计:显示总任务数、已完成数。
  • 倒计时估算:显示剩余时间(ETA)。
  • 执行日志:实时滚动显示详细的下载日志,包括成功、失败、跳过等信息。

步骤5:中途停止与恢复

  • 如需中途停止,点击【停止】按钮,系统会保存当前进度到full_increment_progress.json文件。
  • 下次打开导入对话框时,如检测到进度文件,会自动提示是否继续上次未完成的任务。点击【继续】即可断点续传,无需从头开始。

步骤6:完成

所有任务完成后,点击【关闭】按钮退出对话框。左侧股票树会自动刷新,显示新导入的数据。

【截图占位】:全量增量补充页面,展示周期设置和进度信息。


模式二:自定义补充数据

适用场景:

  • 针对性导入特定股票池(如仅导入沪深300成分股)。
  • 补充特定时间段的数据(如只补充2024年的数据)。
  • 测试导入流程(先导入少量股票验证)。

功能特点:

  • 灵活选股:支持三种选股方式 —— 预设板块、从文件导入、手动输入。
  • 精准控制:可自由设置股票范围、周期类型、日期范围。
  • 快速验证:适合小规模测试,避免大规模下载浪费时间。

操作步骤:

步骤1:切换到”自定义补充数据”Tab页

打开导入对话框后,点击顶部的”自定义补充数据”Tab页切换到此模式。

步骤2:选择股票

对话框提供三种选股方式,通过单选按钮切换:

方式1:预设板块(默认)

  • 勾选需要导入的板块,如【沪深300】、【上证50】、【沪深ETF】等。
  • 可同时勾选多个板块,系统会合并去重后导入。
  • 适合按板块批量导入。

方式2:从文件导入

  • 点击【浏览…】按钮,选择一个CSV文件,文件中每行一个股票代码。
  • CSV文件格式示例:
    000001.SZ
    600000.SH
    300750.SZ
    
  • 适合已有股票池清单文件的用户。

方式3:手动输入

  • 在文本框中手动输入股票代码,每行一个。
  • 支持纯数字(如000001)或带市场后缀(如000001.SZ)。
  • 示例:
    000001.SZ
    600000
    300750
    
  • 适合少量股票的快速导入或测试。

步骤3:选择数据周期

勾选需要导入的周期:

  • 日线(1d)
  • 1分钟(1m)
  • 5分钟(5m)
  • Tick数据

可多选,系统会依次导入选中的周期。

步骤4:设置日期范围

  • 起始日期:数据导入的开始时间,例如2021-01-01
  • 结束日期:数据导入的结束时间,例如2024-12-31

建议:根据回测需求设置,避免导入过多无用数据。例如,回测只需近3年数据,就无需导入更早的数据。

步骤5:开始导入

点击【开始导入】按钮,系统启动多进程并行下载。

步骤6:进度监控

导入过程中,对话框实时显示:

  • 总进度条:显示整体完成百分比,如”45% (23/50)”。
  • 状态标签:显示当前导入状态。
  • 倒计时估算:显示剩余时间(ETA)。
  • 详细日志窗口:实时滚动显示每只股票的导入状态:
    • 成功:”600000 浦发银行 1d: 成功导入 1250 条”
    • 失败:”000001 平安银行 1d: 失败,数据源无数据”
    • 跳过:”600009 上海机场 1d: 已存在,跳过”

步骤7:完成导入

所有股票导入完毕后,进度条显示100%,点击【关闭】按钮退出对话框。左侧股票树会自动刷新。


3.2 定时补充数据

功能说明

定时补充】功能允许您设置定时任务,让系统在指定时间自动检测并补充最新的交易日数据。这对于需要长期使用本地数据库的用户来说,是非常实用的日常维护功能。

使用场景

  • 日常维护:每个交易日收盘后(如16:00),自动更新当日最新数据,保持本地数据库与市场同步。
  • 保持同步:避免手动导入的繁琐,确保本地数据库始终处于最新状态,随时可用于回测。

操作方式

步骤1:打开定时补充设置

点击工具栏的【定时补充】按钮,弹出定时任务设置对话框。

步骤2:配置定时任务

  • 执行时间:选择每日执行的时间点,建议设置为15:30(A股收盘后),确保当日数据已生成。
  • 股票范围:选择要补充数据的股票:
    • 【全部股票】:补充本地数据库中所有已导入股票的最新数据。
    • 【指定股票池】:仅补充特定股票池的数据,节省时间。
  • 补充周期:勾选要补充的周期(1d/1m/5m),可多选。

步骤3:保存设置

点击【确定】保存设置。系统会在每日指定时间自动运行补充任务。

补充策略

  • 当日数据更新:定时补充任务会在每日指定时间自动下载当日最新的交易数据,确保本地数据库与市场同步。系统会针对所选股票池,获取当日的最新行情数据并存储到本地数据库。

  • 自动执行:任务在设定的时间点自动触发,无需手动操作。系统会智能跳过非交易日(周末、节假日),仅在交易日执行数据补充。

  • 最小化到托盘:在定时任务运行期间,点击数据管理器的【关闭】按钮,可以选择将窗口最小化到系统托盘,让任务在后台静默运行,不干扰您的正常使用。任务完成后,会在日志中记录补充结果。

提示:定时补充功能依赖于MiniQMT客户端的持续在线。如果MiniQMT未启动或未登录,补充任务会失败。


3.3 统计信息

功能说明

统计信息】功能提供了本地数据库的整体状态概览,帮助您快速了解数据库的覆盖范围、存储空间占用情况等关键信息。

操作方式

点击工具栏的【统计信息】按钮,弹出统计信息对话框。

展示内容

1. 总体统计

  • 总股票数量:本地数据库中已导入的股票总数,例如”总股票数:327″。
  • 总存储大小:数据库文件占用的磁盘空间,自动换算为MB或GB,例如”总存储大小:1.25 GB”。

2. 市场分布

按市场分组统计股票数量:

  • 上海市场(SH):如”上海:180只(55%)”。
  • 深圳市场(SZ):如”深圳:140只(43%)”。
  • 北京市场(BJ):如”北京:7只(2%)”。

3. 周期统计

按数据周期统计已导入数据的股票数量:

  • 日线(1d):如”日线:327只”。
  • 分钟线(1m):如”分钟线:50只”。
  • 5分钟线(5m):如”5分钟线:0只”。
  • Tick数据:如”Tick:0只”。

用途

  • 了解覆盖范围:快速查看本地数据库已覆盖哪些股票、哪些周期,便于规划后续导入工作。
  • 规划存储空间:根据总存储大小,评估是否需要清理旧数据或扩容磁盘空间。例如,如果发现数据库已占用数十GB,但回测只需要近3年数据,可以考虑删除更早的数据以释放空间。
  • 确认数据完整性:例如,如果您预期导入了100只股票的日线数据,但统计显示只有90只,说明有10只股票导入失败或被跳过,需要进一步检查。

四、数据查询与管理

数据导入完成后,就可以利用数据管理器的查询功能,随时浏览、检查和导出本地数据了。

4.1 数据浏览与查询

4.1.1 左侧股票树导航

树形结构

左侧的股票树以三级树状结构组织数据:

  • 一级节点:市场分组,如”SH(上海)”、”SZ(深圳)”、”BJ(北京)”。
  • 二级节点:股票代码和名称,例如”600000 浦发银行”、”000001 平安银行”。
  • 三级节点:该股票已有的数据周期及条数,例如:
    • “1d (1250条)”
    • “1m (48000条)”
    • “5m (0条)” —— 表示尚未导入5分钟线数据

快速浏览

  • 展开/折叠:点击节点前的三角图标,展开或折叠下级节点。
  • 点击加载:点击某个周期节点(如”1d (1250条)”),右侧查询面板会自动加载该股票该周期的全部数据,无需手动设置查询条件。这是快速预览数据的最便捷方式。

4.1.2 搜索功能

位置:左侧面板顶部的搜索框。

功能:输入股票代码或名称,实时筛选匹配的股票,帮助您快速定位目标股票。

示例:

  • 输入”平安“,股票树会自动筛选并高亮显示所有名称中包含”平安”的股票,如”平安银行”、”中国平安”等。
  • 输入”600“,股票树会显示所有代码以”600″开头的沪市股票。

提示:搜索支持模糊匹配,输入部分代码或名称即可。清空搜索框后,股票树恢复显示所有股票。

4.1.3 右侧查询面板

右侧查询面板分为条件设置区结果展示区两部分。

查询条件设置

  • 股票代码:下拉选择已导入的股票,或手动输入股票代码。
    • 下拉框会列出所有已导入的股票,格式为”600000 浦发银行”。
  • 周期选择:选择要查询的数据周期:
    • 1d:日线数据
    • 1m:分钟线数据
    • 5m:5分钟线数据
    • tick:逐笔成交数据(Tick数据)
  • 日期范围:
    • 起始日期:查询的开始时间,例如2024-01-01
    • 结束日期:查询的结束时间,例如2024-12-31
    • 留空:如果留空,则查询该股票的全部数据。
  • 复权类型(仅K线数据,即1d/1m/5m):
    • 不复权(none):原始价格,未经任何调整。
    • 前复权(front):以当前价格为基准,向历史调整,保持当前价格真实。
    • 后复权(back):以上市价为基准,向未来调整,保持历史价格真实。
    • 等比前复权(front_ratio):在前复权基础上保持相对涨跌幅不变。
    • 等比后复权(back_ratio):在后复权基础上保持相对涨跌幅不变。
    • (复权详解请参见”五、高级特性说明”部分)
  • 字段筛选(可选):可勾选只显示特定字段,例如仅显示开、高、低、收、量,减少数据传输量,加快查询速度。

  • 查询】按钮:点击后执行查询,结果显示在下方的结果展示区。

查询结果展示

查询结果以Tab页的形式展示:

  • 数据表格Tab页:
    • 以表格形式展示查询结果,每行代表一条数据记录。
    • 列头显示字段名,如time(时间)、open(开盘价)、high(最高价)、low(最低价)、close(收盘价)、volume(成交量)等。
    • 支持上下滚动浏览,如果数据量大,可使用滚动条快速翻页。
  • 统计信息Tab页:
    • 显示该股票该周期的数据统计,包括:
      • 数据条数:如”共 1250 条记录”。
      • 时间范围:如”最早:2021-01-04,最晚:2024-12-31″。
      • 价格统计:如”最高价:15.68,最低价:8.45″。


4.2 数据完整性检查

功能位置

查询面板中的【完整性检查】按钮,位于查询条件设置区的底部。

功能说明

数据完整性检查是一个非常实用的功能,用于检测指定时间范围内是否存在缺失的交易日数据。这对于确保回测数据的完整性至关重要。

检测原理

  • 系统首先生成目标时间范围内的所有交易日列表(自动排除周末和法定节假日,使用中国A股交易日历)。
  • 然后对比本地数据库中已有的日期。
  • 最后找出缺失的交易日,并计算完整性百分比。

详细操作步骤

步骤1:选择股票和周期

在查询面板中,选择要检查的股票代码和周期(1d/1m/5m)。

步骤2:设置目标时间范围

  • 起始日期:检查范围的开始时间,例如2024-01-01
  • 结束日期:检查范围的结束时间,例如2024-12-31

提示:建议设置为您的回测时间范围,确保回测所需数据完整。

步骤3:点击【完整性检查】

点击【完整性检查】按钮,系统开始检测。

步骤4:查看检查结果

弹窗显示检查结果,包括:

  • 已有数据日期:列出本地数据库中已存在的所有交易日,例如:
    2024-01-02, 2024-01-03, ..., 2024-12-30, 2024-12-31
    
  • 缺失数据日期:列出缺失的交易日,例如:
    2024-03-15, 2024-03-18, 2024-03-19, ...(共12个交易日)
    
  • 完整性百分比:已有数据占应有数据的比例,例如:
    数据完整性:95% (238/250个交易日)
    缺失:12个交易日
    

后续操作

  • 如果发现缺失数据,您可以记录缺失的日期范围,然后通过【从MiniQMT导入数据】功能,精准设置缺失日期范围进行补充。

  • 建议:在回测前,对股票池中的所有股票逐一执行完整性检查,确保数据100%完整。这样可以避免回测过程中因数据缺失导致的异常结果。


4.3 数据导出

功能位置

查询面板中的【导出CSV】按钮,位于查询条件设置区的底部。

导出内容

导出的是当前查询结果,即您在查询面板中设置条件后查询到的数据。

操作步骤

步骤1:执行数据查询

首先在查询面板中设置好查询条件(股票、周期、日期范围、复权类型等),点击【查询】,获取想要导出的数据。

步骤2:点击【导出CSV】

点击【导出CSV】按钮,弹出导出设置对话框。

步骤3:设置导出选项

  • 选择字段:勾选要导出的字段。可以全选(导出所有字段),也可以只选择部分字段(如仅导出时间、开、高、低、收、量)。

  • 保存路径:点击【浏览】按钮,选择保存路径和文件名,例如D:\export\600000_1d_2024.csv

步骤4:确定导出

点击【确定】,系统开始导出。导出完成后,弹窗提示”导出成功”,并显示文件路径。

用途

  • 导出到Excel:CSV文件可直接用Excel打开,进行进一步的数据分析、图表制作等。
  • 用于外部工具:如Python、R、MATLAB等,进行自定义的数据分析或机器学习建模。
  • 数据备份:将本地数据库中的重要数据导出备份,防止数据丢失。
  • 共享数据:与团队成员或朋友共享特定股票的历史数据。

五、高级特性说明

5.1 复权数据处理深度解析

什么是复权?

在A股市场中,股票会因为分红送股配股等公司行为,产生除权除息。除权除息日,股价会相应调整,导致K线图上出现跳空缺口

例如,某股票昨日收盘价10元,今日进行10送10分红,那么今日开盘价会自动调整为5元左右(除权后价格)。这种价格跳空并非市场行为,而是会计规则导致的,会对技术分析造成干扰。

复权就是对历史价格进行调整,消除这些非市场因素导致的价格跳空,使K线图连贯,便于进行技术分析和趋势判断。

五种复权类型对比

看海量化的本地数据库支持五种复权类型,满足不同的分析需求:

复权类型 英文标识 调整基准 适用场景 价格特点
不复权 none 无调整 查看真实历史价格 除权日有跳空,价格为真实成交价
前复权 front 当前价格 技术分析,关注当前价位 当前价格真实,历史价格向下调整
后复权 back 上市价 长期收益分析 上市价真实,后续价格向上调整
等比前复权 front_ratio 当前价格+涨跌幅 保持相对收益率的技术分析 相对涨跌幅完全准确
等比后复权 back_ratio 上市价+涨跌幅 长期收益率精确计算 相对涨跌幅完全准确

详细说明:

  • 不复权(none):显示真实的历史成交价格,未经任何调整。K线图上会看到除权日的跳空缺口。适用于需要查看真实历史价格的场景,如财务分析。

  • 前复权(front):以当前最新价格为基准,向历史调整。当前价格保持不变(真实价格),历史价格向下调整。这是最常用的复权方式,适合技术分析和趋势判断,因为可以直观看到当前价格在历史中的位置。

  • 后复权(back):以上市首日价格为基准,向未来调整。上市价格保持不变,后续价格向上调整。适合长期投资者分析累计收益,可以看到从上市至今的真实涨幅。

  • 等比前复权(front_ratio):在前复权的基础上,进一步保持相对涨跌幅不变。确保每日涨跌幅百分比与不复权时完全一致。适用于需要精确计算收益率的量化策略。

  • 等比后复权(back_ratio):在后复权的基础上,保持相对涨跌幅不变。适用于长期收益率的精确计算。

查询时如何选择?

在查询面板的”复权类型“下拉框中选择所需的复权方式,查询结果会自动返回对应复权后的价格字段。

  • 例如,选择”前复权(front)”,查询结果中的openhighlowclose字段,实际返回的是open_fronthigh_frontlow_frontclose_front字段的值,即前复权后的价格。

存储优势

看海量化的本地数据库在数据导入时,会自动计算并存储所有5种复权方式的价格

  • 查询时直接读取:无需实时计算复权价格,查询速度极快。
  • 灵活切换:可以在查询时随意切换复权类型,无需重新导入数据。
  • 完整存储:K线表共26个字段,包含原始价格(不复权)以及4种复权方式的价格,数据完整且冗余度低。

5.2 Tick逐笔数据特性

什么是Tick数据?

Tick数据是股票交易的最小颗粒度数据,记录每一笔成交或盘口变化的瞬时快照。与K线数据(日线、分钟线)相比,Tick数据的时间精度达到毫秒级,能够捕捉到市场的每一次微小波动。

例如,某只股票在09:30:00.123时刻,最新成交价为10.56元,买一价为10.55元,卖一价为10.57元,买一量为10000股,卖一量为12000股……这些信息都会被记录在一条Tick数据中。

数据量警告

重要提示:Tick数据量极大,单只股票单个交易日可达数万条,全年数据可达数百万条。请谨慎查询和导入,避免占用过多存储空间和内存。

  • 单日数据量:一只活跃股票,单个交易日的Tick数据可达2-5万条。
  • 全年数据量:一只股票全年的Tick数据可达约500万-1000万条,存储空间约100-500MB。
  • 内存占用:查询大量Tick数据会占用大量内存,可能导致系统卡顿。

推荐使用场景

Tick数据并非日常回测必需,仅在以下场景中使用:

  • 高频策略开发:如日内T+0策略、高频套利策略,需要精确到秒或毫秒的成交时间和价格。
  • 盘口研究:如大单追踪、主力行为分析、盘口动量因子构建,需要实时的买卖盘口数据。
  • 精细化回测:如需要模拟真实的盘口撮合、滑点计算,Tick数据可以提供最接近真实市场的数据。

提示:对于绝大多数趋势策略、价值策略、日线策略,使用日线或分钟线数据即可,无需导入Tick数据。

特有字段

Tick数据包含丰富的字段,除了基本的成交信息,还包括5档买卖盘口数据:

5档买卖盘口:

  • askPrice1-5:五档卖价(卖一价、卖二价、…、卖五价)
  • bidPrice1-5:五档买价(买一价、买二价、…、买五价)
  • askVol1-5:五档卖量(卖一量、卖二量、…、卖五量)
  • bidVol1-5:五档买量(买一量、买二量、…、买五量)

成交信息:

  • lastPrice:最新成交价
  • volume:成交量
  • amount:成交额
  • transactionNum:成交笔数

期货字段(仅期货品种):

  • openInt:持仓量
  • lastSettlementPrice:昨结算价

查询建议

  • 缩小日期范围:尽量只查询1-5个交易日的Tick数据,避免一次性查询数月或全年数据。
  • 只查询必要字段:在字段筛选中,只勾选需要的字段(如时间、最新价、买一价、卖一价),减少数据传输量。
  • 及时释放内存:大规模查询Tick数据后,及时关闭数据管理器窗口,释放内存。

5.3 数据存储结构说明

了解本地数据库的存储结构,有助于您更好地管理和维护数据。

文件组织方式

数据根目录(默认./stock_data)/
├── SH/                    # 上海市场文件夹
│   ├── 600000.db         # 浦发银行数据库文件
│   ├── 600009.db         # 上海机场
│   ├── 600016.db         # 民生银行
│   └── ...               # 其他沪市股票(每只股票一个.db文件)
├── SZ/                    # 深圳市场文件夹
│   ├── 000001.db         # 平安银行
│   ├── 000002.db         # 万科A
│   └── ...               # 其他深市股票
├── BJ/                    # 北京市场文件夹(新三板精选层)
│   └── ...
├── metadata.db           # 全局元数据库
└── config.json          # 配置文件

单股票数据库说明

  • 每只股票对应一个独立的.db文件,文件名为股票代码(如600000.db代表浦发银行)。
  • 一个.db文件内包含该股票的所有周期数据,采用多表结构:
    • kline_1d表:日线数据
    • kline_1m表:分钟线数据
    • kline_5m表:5分钟线数据
    • tick表:逐笔成交数据
    • stock_info表:股票基本信息(如股票名称、市场代码等)

元数据库(metadata.db)

  • stock_list表:记录所有已导入的股票及其数据状态,包括股票代码、名称、市场、已有周期、最后同步时间等。
  • sync_log表:记录每次导入操作的日志,包括导入时间、导入股票、导入周期、成功条数、错误信息等,便于追溯历史操作。

存储空间估算(单只股票)

下表提供了单只股票各周期数据的存储空间参考:

数据类型 每年数据量估算 存储空间(每年)
日线(1d) 约250条 约50KB
分钟线(1m) 约48,000条 约10MB
5分钟线(5m) 约10,000条 约2MB
Tick数据 约100-500万条 约100-500MB

示例计算:

  • 100只股票,各5年日线:100 × 5年 × 50KB = 25MB
  • 50只股票,各1年分钟线:50 × 1年 × 10MB = 500MB
  • 10只股票,各1年Tick数据:10 × 1年 × 300MB = 3GB

规划建议:

  • 日线数据:几乎不占空间,全市场导入(数千只股票)也仅需几百MB。
  • 分钟线数据:按需导入,只导入策略真正需要的股票,避免浪费空间。
  • Tick数据:极其占用空间,仅在高频策略开发时导入,且只导入必要的股票和时间范围。

六、与策略回测的集成应用

本地数据管理模块的最终目的,是为策略回测提供高性能的数据支撑。本章将详细介绍如何将本地数据无缝集成到回测流程中。


6.1 回测前的数据准备

看海量化V3.2版本的回测系统内置了智能数据检测机制,在启动回测时会自动检测并加载本地DuckDB数据。虽然系统能够自动处理大部分情况,但为确保回测顺利进行,仍建议您提前做好数据准备工作。

基本准备流程

步骤1:确定回测需求

在导入数据前,先明确回测的具体需求:

  • 股票池:策略要交易哪些股票?例如,沪深300成分股、中证500成分股、或自选的50只股票。
  • 回测时间范围:例如,2020-01-01 到 2024-12-31。
  • 所需周期:策略使用日线(1d)、分钟线(1m)、还是5分钟线(5m)?

步骤2:导入数据

  1. 打开数据管理器:主界面【工具】→【数据管理】。
  2. 点击【从MiniQMT导入数据】按钮。
  3. 根据回测需求,选择合适的导入模式:
    • 全量增量补充:适合首次导入或大规模数据更新
    • 自定义补充数据:适合针对性导入特定股票池
  4. 设置股票范围、数据周期和时间范围。
  5. 点击【开始导入】或【开始扫描并补充】,等待导入完成。

提示:首次导入建议从少量股票开始,确认流程无误后,再进行大规模导入。

重要提示:策略所需数据范围

请特别注意:策略在指定回测时段运行时,所需的数据范围往往大于回测时段本身

例如,您的策略需要计算60日均线,那么即使回测时段是2024-01-01至2024-12-31,您也需要导入2023-11-01之前的数据(至少60个交易日),否则策略在2024年初无法计算出有效的均线指标。

建议做法:

  • 预留缓冲期:导入数据时,起始日期应比回测开始日期提前3-6个月(或更多,取决于策略所需的最长指标周期)。
  • 完整性检查不等于数据就位:即使完整性检查显示回测时段的数据100%完整,也不代表策略所需的历史数据已经到位。您需要根据策略逻辑,确认是否已导入足够的历史数据。

可选:数据完整性检查

导入完成后,如需确认数据完整性,可对关键股票执行完整性检查:

  1. 在数据管理器的查询面板选择股票和周期。
  2. 设置检查的时间范围(建议设置为回测开始日期前推6个月至回测结束日期)。
  3. 点击【完整性检查】,查看是否有缺失的交易日。
  4. 如有缺失,使用【从MiniQMT导入数据】功能补充缺失的日期范围。

6.2 配置策略使用本地数据

自动检测机制

看海量化回测系统内置了自动检测机制,无需手动配置,即可实现本地数据的自动加载:

  • 启动回测时,系统会自动检测本地DuckDB数据库是否存在。
  • 如果检测到本地数据,系统优先使用本地数据,实现极速加载(相比在线下载,速度提升10-100倍)。
  • 无需修改策略代码或回测配置,完全透明切换,对策略开发者友好。

验证方法

启动回测后,查看回测日志输出:

  • 如果日志中显示”检测到本地数据库,使用本地数据加速回测“,说明成功启用本地数据。
  • 回测启动速度明显加快,数据加载阶段几乎无等待时间(秒级完成)。

七、附录:数据表结构详解

本附录提供K线表和Tick表的完整字段说明,供高级用户参考。

7.1 K线表字段说明(26个字段)

K线表(kline_1d、kline_1m、kline_5m)共包含26个字段,涵盖原始价格、复权价格、成交信息等。

字段名 数据类型 说明 示例值
time INTEGER 时间戳(主键,毫秒) 1609459200000
open REAL 开盘价 10.52
high REAL 最高价 10.68
low REAL 最低价 10.45
close REAL 收盘价 10.60
volume REAL 成交量(股) 5000000
amount REAL 成交额(元) 53000000
preClose REAL 前收盘价 10.50
suspendFlag INTEGER 停牌标记(0正常,1停牌) 0
settelementPrice REAL 结算价(期货)
openInterest REAL 持仓量(期货)
open_front REAL 前复权开盘价 8.42
high_front REAL 前复权最高价 8.54
low_front REAL 前复权最低价 8.36
close_front REAL 前复权收盘价 8.48
open_back REAL 后复权开盘价 15.28
high_back REAL 后复权最高价 15.52
low_back REAL 后复权最低价 15.18
close_back REAL 后复权收盘价 15.40
open_front_ratio REAL 等比前复权开盘价 8.43
high_front_ratio REAL 等比前复权最高价 8.55
low_front_ratio REAL 等比前复权最低价 8.37
close_front_ratio REAL 等比前复权收盘价 8.49
open_back_ratio REAL 等比后复权开盘价 15.29
high_back_ratio REAL 等比后复权最高价 15.53
low_back_ratio REAL 等比后复权最低价 15.19
close_back_ratio REAL 等比后复权收盘价 15.41
dividend_type TEXT 复权类型标识 front
update_time TEXT 更新时间 2024-01-01 16:00:00

字段说明:

  • time:Unix时间戳(毫秒),为主键,保证唯一性。
  • open/high/low/close:原始价格(不复权),即真实成交价。
  • volume/amount:成交量(股)和成交额(元)。
  • preClose:前一交易日收盘价,用于计算涨跌幅。
  • suspendFlag:停牌标记,0表示正常交易,1表示停牌。
  • settelementPrice/openInterest:期货特有字段,股票数据中通常为空。
  • open_front/high_front/low_front/close_front:前复权价格。
  • open_back/high_back/low_back/close_back:后复权价格。
  • open_front_ratio/high_front_ratio/low_front_ratio/close_front_ratio:等比前复权价格。
  • open_back_ratio/high_back_ratio/low_back_ratio/close_back_ratio:等比后复权价格。
  • dividend_type:复权类型标识,用于内部管理。
  • update_time:该条记录的更新时间,用于追踪数据新鲜度。

7.2 Tick表字段说明(22个字段)

Tick表(tick)共包含22个字段,包含逐笔成交信息和5档盘口数据。

字段名 数据类型 说明 示例值
time INTEGER 时间戳(主键,毫秒) 1609459200123
lastPrice REAL 最新成交价 10.56
open REAL 开盘价 10.52
high REAL 最高价 10.68
low REAL 最低价 10.45
lastClose REAL 昨收价 10.50
amount REAL 成交额 53000000
volume REAL 成交量 5000000
pvolume REAL 持仓量
stockStatus INTEGER 交易状态 0
openInt REAL 持仓量(期货)
lastSettlementPrice REAL 昨结算价(期货)
askPrice1 REAL 卖一价 10.57
askPrice2 REAL 卖二价 10.58
askPrice3 REAL 卖三价 10.59
askPrice4 REAL 卖四价 10.60
askPrice5 REAL 卖五价 10.61
bidPrice1 REAL 买一价 10.56
bidPrice2 REAL 买二价 10.55
bidPrice3 REAL 买三价 10.54
bidPrice4 REAL 买四价 10.53
bidPrice5 REAL 买五价 10.52
askVol1 REAL 卖一量 10000
askVol2 REAL 卖二量 15000
askVol3 REAL 卖三量 20000
askVol4 REAL 卖四量 25000
askVol5 REAL 卖五量 30000
bidVol1 REAL 买一量 12000
bidVol2 REAL 买二量 18000
bidVol3 REAL 买三量 22000
bidVol4 REAL 买四量 28000
bidVol5 REAL 买五量 32000
transactionNum INTEGER 成交笔数 1523

字段说明:

  • time:Unix时间戳(毫秒),精确到毫秒级,为主键。
  • lastPrice:最新成交价,即当前这一笔的成交价格。
  • open/high/low:当日开盘价、最高价、最低价(截至当前时刻)。
  • lastClose:昨日收盘价。
  • amount/volume:累计成交额和成交量(截至当前时刻)。
  • pvolume/stockStatus/openInt/lastSettlementPrice:期货特有字段,股票数据中通常为空或0。
  • askPrice1-5/bidPrice1-5:五档卖价和五档买价,反映当前盘口挂单价格。
  • askVol1-5/bidVol1-5:五档卖量和五档买量,反映当前盘口挂单数量。
  • transactionNum:成交笔数,即从开盘至当前时刻的累计成交笔数。

显示验证码
没有账号?注册  忘记密码?

风险提示

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

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

官网:www.khsci.com/khQuant