1.11 数据维护

适用版本 V2V3

本篇重点:本篇讲本地数据库的日常维护:检查完整性、补缺、修复,以及数据库被占用时怎么办。

1 打开数据管理窗口

点主界面工具栏「数据管理」,打开「看海数据管理模块」窗口。

  • 工具栏左边是导入:「BaoStock导入」「Tushare导入」。下载数据的步骤见《1.4 数据管理模块》。
  • 工具栏右边是维护工具:「占用诊断」(蓝色按钮)、「统计信息」「核验索引」「WAL修复」。
  • 左侧是已下载的股票列表,按市场分组,可以按代码搜索、按市场和周期筛选。
  • 右侧是「查询条件」区(周期、开始日期、结束日期、「查询」「数据完整性检查」「导出CSV」)和数据表格。
  • 窗口右下角状态栏显示「BaoStock 今日已用 x/30000 次」。
「看海数据管理模块」窗口:工具栏右边四个是维护工具,查询条件一行里有「数据完整性检查」按钮,右下角是 BaoStock 请求次数
「看海数据管理模块」窗口:工具栏右边四个是维护工具,查询条件一行里有「数据完整性检查」按钮,右下角是 BaoStock 请求次数

2 数据完整性检查(单只股票)

用来查看某一只股票在一段时间内,哪些交易日有数据、哪些没有。
操作步骤:

  1. 在左侧列表展开市场,单击选中一只股票。
  2. 在「查询条件」里选「周期」(1d、1m、5m、tick),设「开始日期」「结束日期」。
  3. 点「数据完整性检查」。

弹出「数据完整性检查 - 代码 (周期)」窗口:

  • 顶部一行写明股票、周期和时间范围,下面是图例。
  • 中间的方格图里,每个格子是一个交易日,按日期先后从左到右、一行一行排列。
  • 鼠标停在格子上,显示这一天的日期、星期和状态。
  • 底部统计:完整多少天、部分多少天、缺失多少天,各占百分比,以及总交易日数。

格子颜色的含义:

颜色 图例文字 判断标准
绿色 完整数据 日线:当天有 1 条;1 分钟线:当天不少于 240 根的 95%(每天实际有 241 根,判定按 240 根算);5 分钟线:不少于 48 根的 95%;tick:不少于 4465 条
橙色 部分数据 当天有数据,但条数没达到上面的标准(只对分钟线和 tick 有意义)
灰色 无数据 当天一条都没有
一只股票近一年日线的完整性检查(代码已打码):241 个交易日完整,最后 1 格灰色;底部统计「完整 241 天 (99.6%) | 部分 0 天 (0.0%) | 缺失 1 天 (0.4%) | 总计 242 个交易日」
一只股票近一年日线的完整性检查(代码已打码):241 个交易日完整,最后 1 格灰色;底部统计「完整 241 天 (99.6%) | 部分 0 天 (0.0%) | 缺失 1 天 (0.4%) | 总计 242 个交易日」

上图最后那一格灰色是截图当天:当天还没收盘,数据源没有这一天的日线,所以显示为缺失。

提示

这个窗口按交易日历逐日判断,不看上市、退市日期,也不区分停牌。股票上市前、停牌期间的交易日同样显示灰色。看到灰色格子时,先确认那段时间这只股票是否在交易,再决定要不要补数据。

所选时间范围内一条数据都没有时,会直接提示「该时间段内无数据」。

3 回测前的自动数据检查

点「开始运行」后、正式回测前,软件会检查股票池和基准指数在回测区间内的数据是否齐全。这一步不需要手动操作。
检查规则:

  • 按上市、退市日期判断:上市日之前、退市日之后的交易日不算缺失。这些日子本来就没有行情,也补不到。上市、退市日期表随安装包附带一份;在「设置」→「基本设置」里点「更新成分股列表」时,会通过 BaoStock 一并刷新。
  • 检查左侧「数据设置」里选的周期。
  • 复权方式不是「不复权」时,还要求当天对应复权口径的开、高、低、收四个价格都有值。只下载了原始价、回测却选了复权,也会被判为缺失。

发现缺失时,弹窗列出缺失的股票数、缺失交易日数和明细(基准指数缺失会单独警告),下方三个按钮:

  • 打开数据管理:去补数据。
  • 取消:不回测。
  • 继续回测:照常运行。缺数据的股票在缺失的日子没有行情可用,回测结果可能不准确,运行日志里会汇总提示空数据。

检查方式在「设置」→「基本设置」→「回测前数据检查」里选:

选项 行为
自动(推荐) 小规模回测做检查;股票数达到 1000 只,或分钟线/tick 股票数达到 500 只,或估算要扫描的 K 线超过 25 万根时,跳过检查,改由回测过程中的空数据汇总提示
每次全量检查 不管规模多大都检查
关闭检查 不检查
回测前检查发现缺失时的弹窗:上方写明缺几只股票、约多少个交易日、时间范围和建议,下方「缺失数据明细列表」逐条列出
回测前检查发现缺失时的弹窗:上方写明缺几只股票、约多少个交易日、时间范围和建议,下方「缺失数据明细列表」逐条列出

4 统计信息

点工具栏「统计信息」,弹窗列出当前数据目录的整体情况:

  • 数据路径、可浏览股票数、数据库文件总数、总大小;
  • 各市场(SH、SZ、BJ 等)的股票数、文件数和占用空间;
  • 各周期(日线、1 分钟、5 分钟、Tick)分别有多少只股票的数据;
  • 「未纳入索引的六位文件」等核验相关的数字,以及本次打开窗口后最近一次核验的结果。

用途:下载完一批数据后确认数量对不对;磁盘空间紧张时看哪个市场、哪个周期占得多。
弹窗最后有一段「说明」,解释这些数字的口径:左侧股票树和「可浏览股票数」都来自 metadata.db 索引;「未纳入索引的六位文件」可能是空行情库,不等于漏数据;需要确认时用工具栏的「核验索引」做只读检查。

「统计信息」弹窗:演示环境里有 3 个数据库文件、共 6.54 MB,日线 3 只,其余周期 0
「统计信息」弹窗:演示环境里有 3 个数据库文件、共 6.54 MB,日线 3 只,其余周期 0

5 核验索引

左侧股票列表和「可浏览股票数」来自数据目录里的索引文件 metadata.db。如果下载过程中异常中断,可能出现数据库文件已经写好、却没有登记进索引的情况,表现为数据明明下过,列表里找不到这只股票。
点工具栏「核验索引」:

  1. 弹出「核验并同步元数据索引」确认框,说明会先只读检查、不改动数据。点「是(Y)」。
「核验并同步元数据索引」确认框
「核验并同步元数据索引」确认框
  1. 软件在后台检查有没有已下载但没登记的数据库文件。空库和非证券文件会跳过。
  2. 只有发现确实有行情的文件时,才会先备份 metadata.db,再一次性补登记。
  3. 完成后弹出「索引核验完成」,逐项列出核验文件数、新增索引数、各类跳过的数量和读取失败数。没有发现问题时,最后一行是「没有发现漏索引的有效行情库,metadata.db 未修改。」
「索引核验完成」弹窗:核验 3 个文件,新增索引 0,metadata.db 未修改
「索引核验完成」弹窗:核验 3 个文件,新增索引 0,metadata.db 未修改

数据下载任务还在运行时不能核验,会提示先结束任务。

6 WAL 修复

DuckDB 写数据时会先写一个临时文件(.wal)。软件被强制关闭、断电或崩溃后,可能留下没写完的临时文件,导致对应的数据库打不开,查询或回测时报错。
点工具栏「WAL修复」,先弹出「确认修复」对话框,说明修复会做什么:

「确认修复」对话框,列出三种情况的处理方式,底部是「是(Y)」「否(N)」
「确认修复」对话框,列出三种情况的处理方式,底部是「是(Y)」「否(N)」

点「是(Y)」后,软件逐个检查数据目录里的全部数据库:

  • 能正常打开的,不做任何改动。
  • 因为没有权限或文件只读、磁盘空间不足、内存不足、正被其他程序占用、数据库版本不兼容等原因打不开的,库文件本身并没有坏,一律跳过,不做任何改动,弹窗里会写明原因。先解决对应的问题(例如关掉占用的程序、腾出磁盘空间),再打开即可。
  • 只有明确是临时文件回放失败或数据库文件损坏的,才会修复。动手之前,软件先把这个数据库和它的临时文件原样复制一份,放到数据目录下隔离目录里的 _backup_before_repair 文件夹;备份不成功就不动这个库。然后删掉临时文件重新打开。临时文件里还没写回数据库的数据会丢失,丢失的不一定只是最后一批,可能是上一次写回之后的全部新数据。
  • 删掉临时文件后仍然打不开的,移到隔离目录,原位置换成空库,之后需要重新下载这些股票的数据。

完成后弹窗列出:检查了多少个、正常多少、已修复多少、已隔离并换成空库多少、处理失败多少、清理了多少残留文件。有被隔离的库时,会给出隔离目录的位置。被跳过的数据库(被占用、没有权限、磁盘满、内存不足、版本不兼容等)不做任何改动,算在“处理失败”里,弹窗逐个写明原因;被占用的会单独说明有几个,提示先用「占用诊断」查看,解除占用后再修复。做过修复的库,弹窗会给出修复前备份(_backup_before_repair)的位置。

注意

数据多时 WAL 修复需要几分钟,期间不要下载数据,也不要运行回测。

7 占用诊断

同一个数据库文件同一时间只能由一个程序写入。下载、回测、另一个数据管理窗口或另一个版本的 khQuant 同时用同一个数据目录时,可能出现「数据库文件正在使用」这类报错。
下载过程中遇到占用,软件会先自动重试 5 次;仍然不行时弹窗说明被哪个进程占用,给出「继续重试」「先跳过」「停止任务」三个选择。
需要自己排查时,点工具栏「占用诊断」,打开「DuckDB 数据库占用诊断」窗口:

  • 表格列出正在占用当前数据目录的进程:模块、PID、进程、启动时间、占用数据库、处理策略、命令行。
  • 「模块」列标明占用者属于哪一类,例如「当前看海量化进程」「数据导入/补充」「另一数据管理窗口」「另一看海量化主程序」「看海量化(其他版本)」「其他 Python 程序」「未知外部程序」(引号内为界面原文)。
  • 下方按钮:
  • 刷新检测:重新扫描。
  • 释放本窗口连接:关闭数据管理窗口自己打开的数据库连接。
  • 强制停止选中进程:结束表格里选中的进程,执行前会再次确认。
  • 释放全部可结束连接:释放本窗口连接,并结束已识别的回测和数据导入进程;不会批量结束主程序和未知进程。

窗口顶部说明了检查范围:默认检查当前看海量化、所有 Python 任务及常见数据库工具;没有明显数据库特征的系统进程会跳过。扫描只读,不会主动打开数据库。下面一行写明这次检测到几个占用进程,这是点击刷新那一刻的快照。

「DuckDB 数据库占用诊断」窗口:只打开了数据管理窗口时,表格里只有一行「当前看海量化进程」,处理策略为「本窗口:仅释放连接」
「DuckDB 数据库占用诊断」窗口:只打开了数据管理窗口时,表格里只有一行「当前看海量化进程」,处理策略为「本窗口:仅释放连接」
注意

结束进程会中断还没完成的回测或数据写入。能在对应程序里正常停止的,优先正常停止;只有确认进程已经卡住时,才用「强制停止选中进程」。

8 BaoStock 每日请求次数

BaoStock 免费、不用注册,但请求次数多了会被限制。软件给自己设了每天最多 3 万次的上限:

  • 数据管理窗口右下角显示「BaoStock 今日已用 x/30000 次」;BaoStock 导入窗口里也显示当前用量。
  • 次数按数据目录分别计数,每天清零。
  • 达到上限时下载自动停止,提示「已达到BaoStock当日请求上限30000次,已停止下载」,第二天再继续。
  • 参考用量:全市场只更新日线大约需要 1.5 万次。增量下载复权数据时,会把本地整段历史重新拉一遍,用量更大。
  • BaoStock 导入的并行进程数建议设 1~2。进程多了服务器容易限流、断开连接,次数也用得更快。

9 什么时候用哪个工具

遇到的情况 用哪个工具
想确认某只股票某段时间的数据齐不齐 数据完整性检查
回测前弹窗说数据不完整 看明细,点「打开数据管理」补数据;确认是上市前、停牌等原因的可以继续回测
下完数据想确认总数,或看磁盘占用 统计信息
数据下过,但左侧列表里找不到这只股票 核验索引
软件异常退出后,某些股票查询或回测报错、数据库打不开 WAL 修复(先看弹窗写的原因:权限、磁盘空间、占用这类问题会被跳过,需要先解决对应问题)
提示数据库文件正在使用、被锁定 先正常停止其他下载和回测;仍不行用占用诊断
BaoStock 下载中途停止,提示达到上限 等第二天继续,或改用 Tushare 下载
V3 亮点数据维护,V3 更省事
V3 数据管理窗口的维护工具(占用诊断、统计信息、核验索引、WAL 修复)、数据完整性检查、回测前检查的规则和 BaoStock 每日 3 万次计数都与 V2 相同。V3 另外提供:

  • 定时自动补充数据:设好时间自动增量下载,每天不用手动补(界面「定时补充」窗口需 Windows + miniQMT;其他数据源用 kh data sync,见 2.3);
  • 更多数据源:tx、同花顺(扶摇开放平台)、HTTP 桥接、miniQMT,并会持续集成更多数据源;
  • 命令行维护:kh data 命令可以查看统计、扫描、修复、导出,能写进脚本定期执行。

详见 2.3《数据管理模块(V3)》和附录 A 第 5 节「kh data」。

常见问题

问:数据完整性检查里有一段连续的灰色,是没下全吗?
答:先看这段时间这只股票是否已经上市、是否停牌。这个窗口按交易日历判断,上市前、停牌期间也显示灰色。确实在交易却是灰色,再重新下载这段数据。

问:1 分钟线有些天是橙色?
答:当天的 K 线条数不到 240 根的 95%。可能是下载中断,也可能是当天停牌半天。重新下载这几天的数据后再检查。

问:回测前检查说数据缺失,但数据管理里能查到这只股票?
答:常见原因有两个:回测选的周期和下载的周期不同;回测选了复权方式(如等比前复权),而下载时只存了原始价。按回测的周期和复权方式重新下载即可。

问:WAL 修复后有股票被「隔离并换成空库」怎么办?
答:只有确认是文件损坏、删掉临时文件后仍打不开的数据库才会被隔离,原文件和修复前的备份都留在弹窗给出的隔离目录里,没有被删除。一般重新下载这些股票的数据即可。隔离目录里的 _backup_before_repair 保存着修复前的原样文件,里面可能还有没来得及写回的数据;确认新下载的数据没问题、不需要找回之前,不要急着删除隔离目录。

问:BaoStock 今日次数用完了,还能下载吗?
答:BaoStock 要等第二天。日线和 5 分钟线也可以用 Tushare 下载(需要在设置里填 Token)。

V3

数据维护,V3 更省事
  • 定时自动补充数据
  • tx、同花顺(扶摇开放平台)、HTTP 桥接、miniQMT 等更多数据源
  • CLI 的 kh data 命令:统计、扫描、修复都能在命令行完成

本篇基于开源 V2 和 V3.4.1.10 编写。

×
没有账号?注册  忘记密码?

风险提示

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

© 2024 khQuant看海量化回测平台 版权所有

官网:www.khsci.com/khQuant