第四章:阿尔法策略的数据基础设施:数据源选择、数据清洗、数据库搭建
做债券量化策略,最怕什么?
不是策略不赚钱,而是数据先崩了。
我见过太多团队,策略逻辑写得漂漂亮亮,回测曲线美如画,结果一上实盘就翻车。查到最后,往往是数据源没对齐,或者某个字段的取值逻辑搞错了。说白了,数据基础设施就是策略的「地基」。地基不稳,楼盖得再高也是危房。
4.1 数据源选择:Wind、QB、彭博,到底怎么选?
国内做债券量化,绕不开三个数据源:Wind、QB(Qeubee)、彭博。我个人的经验是,没有完美的数据源,只有最适合你策略的数据源。
核心原则:交易数据看QB,估值数据看Wind,跨境品种看彭博。别指望一个数据源打天下。
| 数据源 | 优势 | 劣势 | 我的建议 |
|---|---|---|---|
| Wind | 估值数据全、历史数据长、接口稳定 | 实时行情延迟高、价格贵 | 做回测和因子计算的首选 |
| QB | 实时成交数据、经纪商报价、一级发行数据 | 历史数据短、API文档略粗糙 | 做高频或事件驱动策略必备 |
| 彭博 | 全球品种覆盖、信用评级数据、衍生品数据 | 贵、贵、贵(重要的事说三遍) | 跨境策略或机构级应用 |
我记得有一次做信用债利差策略,用Wind的估值收益率算出来利差稳定得不行,结果一换QB的成交数据,利差波动大得吓人。后来才发现,Wind的估值是模型算出来的,QB的成交才是市场真实博弈的结果。所以,你用什么数据,决定了你看到的是「真实世界」还是「模型世界」。
4.2 数据清洗:脏数据是策略的隐形杀手
数据源拿到手,千万别直接扔进模型。我刚开始做量化时吃过这个亏——回测收益高得离谱,一查原因,某只债券的到期收益率字段里混进了几个「9999」的异常值。嗯,这种坑踩过一次就记住了。
债券数据清洗,我总结了三步走:
- 去重与对齐:同一只债券在不同数据源可能有不同代码,先做映射表。Wind用WIND_CODE,QB用BOND_CODE,别搞混。
- 异常值处理:收益率出现负数?久期超过100年?直接标记剔除。我习惯的做法是设置上下5%的截尾处理。
- 缺失值填充:债券数据缺失是常态。对于估值数据,用前向填充;对于成交数据,宁可留空也别瞎填。
小技巧:清洗完数据后,一定要做一次「数据完整性检查」。比如,检查每天有多少只债券有数据,如果某天突然少了30%,大概率是数据源出问题了。
4.3 数据库搭建:从Excel到专业数据库的进化
很多研究员一开始用Excel存数据,策略少的时候还行。一旦你开始跑多因子、多品种的策略,Excel就会变成噩梦。我见过最夸张的案例,一个Excel文件打开要5分钟,里面塞了10万行数据。
我个人推荐用 PostgreSQL + TimescaleDB 的组合。为什么?
- PostgreSQL稳定,支持复杂查询
- TimescaleDB是时序数据库扩展,处理债券这种时间序列数据特别顺手
- 开源免费,不像Wind那样按年收费
下面是一个简单的数据库表设计示例:
-- 债券基本信息表
CREATE TABLE bond_master (
bond_code VARCHAR(20) PRIMARY KEY,
bond_name VARCHAR(100),
bond_type VARCHAR(20), -- 国债、信用债、同业存单等
issue_date DATE,
maturity_date DATE,
coupon_rate DECIMAL(10,4)
);
-- 日频行情表(带时间戳分区)
CREATE TABLE bond_daily_data (
bond_code VARCHAR(20),
trade_date DATE,
close_yield DECIMAL(10,4),
close_price DECIMAL(10,4),
modified_duration DECIMAL(10,4),
PRIMARY KEY (bond_code, trade_date)
);
-- 创建时序索引
CREATE INDEX idx_bond_daily_date ON bond_daily_data (trade_date DESC);
注意:千万别把所有数据塞一张表里。债券基本信息、日频行情、分钟级行情、一级发行数据,分开建表。不然查询速度会让你怀疑人生。
4.4 数据流水线:让数据自动跑起来
手动下载数据、手动清洗、手动导入数据库——这种操作做一次还行,做一个月你就想转行了。
我建议搭建一个自动化的数据流水线:
- 定时任务:每天收盘后,用Python脚本自动从Wind/QB拉取数据
- 清洗模块:写一个统一的清洗函数,处理异常值、缺失值、格式转换
- 入库模块:批量写入PostgreSQL,用COPY命令比INSERT快10倍
- 校验模块:入库后自动跑一遍校验,比如检查数据量是否合理、关键字段是否有空值
我曾经帮一个团队优化过数据流水线,原来他们每天手动操作要花2小时,改成自动化后,每天只需要看一眼日志就行。省下来的时间,多研究几个因子不香吗?
4.5 本章知识体系总览
下面这张图,是我做数据基础设施时的核心思路。你可以把它当成一个检查清单:
这张图从左到右、从上到下,就是一套完整的数据基础设施。你想想看,如果每一步都做到位了,策略跑起来是不是心里踏实多了?
一句话总结:数据源选对、清洗做细、数据库搭好、流水线自动化——这四步走完,你的阿尔法策略就有了一个坚实的「弹药库」。
我曾经在项目里见过最惨的案例:策略团队花了3个月开发因子,结果上线第一天发现数据库里少了2022年全年的数据。原因?数据导入脚本里有个日期格式写错了。所以,数据基础设施这件事,再怎么重视都不为过。