一、固收数据全景:固收市场数据源概览

做固收量化,第一关就是数据。

说实话,我见过太多人一上来就写策略、搭模型,结果数据源都没搞清楚。最后回测跑得飞起,实盘一跑就崩——数据对不上。所以咱们先花点时间,把固收市场的数据源彻底捋一遍。

1.1 三大核心数据源

国内固收市场,数据源主要就三个:中债登上清所CFETS。这三家各有各的定位,也各有各的脾气。

数据源 全称 核心数据 特点
中债登 中央国债登记结算有限责任公司 国债、地方债、金融债、企业债估值 估值权威,但更新频率偏低
上清所 上海清算所 信用债、同业存单、ABS 托管数据全,但接口不太友好
CFETS 中国外汇交易中心 现券成交、回购、利率互换 交易数据实时,但噪音大

我个人习惯,把中债登当作“底仓数据”,上清所当作“补充数据”,CFETS当作“交易信号数据”。三者缺一不可。

核心观点:没有一家数据源能覆盖所有固收品种。做量化,必须学会多源融合。

1.2 数据频率与颗粒度

固收数据不像股票,日频数据就够用了?其实不是。

你想想看,债券的估值曲线每天更新一次,但成交数据是逐笔的。如果你做高频策略,日频数据根本不够用。如果你做配置策略,逐笔数据又太细了。

我一般这样划分:

  • 日频数据:中债估值、中债指数、信用利差。适合做因子分析和组合管理。
  • 分钟/小时频数据:CFETS现券成交、回购利率。适合做日内流动性分析。
  • 逐笔数据:银行间市场成交明细。适合做微观结构研究,但数据量巨大。

我记得有一次做信用债流动性因子,一开始用的日频数据,结果因子IC值忽高忽低。后来换成分钟频成交数据,才找到真正的流动性溢价。嗯,这里要注意:频率选不对,因子白费

1.3 数据质量痛点

做固收量化,最头疼的不是策略,是数据清洗。我敢说,80%的时间都在跟数据打架。

常见的痛点有这几个:

  1. 缺失值严重:很多债券不是每天都有成交。尤其是信用债,一周成交一笔都算活跃的。你怎么办?直接填充?还是用插值?
  2. 数据不一致:同一只债券,中债登和上清所的估值可能差好几个BP。我遇到过最夸张的一次,同一只城投债,两家估值差了15个BP。你说信谁?
  3. 字段定义混乱:比如“到期收益率”,有的数据源用年化,有的用半年复利。不统一处理,回测结果直接偏掉。
  4. 历史数据回溯难:很多债券中途换代码、换评级、换发行人。你拉5年历史数据,中间可能有3次代码变更。不处理干净,回测就是笑话。

避坑指南:我曾经因为没处理债券代码变更,导致一个信用债策略回测年化收益15%,实盘跑出来只有3%。后来查了三天,才发现是历史数据里同一只债用了三个不同代码。从那以后,我每次拉数据第一件事就是做代码映射。

1.4 数据清洗的通用流程

不管数据源是哪家,清洗流程其实大同小异。我总结了一个四步法:

  • 第一步:去重。同一只债券同一天出现多条记录,保留最新一条。
  • 第二步:对齐。不同数据源的时间戳、字段名、单位统一。
  • 第三步:填充。缺失值用前向填充、插值或模型预测。
  • 第四步:校验。用已知的债券价格或收益率做交叉验证。

下面是一个简单的数据清洗示例,我用Python处理中债登的估值数据:

import pandas as pd
import numpy as np

# 读取中债登估值数据
df = pd.read_csv('zhongdai_valuation.csv')

# 去重:同一债券同一天只保留一条
df = df.drop_duplicates(subset=['bond_code', 'date'], keep='last')

# 对齐日期格式
df['date'] = pd.to_datetime(df['date'])

# 前向填充缺失的收益率
df['yield'] = df.groupby('bond_code')['yield'].ffill()

# 简单校验:收益率不能为负
df = df[df['yield'] >= 0]

print(f"清洗后数据量: {len(df)} 条")

这段代码看着简单,但实际项目中,你可能会遇到各种奇葩情况。比如某只债券突然收益率变成负数,或者某天所有数据都缺失。这时候就需要加一些异常值检测逻辑。

小技巧:我习惯在清洗完数据后,做一个简单的可视化检查。把每只债券的收益率曲线画出来,一眼就能看出有没有异常跳点。比看数字快多了。

1.5 固收数据全景图

为了让你更直观地理解整个数据体系,我画了一张图。这张图涵盖了数据源、数据频率、清洗流程和最终应用。

固收数据全景图 中债登 上清所 CFETS 数据频率:日频 / 分钟频 / 逐笔 数据清洗四步法 去重 → 对齐 → 填充 → 校验 因子分析 策略回测 风险管理

这张图把整个流程串起来了。从数据源到清洗,再到应用,每一步都不能跳过。我见过太多人直接拿原始数据跑策略,结果可想而知。

1.6 本章小结

这一章我们聊了固收数据的三大核心数据源、数据频率的选择、以及数据质量的常见痛点。说白了,数据是固收量化的地基。地基不稳,上面盖的房子再漂亮也没用。

下一章,我们会深入具体的数据清洗技巧,包括如何处理缺失值、如何对齐多源数据、如何做异常值检测。到时候我会拿真实项目中的案例来讲,保证你听完就能用。


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