踩了惊天大坑!昨天的 30 年国债数据算错了

发布于: 雪球转发:1回复:12喜欢:9

昨天写了篇两个 30 年国债 ETF 的对比,包括两个指数的历史数据对比。

很不幸,我踩坑了,还是个超级大坑。

在我昨天文章的计算中,中债 - 30 年期国债财富 (总值) 指数的历史表现看起来是不如中证沪 30 年国债。

但昨晚盘后我再直接用 Wind 对比这两组年度数据的时候,却发现结果是反的 —— 实际上中债指数的历史回报高于中证的

到底哪里出错了呢?

查了半天底层数据,才发现真是隔行如隔山,平常研究 A 股多,一旦跨界债券领域,就踩了一个大坑 ——交易日不对齐

首先要普及一个知识,30 年国债这类债券指数的成分债券,除了在上证所这样交易所上市之外,还有一个交易场所是全国银行间债券市场

而全国银行间债券市场的开市日期,与沪深两地证交所,是不完全同步的 ——在一些 A 股休市的日期,全国银行间债券市场也是交易的

而这种不同步,也会进而影响到两套债券指数。

中债 - 30 年期国债财富 (总值) 指数是中央国债登记结算有限责任公司中债金融估值中心编制并发布,只要有债券交易,哪怕 A 股休市,也会有指数更新。最明显的例子就是今年 2 月 4 日是周日,周日 A 股惯例是不开市的,但是因为银行间市场是开市的,所以那天中债 - 30 年期国债财富 (总值) 指数有更新。

而上证 30 年期国债指数,是 “从上海证券交易所上市的债券中,选取符合中国金融期货交易所 30 年期国债期货近月合约可交割条件的国债作为指数样本”,所以上证所休市的时候 (比如 2 月 4 日),他就没数据了。

本来这是一个极小的差异,但在计算长期收益时,却被我的错误数据提取过程给放大了

在计算各类指数的收益数据 (比如年化收益、波动率) 之类,采用的都是 empyrical 这个 python 的统计包,这个包是以日涨跌幅数据作为基础数据来计算的。

问题就来了,当你用 python 接口从 Wind 调用数据的时候,需要交易所日历。因为一直研究 A 股,至多是偶尔用到港交所和美股,所以在这次计算两个 30 年国债指数时,压根没意识到必须要切换到银行间债券交易市场的交易所日历,才能提取完整的数据。

是的,因为我用的上证所交易日历,所以提取出来数据会漏了那些上证所休市但银行间债券市场开市的日期,导致中债 - 30 年期国债财富 (总值) 指数的日涨跌幅数据漏了好几天,所以算出来的结果就全然不靠谱了

下图是直接用两个指数的收盘值,以 2011 年 1 月 4 日为基点,绘制的走势对比,可以看到其实中债 - 30 年期国债财富 (总值) 指数其实还是比中证的两个 30 年国债指数强上这么一点点的。

下表是具体的区间数据,相差很小。

当然,具体到每一年,因为投资范围的细微差别,所以两个指数还是有差异,有点此消彼长的味道。

最后的最后,还是要反思一下,魔鬼在细节之中 (The devil is in thedetails),以后遇到不熟悉的市场类别,数据还是要多校对。其实如果我直接提取年涨跌幅数据,就能规避交易日日历造成的误差,这两个数据的确就能校验出错误了。

$30年国债ETF(SH511090)$ $国债30ETF(SH511130)$

全部讨论

04-03 11:57

夏普比率的无风险为什么取0.03

04-03 07:39

认错、改错,是古代圣贤才能做到的事,冲这份魄力给大佬点个赞

04-03 14:08

纠偏的过程读者也跟着学到新的知识。

04-03 08:10

省点心吧

04-03 15:13

两种都均衡配置即可,走势大差不差

数据容易出错

04-03 09:08

怪不得,原来用的是每日涨跌幅,这样少的几天确实有影响,我还以为是指数点位

04-03 08:05

学习了

04-03 07:59

严谨!