В этом примере показано, как анализировать индексированные по инфляции инструменты с помощью Toolbox™ финансовых Toolbox™ и финансовых инструментов.
В то время как индексированные по инфляции облигации имеют значительную вариацию в конструкции, например, продолжительность задержки индексации, большинство индексированных по инфляции облигаций в настоящее время имеют трехмесячную задержку. Они также индексируются по капиталу, то есть принципал облигации индексируется на инфляцию. Следовательно, ставка купона облигации является постоянной, но фактические выплаты купона изменяются, поскольку основная сумма облигации индексируется на уровень инфляции.
В частности, индексация выполняется при следующем соотношении:
CPIRefCPIBase
где - уровень индекса потребительских цен (или эквивалентного показателя цены) на момент выпуска облигации, а - эталонный ИПЦ.
Как правило, вычисляется путем интерполяции между данными индекса известной кривой индекса инфляции. Для вычисления денежных потоков для индексированной по инфляции облигации просто вычисляются соответствующие ссылочные ИПЦ и коэффициент индекса.
Рыночное соглашение для индексированных по инфляции облигаций заключается в котировке цены и доходности с использованием фактического (то есть нескорректированного) купона, что означает, что ваша котировка является реальной ценой и доходностью. Для получения реальной цены и доходности можно использовать функции 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 функции в 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].
Используя нотацию из Hurd и Relleen, вы вычисляете скорость как:
t + T-L) T
где t - текущее время, T - тенор, а L - запаздывание. [5]
При погашении фактические денежные потоки ноль-купонного инфляционного свопа:
k) M-1]
I0-1]
где
N- ссылочное условное обозначение подкачки.
- фиксированный уровень инфляции.
Mis количество лет для жизни своп.
) - индекс инфляции на дату погашения с некоторым лагом (например, три месяца).
- индекс инфляции на дату начала с некоторым лагом (например, три месяца).
Хотя фиксированный денежный поток может отличаться от фактического денежного потока на этапе инфляции на момент погашения, фиксированная безубыточная ставка инфляционного свопа свопа с нулевым купоном представляет прогнозируемый уровень инфляции на момент начала свопа. Можно построить кривую инфляции из серии безубыточных нулевых купонных ставок свопа инфляции, начиная с одной даты и заканчивая различными датами. Здесь даты уже корректируются с соответствующим запаздыванием индексации для упрощения обозначения:
T1Y)) T1Y-T0
T2Y)) T2Y-T0
T3Y)) T3Y-T0
, Ti)) Ti-T0
где
) - ссылочный номер индекса безубыточности инфляции для даты погашения Ti.
) - базовое значение индекса инфляции для начальной даты T0.
) - безубыточный уровень инфляции для свопа инфляции с нулевым купоном со сроком погашения по Ti.
Вы можете получить свою кривую инфляции, используя 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]'./100ZCISRates = 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] Бриго, Д. и Ф. Меркурио. Модели процентных ставок - теория и практика: с улыбкой, инфляция и кредит. Спрингер, 2006.
[3] Диакон, М., А. Дерри и Д. Мирфендереский. Индексированные по инфляции ценные бумаги: облигации, свопы и другие деривативы. Уайли Финанс, 2004.
[4] Гуркайнак, Р. С., Б. П. Сак и Дж. Х. Райт. «Кривая доходности TIPS и компенсация инфляции». Рабочий документ FEDS № 2008-05, октябрь 2008 года.
[5] Херд, М. и Дж. Реллин. «Новая информация из инфляционных свопов и индексных облигаций». Ежеквартальный бюллетень, весна 2006 года.
[6] Керкхоф, Дж. «Производные от инфляции, объясненные». Lehman Brothers, 2005.
fininstrument | finpricer | indexvalues | Inflation | InflationBond | inflationbuild | inflationcurve | ratecurve | YearYearInflationSwap | ZeroCouponInflationSwap