irbootstrap

Загрузите кривую процентной ставки из данных о рынке

Описание

пример

outCurve = irbootstrap(BootInstruments,Settle) создает структуру данных для того, чтобы хранить данные о структуре термина процентной ставки. outCurve выходом является ratecurve объект.

пример

outCurve = irbootstrap(___,Name,Value) задает опции с помощью одного или нескольких аргументов пары "имя-значение" в дополнение к любой из комбинаций входных аргументов в предыдущем синтаксисе. Например, OutCurve = irbootstrap(Settle,BootInstruments,'Type',"zero",'Compounding',2,'Basis',5,'InterpMethod',"cubic") загружает кривую нулевой ширины от BootInstruments.

Примеры

свернуть все

Задайте депозит и подкачайте параметры

Settle = datetime(2018,3,21);
DepRates = [.0050769 .0054934 .0061432 .0072388 .0093263]';
DepTimes = [1 2 3 6 12]';
DepDates = datemnth(Settle,DepTimes);
nDeposits = length(DepTimes);
 
SwapRates = [.0112597 0;.0128489 0;.0138917 0;.0146135 0;.0151175 0;...
      .0155184 0;.0158536 0;.0161435 0];
SwapTimes = (2:9)';
SwapDates = datemnth(Settle,12*SwapTimes);
nSwaps = length(SwapTimes);
 
nInst = nDeposits + nSwaps;

Создайте вектор из инструментов подкачки рынка

Используйте fininstrument создать вектор из рынка Deposit и Swap инструментальные объекты.

 BootInstruments(nInst,1) = fininstrument.FinInstrument;
 for ii=1:length(DepDates)
      BootInstruments(ii) = fininstrument("deposit",'Maturity',DepDates(ii),'Rate',DepRates(ii));
 end
 
 for ii=1:length(SwapDates)
      BootInstruments(ii+nDeposits) = fininstrument("swap",'Maturity',SwapDates(ii),'LegRate',[SwapRates(ii) 0]);
 end

Создайте ratecurve Объект для кривой Нулевого Уровня

Используйте irbootstrap создать ratecurve объект для кривой нулевого уровня.

ZeroCurve = irbootstrap(BootInstruments,Settle)
ZeroCurve = 
  ratecurve with properties:

                 Type: "zero"
          Compounding: -1
                Basis: 0
                Dates: [13x1 datetime]
                Rates: [13x1 double]
               Settle: 21-Mar-2018
         InterpMethod: "linear"
    ShortExtrapMethod: "next"
     LongExtrapMethod: "previous"

В этом примере показано, как создать ratecurve объект с помощью irbootstrap с Deposit и Swap инструменты и DiscountCurve для дисконтирования потоков наличности.

Settle = datetime(2021,4,15); 
crvDates = Settle + [calmonths([1 2 3 6]) calyears([1 2 3 5 7 10 20 30])]';
crvRates = [0.0004 0.0004 0.0005 0.0006 0.0008 0.0018 0.0037 0.0088 0.013 0.0165 0.022 0.0233]';
DiscountCurve = ratecurve("zero",Settle,crvDates,crvRates);

DepRates = [0.002 0.0021 0.0023 0.0024 .0028]';
DepDates = Settle + calmonths([1 2 3 6 12]');

SwapRates = [0.0041 0;0.0057 0;0.017 0;0.0193 0;0.024 0;0.027 0];
SwapTimes = [2 3 5 10 20 30]';
SwapDates = datemnth(Settle,12*SwapTimes);

BootInstruments = [fininstrument("deposit","Maturity",DepDates,"Rate",DepRates); ...
    fininstrument("swap","Maturity",SwapDates,"LegRate",SwapRates)];

ZeroCurve = irbootstrap(BootInstruments,Settle,'DiscountCurve',DiscountCurve)
ZeroCurve = 
  ratecurve with properties:

                 Type: "zero"
          Compounding: -1
                Basis: 0
                Dates: [11x1 datetime]
                Rates: [11x1 double]
               Settle: 15-Apr-2021
         InterpMethod: "linear"
    ShortExtrapMethod: "next"
     LongExtrapMethod: "previous"

Создайте BootInstruments переменная как входной параметр к irbootstrap создать объект ratecurve. BootInstruments переменная имеет OISFuture инструмент возражает для одномесячных фьючерсов SOFR и трехмесячных фьючерсов SOFR и OvernightIndexedSwap инструментальный объект.

Создайте инструменты

Используйте fininstrument создать OISFuture инструментальный объект для одномесячных фьючерсов SOFR.

Settle = datetime(2021,3,4);
HFDates = datetime(2021,3,1) + caldays(0:3)';
HistFixing = timetable(HFDates,[0.02;0.04;0.04;0.02]);

% Data from the following: https://www.cmegroup.com/trading/interest-rates/stir/one-month-sofr_quotes_globex.html
Prices_1M = [99.97 99.96 99.95]';
Maturity_1M = lbusdate(2021,[3 4 5]',[],[],'datetime');
StartDate_1M = fbusdate(2021,[3 4 5]',[],[],'datetime');
FutInstruments_1M = fininstrument("OISFuture","Maturity",Maturity_1M ,"QuotedPrice",Prices_1M,"StartDate",StartDate_1M,"Method","Average",...
    'HistoricalFixing',HistFixing,'Name',"1MonthSOFRFuture")
FutInstruments_1M=3×1 object
  3x1 OISFuture array with properties:

    QuotedPrice
    Method
    Basis
    StartDate
    Maturity
    Notional
    BusinessDayConvention
    Holidays
    ProjectionCurve
    HistoricalFixing
    Name

Используйте fininstrument создать OISFuture инструментальный объект для трехмесячных фьючерсов SOFR.

% Data from the following: https://www.cmegroup.com/trading/interest-rates/stir/three-month-sofr_quotes_globex.html
Prices_3M = [99.92 99.895 99.84 99.74]';
Dates_3M_Maturity = thirdwednesday([6 9 12 3]',[2021 2021 2021 2022]','datetime');
Dates_3M_Start = thirdwednesday([3 6 9 12]',2021,'datetime');
FutInstruments_3M = fininstrument("OISFuture","Maturity",Dates_3M_Maturity,...
    "QuotedPrice",Prices_3M,"StartDate",Dates_3M_Start,'HistoricalFixing',HistFixing,'Name',"3MonthSOFRFuture");

Используйте fininstrument создать OvernightIndexedSwap инструментальный объект.

SOFRSwapRates = [.0023 0;.0064 0;.013 0;.017 0;.0175 0];
SOFRSwapTimes = [3 5 10 20 30];
SOFRSwapDates = datemnth(Settle,12*SOFRSwapTimes)';
SOFRSwapInstruments = fininstrument("OvernightIndexedSwap","Maturity",SOFRSwapDates,"LegRate",SOFRSwapRates,'Name',"overnight_swap_instrument")
SOFRSwapInstruments=5×1 object
  5x1 OvernightIndexedSwap array with properties:

    LegRate
    LegType
    Reset
    Basis
    Notional
    HistoricalFixing
    ResetOffset
    ProjectionCurve
    BusinessDayConvention
    Holidays
    EndMonthRule
    StartDate
    Maturity
    Name

Задайте BootInstruments для трех типов инструментов.

BootInstruments = [FutInstruments_1M;FutInstruments_3M;SOFRSwapInstruments]
BootInstruments=12×1 object
  12x1 heterogeneous FinInstrument (OISFuture, OvernightIndexedSwap) array with properties:

    Name

Создайте ratecurve Объект

Используйте irbootstrap создать ratecurve объект.

SOFRCurve = irbootstrap(BootInstruments,Settle)
SOFRCurve = 
  ratecurve with properties:

                 Type: "zero"
          Compounding: -1
                Basis: 0
                Dates: [12x1 datetime]
                Rates: [12x1 double]
               Settle: 04-Mar-2021
         InterpMethod: "linear"
    ShortExtrapMethod: "next"
     LongExtrapMethod: "previous"

Создайте BootInstruments для нескольких Deposit, STIRFuture, и Swap инструменты и затем используют irbootstrap создать и отобразить ratecurve объект.

Создайте инструменты

Используйте fininstrument создать Deposit инструментальный объект.

Settle = datetime(2021,6,15); 
DepRates = [0.0016 0.0017 .00175]';
DepDates = Settle + calmonths([1 2 3]');

Deposits = fininstrument("Deposit","Maturity",DepDates,"Rate",DepRates,'Name',"deposit_instrument")
Deposits=3×1 object
  3x1 Deposit array with properties:

    Rate
    Period
    Basis
    Maturity
    Principal
    BusinessDayConvention
    Holidays
    Name

Используйте fininstrument создать STIRFuture инструментальный объект.

FutureRates = [0.002 0.0025 0.0035]';
FutMat = [datetime(2021,9,15) datetime(2021,12,15) datetime(2022,3,16)]';
FutEndDates = [datetime(2021,12,15) datetime(2022,3,15) datetime(2022,6,15)]';

Futures = fininstrument("STIRFuture","Maturity",FutMat,"RateEndDate",FutEndDates,"QuotedPrice",100 - 100*FutureRates,'Name',"stir_future_instrument")
Futures=3×1 object
  3x1 STIRFuture array with properties:

    QuotedPrice
    Basis
    RateEndDate
    Maturity
    Notional
    BusinessDayConvention
    Holidays
    ProjectionCurve
    Name

Используйте fininstrument создать Swap инструментальный объект.

SwapRates = [.0063 0;.0108 0;.013 0;.015 0;0.017 0;.018 0;0.019 0];
SwapTimes = [2 5 7 10 15 20 30]';
SwapDates = datemnth(Settle,12*SwapTimes);

Swaps = fininstrument("Swap","Maturity",SwapDates,"LegRate",SwapRates,'Name',"swap_instrument")
Swaps=7×1 object
  7x1 Swap array with properties:

    LegRate
    LegType
    Reset
    Basis
    Notional
    LatestFloatingRate
    ResetOffset
    DaycountAdjustedCashFlow
    ProjectionCurve
    BusinessDayConvention
    Holidays
    EndMonthRule
    StartDate
    Maturity
    Name

Задайте BootInstruments для этих трех инструментов.

BootInstruments = [Deposits;Futures;Swaps];

Создайте ratecurve Объект Используя irbootstrap

Используйте irbootstrap создать ratecurve объект.

ConvexityAdj = (1:3)'/10000;
ZeroCurve = irbootstrap(BootInstruments,Settle,'ConvexityAdjustment',ConvexityAdj,'InterpMethod','pchip')
ZeroCurve = 
  ratecurve with properties:

                 Type: "zero"
          Compounding: -1
                Basis: 0
                Dates: [13x1 datetime]
                Rates: [13x1 double]
               Settle: 15-Jun-2021
         InterpMethod: "pchip"
    ShortExtrapMethod: "next"
     LongExtrapMethod: "previous"

Постройте загруженную кривую

PlottingDates = Settle + calmonths(1:360);
plot(PlottingDates,zerorates(ZeroCurve,PlottingDates))
xlabel('Maturity (Years)') 
ylabel('Zero Rate')
title('Bootstrapped Curve')

Figure contains an axes object. The axes object with title Bootstrapped Curve contains an object of type line.

Входные параметры

свернуть все

Набор инструментов в виде массива инструментальных объектов. Набор инструментов может включать Depositподкачка, FRA, STIRFuture, OISFuture, и OvernightIndexedSwap инструменты.

Типы данных: object

Расчетный день в виде скалярного datetime, последовательного номера даты, вектора символов даты или строки даты.

Типы данных: double | char | string | datetime

Аргументы name-value

Задайте дополнительные разделенные запятой пары Name,Value аргументы. Name имя аргумента и Value соответствующее значение. Name должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN.

Пример: OutCurve = irbootstrap(Settle,BootInstruments,'Type',"zero",'Compounding',2,'Basis',5,'InterpMethod',"cubic")

Тип процентной ставки изгибается в виде разделенной запятой пары, состоящей из 'Type' и скалярная строка или вектор символов.

Примечание

Когда вы используете irbootstrap, значение вы задаете для Type может повлиять на конструкцию кривой, потому что она влияет на тип данных, которые интерполированы на (то есть, форвардные курсы, нулевые уровни или коэффициенты дисконтирования) во время процесса начальной загрузки.

Типы данных: char | string

Соединение частоты в виде разделенной запятой пары, состоящей из 'Compounding' и скалярное числовое использование поддерживаемых значений: –1, 0, 1, 2, 3, 4, 6, или 12.

Типы данных: double

Базис дневного количества в виде разделенной запятой пары, состоящей из 'Basis' и скалярное целое число.

  • 0 — фактический/фактический

  • 1 — 30/360 (СИА)

  • 2 — фактический/360

  • 3 — фактический/365

  • 4 — 30/360 (PSA)

  • 5 — 30/360 (ISDA)

  • 6 — 30/360 (европеец)

  • 7 — фактический/365 (японский язык)

  • 8 — фактический/фактический (ICMA)

  • 9 — фактический/360 (ICMA)

  • 10 — фактический/365 (ICMA)

  • 11 — 30/360E (ICMA)

  • 12 — фактический/365 (ISDA)

  • 13 — ШИНА/252

Для получения дополнительной информации смотрите Базис.

Типы данных: double

Метод интерполяции в виде разделенной запятой пары, состоящей из 'InterpMethod' и скалярная строка или вектор символов с помощью поддерживаемого значения. Для получения дополнительной информации о методах интерполяции смотрите interp1.

Типы данных: char | string

Метод экстраполяции для данных перед First Data в виде разделенной запятой пары, состоящей из 'ShortExtrapMethod' и скалярная строка или вектор символов с помощью поддерживаемого значения. Для получения дополнительной информации о методах интерполяции смотрите interp1.

Типы данных: char | string

Метод экстраполяции для данных после последних данных в виде разделенной запятой пары, состоящей из 'LongExtrapMethod' и скалярная строка или вектор символов с помощью поддерживаемого значения. Для получения дополнительной информации о методах интерполяции смотрите interp1.

Типы данных: char | string

ratecurve объект для дисконтирования потоков наличности в виде разделенной запятой пары, состоящей из 'DiscountCurve' и имя ранее созданного ratecurve объект.

Типы данных: object

Корректировка выпуклости к одному или нескольким STIRFuture инструменты в виде разделенной запятой пары, состоящей из 'ConvexityAdjustment' и NFutures- 1 вектор из числовых значений.

Примечание

Можно только использовать ConvexityAdjustment при использовании irbootstrap с STIRFuture инструмент. Кроме того, длина ConvexityAdjustment вектор должен совпадать с количеством STIRFuture инструменты.

Типы данных: double

Выходные аргументы

свернуть все

Кривая уровня, возвращенная как ratecurve объект. Объект имеет следующие свойства:

  • Type

  • Settle

  • Compounding

  • Basis

  • Dates

  • Rates

  • InterpMethod

  • ShortExtrapMethod

  • LongExtrapMethod

Введенный в R2020a