0

此代码根据fitSvensson函数对债券进行定价。How do I get Matlab to ignore NaN values in the CleanPrice vector when a date is selected for which some bonds have a NaN entry for a missing price. 在推导零曲线时,如何让它完全忽略该键?似乎 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,我希望它尽可能忽略该日期的该键,因为生成的曲线越多(无论使用的键数如何)越好。如果这是不可能的,则可以选择忽略该日期,但会导致许多曲线无法生成。 清洁价格数据

4

1 回答 1

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));
于 2012-08-13T18:58:36.503 回答