exponenta event banner

Анализ индексированных по инфляции инструментов

В этом примере показано, как анализировать индексированные по инфляции инструменты с помощью Toolbox™ финансовых Toolbox™ и финансовых инструментов.

Расчет реальных цен и доходности по индексированным по инфляции облигациям

В то время как индексированные по инфляции облигации имеют значительную вариацию в конструкции, например, продолжительность задержки индексации, большинство индексированных по инфляции облигаций в настоящее время имеют трехмесячную задержку. Они также индексируются по капиталу, то есть принципал облигации индексируется на инфляцию. Следовательно, ставка купона облигации является постоянной, но фактические выплаты купона изменяются, поскольку основная сумма облигации индексируется на уровень инфляции.

В частности, индексация выполняется при следующем соотношении:

Коэффициент индекса = CPIRefCPIBase

где CPIBase - уровень индекса потребительских цен (или эквивалентного показателя цены) на момент выпуска облигации, а CPIRef - эталонный ИПЦ.

Как правило, CPIRef вычисляется путем интерполяции между данными индекса известной кривой индекса инфляции. Для вычисления денежных потоков для индексированной по инфляции облигации просто вычисляются соответствующие ссылочные ИПЦ и коэффициент индекса.

Рыночное соглашение для индексированных по инфляции облигаций заключается в котировке цены и доходности с использованием фактического (то есть нескорректированного) купона, что означает, что ваша котировка является реальной ценой и доходностью. Для получения реальной цены и доходности можно использовать функции 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')

Figure contains an axes. The axes with title Nominal and Real Yield Curves for US Data, September 2, 2008 contains 4 objects of type scatter, line. These objects represent Nominal yields, TIPS yields, Svensson fit to nominal yields, Nelson-Siegel fit to TIPS yields.

% 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')

Figure contains an axes. The axes with title Inflation-Rate Curve for US Data, September 2, 2008 contains an object of type line. This object represents Inflation-rate curve computed from bond yields.

Построение кривых инфляции на основе свопов с нулевым купоном

На рынке также наблюдался рост связанных с инфляцией деривативов. Некоторые из наиболее ликвидно торгуемых производных от инфляции являются нулевыми купонными инфляционными свопами (ZeroCouponInflationSwap) и годовые инфляционные свопы (YearYearInflationSwap).

При инфляционном свопе с нулевым купоном плательщик инфляции соглашается выплачивать ставку инфляции при погашении (отставании на определенную сумму), усугубляемую количеством лет. Приемник инфляции обычно платит фиксированную ставку, снова дополненную тенором инструмента. В начале свопа на инфляцию с нулевым купоном фиксированная ставка устанавливается на прогнозируемый уровень инфляции на весь срок действия свопа. Эта ставка называется «безубыточной ставкой инфляционного свопа» и котируется на рынке [6].

Используя нотацию из Hurd и Relleen, вы вычисляете скорость как:

(1 + Rateswap) T = (1 + инфляция-L, t + T-L) T

где t - текущее время, T - тенор, а L - запаздывание. [5]

При погашении фактические денежные потоки ноль-купонного инфляционного свопа:

FixedLeg = N × [(1 + k) M-1]

Кол-во = N × [I (TM) I0-1]

где

  • N- ссылочное условное обозначение подкачки.

  • k - фиксированный уровень инфляции.

  • Mis количество лет для жизни своп.

  • I (TM) - индекс инфляции на дату погашения с некоторым лагом (например, три месяца).

  • I0 - индекс инфляции на дату начала с некоторым лагом (например, три месяца).

Хотя фиксированный денежный поток может отличаться от фактического денежного потока на этапе инфляции на момент погашения, фиксированная безубыточная ставка инфляционного свопа свопа с нулевым купоном представляет прогнозируемый уровень инфляции на момент начала свопа. Можно построить кривую инфляции из серии безубыточных нулевых купонных ставок свопа инфляции, начиная с одной даты и заканчивая различными датами. Здесь даты уже корректируются с соответствующим запаздыванием индексации для упрощения обозначения:

I (0, T1Y) = I (T0) (1 + b (0; T0, T1Y)) T1Y-T0

I (0, T2Y) = I (T0) (1 + b (0; T0, T2Y)) T2Y-T0

I (0, T3Y) = I (T0) (1 + b (0; T0, T3Y)) T3Y-T0

...

I (0, Ti) = I (T0) (1 + b (0; T0, Ti)) Ti-T0

где

  • I (0,Ti) - ссылочный номер индекса безубыточности инфляции для даты погашения Ti.

  • I (T0) - базовое значение индекса инфляции для начальной даты T0.

  • b (0;T0,Ti) - безубыточный уровень инфляции для свопа инфляции с нулевым купоном со сроком погашения по 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]'./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')

Figure contains an axes. The axes with title Inflation-Index Curve Built from Zero-Coupon Inflation Swaps (ZCIS) contains 2 objects of type line. These objects represent Interpolated inflation-index values, ZCIS inflation-index values.

Индексированные по инфляции инструменты с использованием кривой инфляции

С помощью 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.

См. также

| | | | | | | | |

Связанные темы