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 (Financial Toolbox).
fininstrument
| finmodel
| finpricer