2012-08-13 5 views
0

이 코드는 fitSvensson 함수에 따라 가격이 책정됩니다. 누락 된 가격에 대해 일부 채권에 NaN 항목이있는 날짜를 선택하면 ClearPrice 벡터에서 NaN 값을 무시하도록 Matlab을 어떻게 얻습니까? 제로 곡선을 도출 할 때 어떻게 그 유대감을 무시하도록 할 수 있습니까? NaN에 대한 많은 솔루션이 보간법이나 0으로 설정되어 있지만 이것이 잘못된 곡선으로 이어질 것입니다.Matlab 계산에서 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이 포함되어 있지만 가격은 없습니다. 모든 채권에는 가격이 붙어 있지만 불행히도 1 ~ 2 일 가격이없는 경우가 있습니다. 이상적으로, NaN이있는 경우 가능한 한 더 많은 곡선이 생성됨에 따라 (해당 채권의 수와 관계없이) 더 나은 날짜로 해당 채권을 무시하고 싶습니다. 이것이 불가능할 경우 그 날짜를 무시하는 것은 옵션이지만 많은 곡선이 생성되지 않습니다. CleanPrice data

+0

예제 데이터를 입력 할 수 있습니까? 그 채권의 전체 또는 그 날짜 또는 그 날짜의 채권을 무시하고 싶습니까? 처음 두 가지 옵션 중 하나가되어야한다고 생각합니다. – Dan

+3

자신 만의 핸들러를 작성하려면'isnan'을 체크하고'nanmean '과 같은 기존 NaN 핸들링 함수를 사용하십시오. – jmetz

+0

@ Dan. 고맙습니다 .- 나는 더 많은 정보를 포함하도록 질문을 편집했습니다. 그 날짜에 그 채권을 제거하는 것이 가능하다면 그것은 내가 필요로하는 것에 대해 우수 할 것입니다. – Mary

답변

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)); 
+0

고마워요! 나는 열과 행에 대한 refs를 업데이트하고 멋지게 작동합니다 .hhx! 비록 당신이 이것을 도울 수 있다면 나는 v.grateful이 될 것이다 : 나는 연속적인 SettleDates의 nTrials를위한 for-loop를 가지고있다. ** 그러나 가격 배열을 계산할 때 나는 문제가있다 : Diff = PriceActual-PriceNSS where [PriceActual, AccruedIntActual] = bndprice (수익률, 할인율, 정산금, 만기); [PriceNSS, AccruedIntNSS] = bndprice (ParYield, CouponRate, Settle, Maturity); Diff는 (nTrials x col) 배열로 나타납니다 (여기서 col = <36). Diff 요소가 본드와 일치하도록 간격이 0 인 고정 (nTrials x 36) 크기 여야합니다. – Mary

+0

나는 문제를 이해하고 있다고 생각하지만 그것을 다시 말하게하려고한다. 당신이 모든 날짜에 모든 채권을 포함하고 있지 않기 때문에, 당신이 가격을 반환하는 채권의 수는 날짜별로 다르다. 이 문제를 해결하려면 NaN이 아닌 좋은 가격의 유대를 저장하거나 다시 만들어야합니다. 가장 쉬운 방법은 다음과 같습니다 :'col_good = setdiff (2 : 26, col); PriceActual = 0 (1,25); accruedInActual = 0 (1,25); 원래의 setdiff는 기본적으로 "나에게 좋은 열을 배치 할 색인을 주겠다"라고 말합니다. [PriceActual (1, col_good), accruedInActual (1, col_good)] = bndPrice (ParYield, CouponRate, Settle, Maturity) – Salain