献给梁博和各位:
Matlab Fixed Income Toolbox提供了fitSvensson和fitNelsonSiegel等过程,但是这个过程并不适合我们,主要以下几个因素:
1. 需要输入完整的债券信息(起息日,到期日,息票利率),比较麻烦。并且不同的债券有不同的付息频率,而系统提供的过程只能选择整体债券的compounding频率,不符合我国国情。
2. 该过程算zero rate比较合适,而国内即期利率的运用还不是很发达呀。故它提供的过程可能一般性不高。
其实只要使用matlab提供的原始的lsqcurvefit和lsqnonlin即可算出NSS模型,拥有每个债券的Yield(zero, par, coupon, ytm)和time to maturity就可以计算各种收益率曲线了。下面的程序计算的是“到期收益率曲线”:
用lsqcurvefit实现:
第一个文件NSScurvefit.m
第二个文件NSScurvefit2.m
用lsqnonlin实现(微小差别):
第一个文件NSSnonlin.m:
第二个文件NSSnonlin2.m:
最后的图片都是一样的:
当然,Term structure的制作过程很复杂,包括挑选债券,剔除掉交易不频繁的;对于某些银行间债券选取双边报价价差较小的作为定价基础;对于某些期限采取其他定价方式等等。
中债登给出的收益率曲线是三次Hermite插值法,并且是分段制作的,很麻烦。有兴趣的人可以继续研究一下。