3. 数据管理规范:数据源选择、数据清洗流程、数据存储架构、数据版本控制

数据,说白了就是量化团队的命根子。我见过太多团队,策略模型做得花里胡哨,结果数据源一换,回测曲线直接崩盘。嗯,今天我们就来聊聊数据管理这件事。

我个人习惯把数据管理分成四个环节:选源、清洗、存储、版本控制。这四个环节环环相扣,任何一个出问题,后面都是灾难。

3.1 数据源选择:别把鸡蛋放在一个篮子里

选数据源这件事,我踩过不少坑。早期我们团队只接了一家数据商,结果某天对方服务器宕机,整个交易系统直接停摆。从那以后,我定了个规矩:至少两个独立数据源

数据源选择的核心考量点:

  • 权威性:交易所直连数据 > 头部数据商 > 第三方聚合数据
  • 时效性:Tick 级数据要求毫秒延迟,日线数据可以接受分钟级
  • 覆盖度:股票、期货、期权、债券...你的策略需要什么,心里要有数
  • 成本:别为了省钱用免费数据,我见过有人用 Yahoo Finance 做回测,结果分红送股都没处理,策略看起来赚钱,实盘亏到哭
我的建议:主力数据源选一家头部供应商(如 Wind、Bloomberg),备用数据源选一家技术型供应商(如 QuantConnect、Polygon)。两者交叉验证,数据不一致时以交易所原始数据为准。

3.2 数据清洗流程:脏数据是策略的隐形杀手

数据清洗,听起来很枯燥,但这是我最看重的环节。你想想看,模型再牛逼,喂进去的是垃圾,出来的只能是更垃圾。

我曾经接手过一个团队的回测系统,发现他们的收益率曲线异常平滑。查了半天,原来是数据清洗时把跌停日的价格给平滑掉了。嗯,这种错误,一次都不能犯。

标准清洗流程我总结为五步:

  1. 缺失值处理:前向填充、插值、或者直接丢弃。我个人习惯用前向填充,因为交易数据天然具有延续性。
  2. 异常值检测:3-sigma 法则、IQR 方法、或者基于业务规则的过滤(比如股票价格不可能为负)。
  3. 复权处理:前复权还是后复权?我建议回测用后复权,实盘用前复权。为什么?后复权能真实反映历史收益,前复权更贴近当前价格。
  4. 对齐时间戳:不同数据源的时间戳格式可能不同,必须统一到同一个时区、同一个精度。
  5. 去重与排序:确保每个时间点只有一条数据,按时间升序排列。
避坑指南:我曾经在清洗期货数据时,忽略了合约换月的问题。结果回测时用连续合约,实盘时发现流动性完全不对。后来我改用主力合约 + 换月调整的方式,才算解决了这个问题。

3.3 数据存储架构:选对工具,事半功倍

数据存储这件事,很多团队一开始不重视。等数据量大了,查询慢得像蜗牛,才来后悔。我建议一开始就规划好。

不同数据类型,适合不同的存储方案:

数据类型 推荐存储方案 原因
Tick 级高频数据 ClickHouse / InfluxDB 列式存储,写入快,压缩率高
分钟/日线数据 PostgreSQL / MySQL 关系型数据库,查询灵活,支持复杂条件
因子数据 Parquet 文件 + HDF5 适合批量读取,与 Python/Pandas 无缝对接
元数据(合约信息、公司信息) SQLite / MongoDB 轻量级,便于迁移和备份

我个人习惯用分层存储架构:热数据放内存或 SSD,温数据放 ClickHouse,冷数据归档到对象存储(如 S3)。这样既保证了查询速度,又控制了成本。

注意:千万别把所有数据塞进同一个数据库。我见过有人把 Tick 数据和因子数据都放 MySQL,结果一张表几十亿行,查询一次要几分钟。数据量大了,一定要做分库分表。

3.4 数据版本控制:回测可复现的基石

数据版本控制,是量化团队最容易忽视的环节。你想想看,如果今天跑的回测和明天跑的回测用的不是同一份数据,那结果怎么对比?

我建议用数据快照 + Git LFS 的方式来做版本控制。具体做法:

  • 每次数据更新,生成一个完整的快照文件(比如 Parquet 格式)
  • 快照文件名包含日期和版本号,例如:cn_stock_daily_20250101_v2.parquet
  • 用 Git LFS 管理这些大文件,确保版本可追溯
  • 在回测代码中,硬编码数据版本号,保证每次回测结果可复现
我的经验:我们团队曾经因为数据版本不一致,导致两个研究员对同一个策略的回测结果差了 5%。后来查了三天,才发现一个人用的是 v1 数据,另一个人用的是 v2 数据。从那以后,我强制要求所有回测必须记录数据版本号。

数据版本控制的另一个好处是:当你发现数据有错误时,可以快速回滚到上一个正确版本,而不需要重新下载全部数据。

3.5 数据管理整体架构图

下面这张图,是我团队目前使用的数据管理架构。你可以参考一下:

量化数据管理架构图 数据源层 交易所直连 数据供应商 (Wind/Bloomberg) 备用数据源 (Polygon/QuantConnect) 数据清洗层 缺失值处理 异常值检测 复权处理 时间对齐 去重排序 数据存储层 ClickHouse (Tick数据) PostgreSQL (日线数据) Parquet/HDF5 (因子数据) S3 (冷数据) 数据版本控制层 (Git LFS + 数据快照)

这张图展示了我团队的数据流转路径。从数据源到清洗,再到存储和版本控制,每一步都有明确的规范和工具。你照着这个架构搭,至少能保证数据不出大问题。

最后说一句:数据管理没有银弹。每个团队的资金规模、策略类型、技术栈都不一样,关键是要形成自己的规范,并且严格执行。我见过太多团队在数据上省钱省力,最后在策略上亏大钱。数据,值得你投入时间和资源。

公众号:蓝海资料掘金营,微信deep3321