В этом примере показано, как анализировать индексированные инфляцией инструменты с помощью Financial Toolbox™ и Financial Instruments Toolbox™.
В то время как индексированные инфляцией связи имеют большое изменение проекта, например, продолжительность задержки индексации, у большинства индексированных инфляцией связей теперь есть трехмесячная задержка. Они также индексируются капиталом, то есть, принципал связи индексируется к инфляции. Поэтому купонная ставка связи является постоянной, но фактические купонные платежи варьируются, когда принципал связи индексируется к инфляции.
А именно, индексация сделана со следующим отношением:
где уровень индекса потребительских цен (или эквивалентная ценовая мера) во время проблемы связи и ссылочный CPI.
Как правило, вы вычисляете путем интерполяции между данными об индексе известной кривой индекса инфляции. Чтобы вычислить потоки наличности для индексированной инфляцией связи, вы просто вычисляете соответствующий ссылочный CPI и индексируете Отношение.
Соглашение рынка для индексированных инфляцией связей состоит в том, чтобы заключить в кавычки цену и выражение с помощью фактического (то есть, неприспособленный) купон, что означает, что кавычка является действительной ценой и выражением. Чтобы получить действительную цену и выражение, можно использовать функции Financial Toolbox™ bndprice
и bndyield
. Например:
Price = 124 + 9/32; Settle = datetime(2009,9,28); Coupon = .03375; Maturity = datetime(2032,4,15); RealYield = bndyield(Price,Coupon,Settle,Maturity); disp(['Real Yield: ', num2str(RealYield*100) '%'])
Real Yield: 2.0278%
С появлением индексированного инфляцией рынка облигаций действительные кривые могут быть созданы подобным способом к номинальным кривым. Используя доступные данные о рынке, можно создать действительную кривую и сравнить его с номинальной кривой.
Обратите внимание на то, что одна проблема относится к задержке индексации связей. Как утверждено ранее, обычно задержка индексации составляет три месяца, что означает, что компенсация инфляции на самом деле не подходится в зрелости или купонных платежах связи. В то время как Андерсон и Слит [1] обсуждают подход к решению этого несоответствия для этого примера, задержка просто отмечена.
Можно использовать fitNelsonSiegel
and
fitSvensson
функции в Financial Instruments Toolbox™, чтобы создать parametercurve
объекты, которые подбирают модели Нельсона-Сигеля и Свенсона к действительным и номинальным кривым доходности в США. Модель Нельсона-Сигеля обычно устанавливает ограничения для параметров модели, чтобы гарантировать, что процентные ставки всегда положительны. Однако действительные процентные ставки могут быть отрицательными, что означает, что эти ограничения Нельсона-Сигеля не используются в случае ниже.
% Load the data. load usbond_02Sep2008 Settle = datetime(2008, 9, 2); NominalTimeToMaturity = yearfrac(Settle,NominalMaturity); TIPSTimeToMaturity = yearfrac(Settle,TIPSMaturity); % Compute the yields. NominalYield = bndyield(NominalPrice,NominalCoupon,Settle,NominalMaturity); TIPSYield = bndyield(TIPSPrice,TIPSCoupon,Settle,TIPSMaturity); % Plot the yields. scatter(NominalTimeToMaturity,NominalYield*100,'r'); hold on; scatter(TIPSTimeToMaturity,TIPSYield*100,'b'); % Fit the real yield curve using fitNelsonSiegel. nInst = numel(TIPSCoupon); TIPSBonds(nInst,1) = fininstrument.FinInstrument; for ii=1:nInst TIPSBonds(ii) = fininstrument("FixedBond",'Maturity',TIPSMaturity(ii),... 'CouponRate',TIPSCoupon(ii)); end TIPSNelsonSiegel = fitNelsonSiegel(Settle,TIPSBonds,TIPSPrice);
Local minimum possible. lsqnonlin stopped because the final change in the sum of squares relative to its initial value is less than the value of the function tolerance.
% Fit the nominal yield curve using fitSvensson. nInst = numel(NominalCoupon); NominalBonds(nInst,1) = fininstrument.FinInstrument; for ii=1:nInst NominalBonds(ii) = fininstrument("FixedBond",'Maturity',NominalMaturity(ii),... 'CouponRate',NominalCoupon(ii)); end NominalSvensson = fitSvensson(Settle,NominalBonds,NominalPrice);
Solver stopped prematurely. lsqnonlin stopped because it exceeded the function evaluation limit, options.MaxFunctionEvaluations = 6.000000e+02.
% Plot the nominal and real yield curves. PlotDates = (Settle+calmonths(1):calmonths(1):Settle+calyears(30)-1)'; PlotTimeToMaturity = yearfrac(Settle,PlotDates); TIPSNelsonSiegelZeroRates = zerorates(TIPSNelsonSiegel,PlotDates); TIPSNelsonSiegelParYields = zero2pyld(TIPSNelsonSiegelZeroRates,PlotDates,Settle, ... 'InputCompounding', -1, 'OutputCompounding', 2); NominalSvenssonZeroRates = zerorates(NominalSvensson,PlotDates); NominalSvenssonParYields = zero2pyld(NominalSvenssonZeroRates,PlotDates,Settle, ... 'InputCompounding', -1, 'OutputCompounding', 2); plot(PlotTimeToMaturity,NominalSvenssonParYields*100,'r') plot(PlotTimeToMaturity,TIPSNelsonSiegelParYields*100,'b') hold off; title('Nominal and Real Yield Curves for US Data, September 2, 2008') xlabel('Time (Years)') ylabel('Yield (%)') legend({'Nominal yields','TIPS yields','Svensson fit to nominal yields',... 'Nelson-Siegel fit to TIPS yields'},'location','southeast')
% Create an inflation-rate curve by subtracting the real curve from the % nominal curve. InflationRateCurve = ratecurve("zero", Settle, PlotDates, ... NominalSvenssonZeroRates - TIPSNelsonSiegelZeroRates); figure plot(PlotTimeToMaturity, zero2pyld(... zerorates(InflationRateCurve, PlotDates), PlotDates, Settle, ... 'InputCompounding', -1, 'OutputCompounding', 2)*100,'b'); title('Inflation-Rate Curve for US Data, September 2, 2008') xlabel('Time (Years)') ylabel('Inflation Rate (%)') legend({'Inflation-rate curve computed from bond yields'},'location','southeast')
Соединенные с инфляцией производные также испытали рост в рынке. Некоторые наиболее жидко проданные производные инфляции являются подкачками инфляции нулевого купона (ZeroCouponInflationSwap
) и подкачки инфляции в годовом исчислении (YearYearInflationSwap
).
В подкачке инфляции нулевого купона плательщик инфляции соглашается заплатить уровень инфляции при зрелости (изолированный определенной суммой) составленный номером лет. Приемник инфляции обычно платит фиксированную процентную ставку, снова составленную тенором инструмента. В начале подкачки инфляции нулевого купона фиксированная процентная ставка установлена в спроектированный уровень инфляции для жизни подкачки. Этот уровень называется "сбалансированным уровнем подкачки инфляции", и это заключается в кавычки на рынке [6].
Используя обозначение от Херда и Реллина, вы вычисляете уровень как:
где t является текущим временем, T является тенором, и L является задержкой. [5]
В зрелости фактические потоки наличности подкачки инфляции нулевого купона:
где
ссылка, отвлеченная из подкачки.
фиксированный уровень инфляции.
номер лет для жизни подкачки.
индекс инфляции в дате погашения с некоторой задержкой (например, тремя месяцами).
индекс инфляции в дате начала с некоторой задержкой (например, тремя месяцами).
В то время как поток наличности фиксированного участка может отличаться от фактического потока наличности участка инфляции в зрелости, фиксируемая сбалансированная ставка подкачки инфляции подкачки инфляции нулевого купона представляет спроектированный уровень инфляции в течение срока подкачки в начале. Можно создать кривую инфляции из серии сбалансированных уровней подкачки инфляции нулевого купона, запускающихся в ту же дату и назревающих в различные даты. Здесь, даты уже настроены с соответствующей задержкой индексации, чтобы упростить обозначение:
где
сбалансированный номер ссылки на указатель инфляции для даты погашения .
основное значение индекса инфляции для срока начала работы .
сбалансированный уровень инфляции для подкачки инфляции нулевого купона, назревающей на .
Можно получить кривую инфляции это при помощи inflationbuild
функция, чтобы создать inflationcurve
объект. Создавать inflationcurve
от уровней подкачки инфляции нулевого купона сначала задайте основную дату инфляции и соответствующее основное значение индекса инфляции.
% Define the base inflation date and index value for the inflation-index % curve. BaseDate = datetime(2020,6,1); BaseIndexValue = 100;
Затем задайте уровни подкачки инфляции нулевого купона и соответствующие даты погашения, уже настроенные с соответствующей задержкой индексации.
% Define the zero-coupon inflation swap rates and maturity dates.
ZCISTimes = (calyears([1 2 3 4 5 7 10 20 30]))';
ZCISRates = [0.42 0.54 0.76 0.87 0.92 1.39 1.71 2.01 2.46]'./100
ZCISRates = 9×1
0.0042
0.0054
0.0076
0.0087
0.0092
0.0139
0.0171
0.0201
0.0246
ZCISDates = BaseDate + ZCISTimes
ZCISDates = 9x1 datetime
01-Jun-2021
01-Jun-2022
01-Jun-2023
01-Jun-2024
01-Jun-2025
01-Jun-2027
01-Jun-2030
01-Jun-2040
01-Jun-2050
В оценке производных инфляции и создании кривых инфляции, включая сезонность может быть критический фактор. Уровни подкачки инфляции нулевого купона обычно имеют сроки платежа, которые увеличиваются в целом числе лет. В результате кривая инфляции обычно создается из уровней подкачки инфляции нулевого купона на ежегодном базисе. Однако, когда вычислительные значения индекса инфляции в течение ежемесячных периодов, которые не являются целым числом лет, можно внести сезонные корректировки, чтобы отразить сезонные шаблоны инфляции в течение года. Эти 12 ежемесячных сезонных уровней пересчитаны на год, и они складывают, чтобы обнулить, чтобы гарантировать, что совокупные сезонные корректировки сброшены до нуля, чтобы обнулять каждый год. В inflationbuild
функционируйте и inflationcurve
объект, вы задаете эти сезонные уровни с помощью 'Seasonality'
аргумент пары "имя-значение" и они внутренне корректируются, чтобы гарантировать, что они добавляют к нулю.
% Define the 12 monthly seasonal rates. % % Months: % Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec % 1 2 3 4 5 6 7 8 9 10 11 12 % Seasonal Rates (percent): % -6.34 -3.00 -1.34 3.34 5.34 3.66 8.66 5.66 -2.34 -2.66 -4.66 -6.32 SeasonalRates = [-6.34 -3.00 -1.34 3.34 5.34 3.66 8.66 5.66 -2.34 -2.66 -4.66 -6.32]./100
SeasonalRates = 1×12
-0.0634 -0.0300 -0.0134 0.0334 0.0534 0.0366 0.0866 0.0566 -0.0234 -0.0266 -0.0466 -0.0632
% Build an inflation-index curve from zero-coupon inflation swap rates. myInflationCurve = inflationbuild(BaseDate, BaseIndexValue, ... ZCISDates, ZCISRates, 'Seasonality', SeasonalRates)
myInflationCurve = inflationcurve with properties: Basis: 0 Dates: [10x1 datetime] InflationIndexValues: [10x1 double] ForwardInflationRates: [9x1 double] Seasonality: [12x1 double]
Если вы создали inflationcurve
возразите, вычислите значения индекса инфляции в течение каждого месяца с помощью indexvalues
.
% Compute the inflation-index values.
IndexPlotDates = (BaseDate:calmonths(1):BaseDate+calyears(10))';
IndexPlotValues = indexvalues(myInflationCurve, IndexPlotDates);
Чтобы визуализировать сезонные шаблоны инфляции, которые происходят в течение каждого года, постройте вычисленные значения индекса инфляции.
% Plot the inflation-index curve. figure; plot(IndexPlotDates, IndexPlotValues) hold on; plot(myInflationCurve.Dates(1:8), myInflationCurve.InflationIndexValues(1:8), 'o') hold off; title('Inflation-Index Curve Built from Zero-Coupon Inflation Swaps (ZCIS)') xlabel('Years') ylabel('Inflation-Index Values') legend({'Interpolated inflation-index values','ZCIS inflation-index values'},'location','northwest')
С inflationcurve
объект создал, вы можете индексированные инфляцией цен инструменты, такие как подкачки инфляции нулевого купона (ZeroCouponInflationSwap
), подкачки инфляции в годовом исчислении (YearYearInflationSwap
), и индексированные инфляцией связи (InflationBond
).
Во-первых, создайте ratecurve
объект с помощью ratecurve
.
Settle = datetime(2020,9,25); Type = "zero"; ZeroTimes = [calmonths(6) calyears([1 2 3 4 5 7 10 20 30])]'; ZeroRates = [0.0043 0.0051 0.0062 0.0072 0.0096 0.0121 0.0172 0.0241 0.0302 0.0308]'; ZeroDates = Settle + ZeroTimes; ZeroCurve = ratecurve('zero',Settle,ZeroDates,ZeroRates)
ZeroCurve = ratecurve with properties: Type: "zero" Compounding: -1 Basis: 0 Dates: [10x1 datetime] Rates: [10x1 double] Settle: 25-Sep-2020 InterpMethod: "linear" ShortExtrapMethod: "next" LongExtrapMethod: "previous"
Используя ratecurve
и inflationcurve
объекты как входные параметры, создайте Inflation
объект калькулятора цен использование finpricer
.
outPricer = finpricer("Inflation",'DiscountCurve',ZeroCurve,'InflationCurve',myInflationCurve)
outPricer = Inflation with properties: DiscountCurve: [1x1 ratecurve] InflationCurve: [1x1 inflationcurve]
Создайте InflationBond
инструмент с помощью fininstrument
.
IssueDate = datetime(2020,9,20); Maturity = datetime(2025,9,20); CouponRate = 0.023; InflationBond = fininstrument("InflationBond",'IssueDate',IssueDate,'Maturity',Maturity,'CouponRate',CouponRate)
InflationBond = InflationBond with properties: CouponRate: 0.0230 Period: 2 Basis: 0 Principal: 100 DaycountAdjustedCashFlow: 0 Lag: 3 BusinessDayConvention: "actual" Holidays: NaT EndMonthRule: 1 IssueDate: 20-Sep-2020 FirstCouponDate: NaT LastCouponDate: NaT Maturity: 20-Sep-2025 Name: ""
Здесь, задержка индексации по умолчанию составляет три месяца, и датой выпуска облигаций является 20-Sep-2020
. Первое свидание на кривой инфляции калькулятора цен должно быть включено или перед 20-Jun-2020
оценивать этот инструмент. В этом примере первым свиданием на кривой инфляции калькулятора цен является 01-Jun-2020
.
Оцените InflationBond
инструмент при помощи price
функция для Inflation
калькулятор цен.
InflationBondPrice = price(outPricer, InflationBond)
InflationBondPrice = 110.1314
Этот пример основан на следующих бумагах и статьях в журнале:
[1] Андерсон Н. и Дж. Слит. "Новые Оценки Великобритании Действительные и Номинальные Кривые доходности". Банк Англии, рабочий документ 126, 2001.
[2] Brigo, D. и Ф. Меркурио. Модели процентной ставки - теория и практика: с улыбкой, инфляцией и кредитом. Спрингер, 2006.
[3] Диакон, М., А. Дерри и Д. Мирфендереский. Inflation-Indexed Securities: связи, подкачки и другие производные. Финансы Вайли, 2004.
[4] Gurkaynak, R. S. B.P. Увольте, и Дж.Х. Райт. "Компенсация кривой доходности и инфляции TIPS". ФЕДЕРАЛЬНЫЙ рабочий документ № 2008-05, октябрь 2008.
[5] Херд, M. и Дж. Реллин. "Новая информация от подкачек инфляции и индексированных связей". Ежеквартальный бюллетень, Spring 2006.
[6] Kerkhof, J. "Объясненные производные инфляции". Lehman Brothers, 2005.
fininstrument
| finpricer
| ratecurve
| inflationbuild
| indexvalues
| inflationcurve
| InflationBond
| YearYearInflationSwap
| ZeroCouponInflationSwap
| Inflation