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

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

Вычислите действительные цены и выражения для индексированных инфляцией связей

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

А именно, индексация сделана со следующим отношением:

IndexRatio=CPIRefCPIBase

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

Как правило, вы вычисляете CPIRef путем интерполяции между данными об индексе известной кривой индекса инфляции. Чтобы вычислить потоки наличности для индексированной инфляцией связи, вы просто вычисляете соответствующий ссылочный 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')

Figure contains an axes object. The axes object 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 object. The axes object 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].

Используя обозначение от Херда и Реллина, вы вычисляете уровень как:

(1+Rateswap)T=(1+Inflationt-L,t+T-L)T

где t является текущим временем, T является тенором, и L является задержкой. [5]

В зрелости фактические потоки наличности подкачки инфляции нулевого купона:

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

InflationLeg=N×[I(TM)I0-1]

где

  • Nссылка, отвлеченная из подкачки.

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

  • Mномер лет для жизни подкачки.

  • 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 object. The axes object 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] 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.

Смотрите также

| | | | | | | | |

Похожие темы