ratecurve
и parametercurve
Использование ratecurve
или irbootstrap
для создания ratecurve
объект.
% Create a ratecurve Settle = datetime(2019,9,15); Type = "zero"; ZeroTimes = [calmonths(6) calyears([1 2 3 4 5 7 10 20 30])]'; ZeroRates = [0.0052 0.0055 0.0061 0.0073 0.0094 0.0119 0.0168 0.0222 0.0293 0.0307]'; ZeroDates = Settle + ZeroTimes; myRC = ratecurve('zero',Settle,ZeroDates,ZeroRates)
myRC = ratecurve with properties: Type: "zero" Compounding: -1 Basis: 0 Dates: [10×1 datetime] Rates: [10×1 double] Settle: 15-Sep-2019 InterpMethod: "linear" ShortExtrapMethod: "next" LongExtrapMethod: "previous"
Использовать zerorates
, forwardrates
, или discountfactors
с ratecurve
объект.
CurveSettle = datetime(2019,9,15); % zerorates outZeroRates = zerorates(myRC,CurveSettle+30:30:CurveSettle+720) % forwardrates outForwardRates = forwardrates(myRC,datetime(2019,12,15),datetime(2021,9,15),6,7) % discountfactors outDiscountFactors = discountfactors(myRC,CurveSettle+30:30:CurveSettle+720)
outZeroRates = Columns 1 through 14 0.0052 0.0052 0.0052 0.0052 0.0052 0.0052 0.0052 0.0053 0.0053 0.0054 0.0054 0.0055 0.0055 0.0056 Columns 15 through 24 0.0056 0.0057 0.0057 0.0058 0.0058 0.0059 0.0059 0.0060 0.0060 0.0061 outForwardRates = 0.0062 outDiscountFactors = Columns 1 through 14 0.9996 0.9991 0.9987 0.9983 0.9979 0.9974 0.9970 0.9965 0.9961 0.9956 0.9951 0.9946 0.9941 0.9936 Columns 15 through 24 0.9931 0.9926 0.9920 0.9915 0.9910 0.9904 0.9898 0.9893 0.9887 0.9881
Использование parametercurve
, fitNelsonSiegel
, или fitSvensson
для создания parametercurve
объект.
% parametercurve myPC = parametercurve('zero',datetime(2019,9,15),@(t) polyval([-0.0001 0.003 0.02],t),'Parameters',[-0.0001 0.003 0.02])
myPC = parametercurve with properties: Type: "zero" Settle: 15-Sep-2019 Compounding: -1 Basis: 0 FunctionHandle: @(t)polyval([-0.0001,0.003,0.02],t) Parameters: [-1.0000e-04 0.0030 0.0200]
% fitNelsonSiegel Settle = datetime(2017,9,15); Maturity = [datetime(2019,9,15);datetime(2021,9,15);... datetime(2023,9,15);datetime(2026,9,7);... datetime(2035,9,15);datetime(2047,9,15)]; CleanPrice = [100.1;100.1;100.8;96.6;103.3;96.3]; CouponRate = [0.0400;0.0425;0.0450;0.0400;0.0500;0.0425]; nInst = numel(CouponRate); Bonds(nInst,1) = fininstrument.FinInstrument; for ii=1:nInst Bonds(ii) = fininstrument("FixedBond","Maturity",Maturity(ii),... "CouponRate",CouponRate(ii)); end NSModel = fitNelsonSiegel(Settle,Bonds,CleanPrice)
NSModel = parametercurve with properties: Type: "zero" Settle: 15-Sep-2017 Compounding: -1 Basis: 0 FunctionHandle: @(t)fitF(Params,t) Parameters: [1.2473e-05 0.0362 0.0903 16.4263]
% fitSvensson Settle = datetime(2017,9,15); Maturity = [datetime(2019,9,15);datetime(2021,9,15);... datetime(2023,9,15);datetime(2026,9,7);... datetime(2035,9,15);datetime(2047,9,15)]; CleanPrice = [100.1;100.1;100.8;96.6;103.3;96.3]; CouponRate = [0.0400;0.0425;0.0450;0.0400;0.0500;0.0425]; nInst = numel(CouponRate); Bonds(nInst,1) = fininstrument.FinInstrument; for ii=1:nInst Bonds(ii) = fininstrument("FixedBond","Maturity",Maturity(ii),... "CouponRate",CouponRate(ii)); end SvenModel = fitSvensson(Settle,Bonds,CleanPrice)
SvenModel = parametercurve with properties: Type: "zero" Settle: 15-Sep-2017 Compounding: -1 Basis: 0 FunctionHandle: @(t)fitF(Params,t) Parameters: [2.2821 -41.8873 41.4090 -5.9589 0.3255 3.2356]
Использовать zerorates
, discountfactors
, forwardrates
с myPC
parametercurve
объект.
% zerorates CurveSettle = datetime('15-Sep-2019'); outZeroRates = zerorates(myPC,CurveSettle+30:30:CurveSettle+720) % discountfactors CurveSettle = datetime('15-Sep-2019'); outDiscountFactors = discountfactors(myPC,CurveSettle+30:30:CurveSettle+720) % forwardrates outForwardRates = forwardrates(myPC,datetime(2019,9,15),datetime(2020,9,15),6,7)
outZeroRates = Columns 1 through 14 0.0202 0.0205 0.0207 0.0210 0.0212 0.0215 0.0217 0.0219 0.0222 0.0224 0.0226 0.0229 0.0231 0.0233 Columns 15 through 24 0.0235 0.0238 0.0240 0.0242 0.0244 0.0246 0.0249 0.0251 0.0253 0.0255 outDiscountFactors = Columns 1 through 14 0.9983 0.9966 0.9949 0.9931 0.9913 0.9895 0.9876 0.9857 0.9838 0.9818 0.9798 0.9778 0.9757 0.9736 Columns 15 through 24 0.9715 0.9693 0.9671 0.9649 0.9627 0.9604 0.9581 0.9558 0.9534 0.9510 outForwardRates = 0.0229
RateSpec
в ratecurve
ОбъектМожно создать RateSpec
использование intenvset
или toRateSpec
от IRDataCurve
объект. Затем можно скрыть это ранее созданное RateSpec
в ratecurve
объект.
% Assume there is a RateSpec Settle = datetime('01-Oct-2019'); ZeroTimes = [calmonths(6) calyears([1 2 3 4 5 7 10 20 30])]'; ZeroRates = [0.0052 0.0055 0.0061 0.0073 0.0094 0.0119 0.0168 0.0222 0.0293 0.0307]'; ZeroDates = Settle + ZeroTimes; Basis = 1; RateSpec = intenvset('StartDates', Settle, 'EndDates', ZeroDates, ... 'Rates', ZeroRates, 'Basis', Basis)
RateSpec = struct with fields: FinObj: 'RateSpec' Compounding: 2 Disc: [10×1 double] Rates: [10×1 double] EndTimes: [10×1 double] StartTimes: [10×1 double] EndDates: [10×1 double] StartDates: 737699 ValuationDate: 737699 Basis: 1 EndMonthRule: 1
% Convert the RateSpec to a ratecurve myRC = ratecurve("zero",RateSpec.ValuationDate,RateSpec.EndDates,RateSpec.Rates,... "Compounding",RateSpec.Compounding,"Basis",RateSpec.Basis)
myRC = ratecurve with properties: Type: "zero" Compounding: 2 Basis: 1 Dates: [10×1 datetime] Rates: [10×1 double] Settle: 01-Oct-2019 InterpMethod: "linear" ShortExtrapMethod: "next" LongExtrapMethod: "previous"
% Check the discount factors OldDF = intenvget(intenvset(RateSpec,'EndDates',datetime('01-Oct-2024')),'Disc') NewDF = discountfactors(myRC,datetime('01-Oct-2024'))
OldDF = 0.9424 NewDF = 0.9424
В этом случае RateSpec
и ratecurve
идентичны. Это может быть не всегда, потому что yearfrac
используется для вычисления времени в ratecurve
в то время как date2time
используется при вычислении RateSpec
. Для получения дополнительной информации смотрите Различие между yearfrac и date2time.
fininstrument
| finmodel
| finpricer