此代码根据fitSvensson函数定价。当选择了某些债券具有缺失价格的NaN条目的日期时,如何让Matlab忽略CleanPrice向量中的NaN值。在得出零曲线时,如何让它完全忽略该键?似乎NaN的许多解决方案都采用插值或设置为零,但这会导致错误的曲线。
Maturity=gcm3.data.CouponandMaturity(1:36,2);
[r,c]=find(gcm3.data.CleanPrice==datenum('11-May-2012'));
row=r
SettleDate=gcm3.data.CouponandMaturity(row,3);
Settle = repmat(SettleDate,[length(Maturity) 1]);
CleanPrices =transpose(gcm3.data.CleanPrice(row,2:end));
CouponRate = gcm3.data.CouponandMaturity(1:36,1);
Instruments = [Settle Maturity CleanPrices CouponRate];
PlottingPoints = gcm3.data.CouponandMaturity(1,2):gcm3.data.CouponandMaturity(36,2);
Yield = bndyield(CleanPrices,CouponRate,Settle,Maturity);
SvenssonModel = IRFunctionCurve.fitSvensson('Zero',SettleDate,Instruments)
ParYield=SvenssonModel.getParYields(Maturity);
数据看起来像这样,每列是一个债券,第1列是日期,元素是清洁价格。正如您所看到的,数据的第一部分包含许多尚未定价的债券的NaN。在一分之后,所有债券都有价格但不幸的是有一两天的价格缺失。 理想情况下,如果存在NaN,我希望它在该日期忽略该键,如果可能的话,因为生成的曲线越多(无论使用的键数),就越好。如果这是不可能的,那么忽略该日期是一个选项,但会导致许多曲线无法生成。
答案 0 :(得分:2)
这是您的问题的一般解决方案。我的工作计算机上没有该工具箱,因此我无法测试它是否适用于IRFunctionCurve.fitSvensson命令
[row,~]=find(gcm3.data.CleanPrice(:,1)==datenum('11-May-2012'));
col_set=find(~isnan(gcm3.data.CleanPrice(row,2:end)));
CleanPrices=transpose(gcm3.data.CleanPrice(row,col));