3. 数据管理规范:数据源选择、数据清洗流程、数据存储架构、数据版本控制
数据,说白了就是量化团队的命根子。我见过太多团队,策略模型做得花里胡哨,结果数据源一换,回测曲线直接崩盘。嗯,今天我们就来聊聊数据管理这件事。
我个人习惯把数据管理分成四个环节:选源、清洗、存储、版本控制。这四个环节环环相扣,任何一个出问题,后面都是灾难。
3.1 数据源选择:别把鸡蛋放在一个篮子里
选数据源这件事,我踩过不少坑。早期我们团队只接了一家数据商,结果某天对方服务器宕机,整个交易系统直接停摆。从那以后,我定了个规矩:至少两个独立数据源。
数据源选择的核心考量点:
- 权威性:交易所直连数据 > 头部数据商 > 第三方聚合数据
- 时效性:Tick 级数据要求毫秒延迟,日线数据可以接受分钟级
- 覆盖度:股票、期货、期权、债券...你的策略需要什么,心里要有数
- 成本:别为了省钱用免费数据,我见过有人用 Yahoo Finance 做回测,结果分红送股都没处理,策略看起来赚钱,实盘亏到哭
3.2 数据清洗流程:脏数据是策略的隐形杀手
数据清洗,听起来很枯燥,但这是我最看重的环节。你想想看,模型再牛逼,喂进去的是垃圾,出来的只能是更垃圾。
我曾经接手过一个团队的回测系统,发现他们的收益率曲线异常平滑。查了半天,原来是数据清洗时把跌停日的价格给平滑掉了。嗯,这种错误,一次都不能犯。
标准清洗流程我总结为五步:
- 缺失值处理:前向填充、插值、或者直接丢弃。我个人习惯用前向填充,因为交易数据天然具有延续性。
- 异常值检测:3-sigma 法则、IQR 方法、或者基于业务规则的过滤(比如股票价格不可能为负)。
- 复权处理:前复权还是后复权?我建议回测用后复权,实盘用前复权。为什么?后复权能真实反映历史收益,前复权更贴近当前价格。
- 对齐时间戳:不同数据源的时间戳格式可能不同,必须统一到同一个时区、同一个精度。
- 去重与排序:确保每个时间点只有一条数据,按时间升序排列。
3.3 数据存储架构:选对工具,事半功倍
数据存储这件事,很多团队一开始不重视。等数据量大了,查询慢得像蜗牛,才来后悔。我建议一开始就规划好。
不同数据类型,适合不同的存储方案:
| 数据类型 | 推荐存储方案 | 原因 |
|---|---|---|
| Tick 级高频数据 | ClickHouse / InfluxDB | 列式存储,写入快,压缩率高 |
| 分钟/日线数据 | PostgreSQL / MySQL | 关系型数据库,查询灵活,支持复杂条件 |
| 因子数据 | Parquet 文件 + HDF5 | 适合批量读取,与 Python/Pandas 无缝对接 |
| 元数据(合约信息、公司信息) | SQLite / MongoDB | 轻量级,便于迁移和备份 |
我个人习惯用分层存储架构:热数据放内存或 SSD,温数据放 ClickHouse,冷数据归档到对象存储(如 S3)。这样既保证了查询速度,又控制了成本。
3.4 数据版本控制:回测可复现的基石
数据版本控制,是量化团队最容易忽视的环节。你想想看,如果今天跑的回测和明天跑的回测用的不是同一份数据,那结果怎么对比?
我建议用数据快照 + Git LFS 的方式来做版本控制。具体做法:
- 每次数据更新,生成一个完整的快照文件(比如 Parquet 格式)
- 快照文件名包含日期和版本号,例如:
cn_stock_daily_20250101_v2.parquet - 用 Git LFS 管理这些大文件,确保版本可追溯
- 在回测代码中,硬编码数据版本号,保证每次回测结果可复现
数据版本控制的另一个好处是:当你发现数据有错误时,可以快速回滚到上一个正确版本,而不需要重新下载全部数据。
3.5 数据管理整体架构图
下面这张图,是我团队目前使用的数据管理架构。你可以参考一下:
这张图展示了我团队的数据流转路径。从数据源到清洗,再到存储和版本控制,每一步都有明确的规范和工具。你照着这个架构搭,至少能保证数据不出大问题。
公众号:蓝海资料掘金营,微信deep3321