本篇重点:本篇讲本地数据库的日常维护:检查完整性、补缺、修复,以及数据库被占用时怎么办。
1 打开数据管理窗口
点主界面工具栏「数据管理」,打开「看海数据管理模块」窗口。
- 工具栏左边是导入:「BaoStock导入」「Tushare导入」。下载数据的步骤见《1.4 数据管理模块》。
- 工具栏右边是维护工具:「占用诊断」(蓝色按钮)、「统计信息」「核验索引」「WAL修复」。
- 左侧是已下载的股票列表,按市场分组,可以按代码搜索、按市场和周期筛选。
- 右侧是「查询条件」区(周期、开始日期、结束日期、「查询」「数据完整性检查」「导出CSV」)和数据表格。
- 窗口右下角状态栏显示「BaoStock 今日已用 x/30000 次」。

2 数据完整性检查(单只股票)
用来查看某一只股票在一段时间内,哪些交易日有数据、哪些没有。
操作步骤:
- 在左侧列表展开市场,单击选中一只股票。
- 在「查询条件」里选「周期」(1d、1m、5m、tick),设「开始日期」「结束日期」。
- 点「数据完整性检查」。
弹出「数据完整性检查 - 代码 (周期)」窗口:
- 顶部一行写明股票、周期和时间范围,下面是图例。
- 中间的方格图里,每个格子是一个交易日,按日期先后从左到右、一行一行排列。
- 鼠标停在格子上,显示这一天的日期、星期和状态。
- 底部统计:完整多少天、部分多少天、缺失多少天,各占百分比,以及总交易日数。
格子颜色的含义:
| 颜色 | 图例文字 | 判断标准 |
|---|---|---|
| 绿色 | 完整数据 | 日线:当天有 1 条;1 分钟线:当天不少于 240 根的 95%(每天实际有 241 根,判定按 240 根算);5 分钟线:不少于 48 根的 95%;tick:不少于 4465 条 |
| 橙色 | 部分数据 | 当天有数据,但条数没达到上面的标准(只对分钟线和 tick 有意义) |
| 灰色 | 无数据 | 当天一条都没有 |

上图最后那一格灰色是截图当天:当天还没收盘,数据源没有这一天的日线,所以显示为缺失。
这个窗口按交易日历逐日判断,不看上市、退市日期,也不区分停牌。股票上市前、停牌期间的交易日同样显示灰色。看到灰色格子时,先确认那段时间这只股票是否在交易,再决定要不要补数据。
所选时间范围内一条数据都没有时,会直接提示「该时间段内无数据」。
3 回测前的自动数据检查
点「开始运行」后、正式回测前,软件会检查股票池和基准指数在回测区间内的数据是否齐全。这一步不需要手动操作。
检查规则:
- 按上市、退市日期判断:上市日之前、退市日之后的交易日不算缺失。这些日子本来就没有行情,也补不到。上市、退市日期表随安装包附带一份;在「设置」→「基本设置」里点「更新成分股列表」时,会通过 BaoStock 一并刷新。
- 检查左侧「数据设置」里选的周期。
- 复权方式不是「不复权」时,还要求当天对应复权口径的开、高、低、收四个价格都有值。只下载了原始价、回测却选了复权,也会被判为缺失。
发现缺失时,弹窗列出缺失的股票数、缺失交易日数和明细(基准指数缺失会单独警告),下方三个按钮:
- 打开数据管理:去补数据。
- 取消:不回测。
- 继续回测:照常运行。缺数据的股票在缺失的日子没有行情可用,回测结果可能不准确,运行日志里会汇总提示空数据。
检查方式在「设置」→「基本设置」→「回测前数据检查」里选:
| 选项 | 行为 |
|---|---|
| 自动(推荐) | 小规模回测做检查;股票数达到 1000 只,或分钟线/tick 股票数达到 500 只,或估算要扫描的 K 线超过 25 万根时,跳过检查,改由回测过程中的空数据汇总提示 |
| 每次全量检查 | 不管规模多大都检查 |
| 关闭检查 | 不检查 |

4 统计信息
点工具栏「统计信息」,弹窗列出当前数据目录的整体情况:
- 数据路径、可浏览股票数、数据库文件总数、总大小;
- 各市场(SH、SZ、BJ 等)的股票数、文件数和占用空间;
- 各周期(日线、1 分钟、5 分钟、Tick)分别有多少只股票的数据;
- 「未纳入索引的六位文件」等核验相关的数字,以及本次打开窗口后最近一次核验的结果。
用途:下载完一批数据后确认数量对不对;磁盘空间紧张时看哪个市场、哪个周期占得多。
弹窗最后有一段「说明」,解释这些数字的口径:左侧股票树和「可浏览股票数」都来自 metadata.db 索引;「未纳入索引的六位文件」可能是空行情库,不等于漏数据;需要确认时用工具栏的「核验索引」做只读检查。

5 核验索引
左侧股票列表和「可浏览股票数」来自数据目录里的索引文件 metadata.db。如果下载过程中异常中断,可能出现数据库文件已经写好、却没有登记进索引的情况,表现为数据明明下过,列表里找不到这只股票。
点工具栏「核验索引」:
- 弹出「核验并同步元数据索引」确认框,说明会先只读检查、不改动数据。点「是(Y)」。

- 软件在后台检查有没有已下载但没登记的数据库文件。空库和非证券文件会跳过。
- 只有发现确实有行情的文件时,才会先备份
metadata.db,再一次性补登记。 - 完成后弹出「索引核验完成」,逐项列出核验文件数、新增索引数、各类跳过的数量和读取失败数。没有发现问题时,最后一行是「没有发现漏索引的有效行情库,metadata.db 未修改。」

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

点「是(Y)」后,软件逐个检查数据目录里的全部数据库:
- 能正常打开的,不做任何改动。
- 因为没有权限或文件只读、磁盘空间不足、内存不足、正被其他程序占用、数据库版本不兼容等原因打不开的,库文件本身并没有坏,一律跳过,不做任何改动,弹窗里会写明原因。先解决对应的问题(例如关掉占用的程序、腾出磁盘空间),再打开即可。
- 只有明确是临时文件回放失败或数据库文件损坏的,才会修复。动手之前,软件先把这个数据库和它的临时文件原样复制一份,放到数据目录下隔离目录里的
_backup_before_repair文件夹;备份不成功就不动这个库。然后删掉临时文件重新打开。临时文件里还没写回数据库的数据会丢失,丢失的不一定只是最后一批,可能是上一次写回之后的全部新数据。 - 删掉临时文件后仍然打不开的,移到隔离目录,原位置换成空库,之后需要重新下载这些股票的数据。
完成后弹窗列出:检查了多少个、正常多少、已修复多少、已隔离并换成空库多少、处理失败多少、清理了多少残留文件。有被隔离的库时,会给出隔离目录的位置。被跳过的数据库(被占用、没有权限、磁盘满、内存不足、版本不兼容等)不做任何改动,算在“处理失败”里,弹窗逐个写明原因;被占用的会单独说明有几个,提示先用「占用诊断」查看,解除占用后再修复。做过修复的库,弹窗会给出修复前备份(_backup_before_repair)的位置。
数据多时 WAL 修复需要几分钟,期间不要下载数据,也不要运行回测。
7 占用诊断
同一个数据库文件同一时间只能由一个程序写入。下载、回测、另一个数据管理窗口或另一个版本的 khQuant 同时用同一个数据目录时,可能出现「数据库文件正在使用」这类报错。
下载过程中遇到占用,软件会先自动重试 5 次;仍然不行时弹窗说明被哪个进程占用,给出「继续重试」「先跳过」「停止任务」三个选择。
需要自己排查时,点工具栏「占用诊断」,打开「DuckDB 数据库占用诊断」窗口:
- 表格列出正在占用当前数据目录的进程:模块、PID、进程、启动时间、占用数据库、处理策略、命令行。
- 「模块」列标明占用者属于哪一类,例如「当前看海量化进程」「数据导入/补充」「另一数据管理窗口」「另一看海量化主程序」「看海量化(其他版本)」「其他 Python 程序」「未知外部程序」(引号内为界面原文)。
- 下方按钮:
- 刷新检测:重新扫描。
- 释放本窗口连接:关闭数据管理窗口自己打开的数据库连接。
- 强制停止选中进程:结束表格里选中的进程,执行前会再次确认。
- 释放全部可结束连接:释放本窗口连接,并结束已识别的回测和数据导入进程;不会批量结束主程序和未知进程。
窗口顶部说明了检查范围:默认检查当前看海量化、所有 Python 任务及常见数据库工具;没有明显数据库特征的系统进程会跳过。扫描只读,不会主动打开数据库。下面一行写明这次检测到几个占用进程,这是点击刷新那一刻的快照。

结束进程会中断还没完成的回测或数据写入。能在对应程序里正常停止的,优先正常停止;只有确认进程已经卡住时,才用「强制停止选中进程」。
8 BaoStock 每日请求次数
BaoStock 免费、不用注册,但请求次数多了会被限制。软件给自己设了每天最多 3 万次的上限:
- 数据管理窗口右下角显示「BaoStock 今日已用 x/30000 次」;BaoStock 导入窗口里也显示当前用量。
- 次数按数据目录分别计数,每天清零。
- 达到上限时下载自动停止,提示「已达到BaoStock当日请求上限30000次,已停止下载」,第二天再继续。
- 参考用量:全市场只更新日线大约需要 1.5 万次。增量下载复权数据时,会把本地整段历史重新拉一遍,用量更大。
- BaoStock 导入的并行进程数建议设 1~2。进程多了服务器容易限流、断开连接,次数也用得更快。
9 什么时候用哪个工具
| 遇到的情况 | 用哪个工具 |
|---|---|
| 想确认某只股票某段时间的数据齐不齐 | 数据完整性检查 |
| 回测前弹窗说数据不完整 | 看明细,点「打开数据管理」补数据;确认是上市前、停牌等原因的可以继续回测 |
| 下完数据想确认总数,或看磁盘占用 | 统计信息 |
| 数据下过,但左侧列表里找不到这只股票 | 核验索引 |
| 软件异常退出后,某些股票查询或回测报错、数据库打不开 | WAL 修复(先看弹窗写的原因:权限、磁盘空间、占用这类问题会被跳过,需要先解决对应问题) |
| 提示数据库文件正在使用、被锁定 | 先正常停止其他下载和回测;仍不行用占用诊断 |
| BaoStock 下载中途停止,提示达到上限 | 等第二天继续,或改用 Tushare 下载 |
- 定时自动补充数据:设好时间自动增量下载,每天不用手动补(界面「定时补充」窗口需 Windows + miniQMT;其他数据源用
kh data sync,见 2.3); - 更多数据源:tx、同花顺(扶摇开放平台)、HTTP 桥接、miniQMT,并会持续集成更多数据源;
- 命令行维护:
kh data命令可以查看统计、扫描、修复、导出,能写进脚本定期执行。
常见问题
问:数据完整性检查里有一段连续的灰色,是没下全吗?
答:先看这段时间这只股票是否已经上市、是否停牌。这个窗口按交易日历判断,上市前、停牌期间也显示灰色。确实在交易却是灰色,再重新下载这段数据。
问:1 分钟线有些天是橙色?
答:当天的 K 线条数不到 240 根的 95%。可能是下载中断,也可能是当天停牌半天。重新下载这几天的数据后再检查。
问:回测前检查说数据缺失,但数据管理里能查到这只股票?
答:常见原因有两个:回测选的周期和下载的周期不同;回测选了复权方式(如等比前复权),而下载时只存了原始价。按回测的周期和复权方式重新下载即可。
问:WAL 修复后有股票被「隔离并换成空库」怎么办?
答:只有确认是文件损坏、删掉临时文件后仍打不开的数据库才会被隔离,原文件和修复前的备份都留在弹窗给出的隔离目录里,没有被删除。一般重新下载这些股票的数据即可。隔离目录里的 _backup_before_repair 保存着修复前的原样文件,里面可能还有没来得及写回的数据;确认新下载的数据没问题、不需要找回之前,不要急着删除隔离目录。
问:BaoStock 今日次数用完了,还能下载吗?
答:BaoStock 要等第二天。日线和 5 分钟线也可以用 Tushare 下载(需要在设置里填 Token)。
- 定时自动补充数据
- tx、同花顺(扶摇开放平台)、HTTP 桥接、miniQMT 等更多数据源
- CLI 的 kh data 命令:统计、扫描、修复都能在命令行完成
本篇基于开源 V2 和 V3.4.1.10 编写。