Загрузите кривую процентной ставки из данных о рынке
создает структуру данных для того, чтобы хранить данные о структуре термина процентной ставки. outCurve
= irbootstrap(BootInstruments
,Settle
)outCurve
выходом является ratecurve
объект.
задает опции с помощью одного или нескольких аргументов пары "имя-значение" в дополнение к любой из комбинаций входных аргументов в предыдущем синтаксисе. Например, outCurve
= irbootstrap(___,Name,Value
)OutCurve = irbootstrap(Settle,BootInstruments,'Type',"zero",'Compounding',2,'Basis',5,'InterpMethod',"cubic")
загружает кривую нулевой ширины от BootInstruments
.
ratecurve
Объект из данных о рынкеЗадайте депозит и подкачайте параметры
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"
DiscountCurve
Входной параметрВ этом примере показано, как создать 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"
ratecurve
Объект от BootInstruments
для фьючерсов OIS и в течение ночи индексируемых подкачекСоздайте 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"
ratecurve
Объект от STIRFuture
, Deposit
, и Swap
BootInstruments
Создайте 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')
BootInstruments
— Набор инструментовНабор инструментов в виде массива инструментальных объектов. Набор инструментов может включать Deposit
подкачка
, FRA
, STIRFuture
, OISFuture
, и OvernightIndexedSwap
инструменты.
Типы данных: object
Settle
— Расчетный деньРасчетный день в виде скалярного datetime, последовательного номера даты, вектора символов даты или строки даты.
Типы данных: double |
char
| string
| datetime
Задайте дополнительные разделенные запятой пары Name,Value
аргументы. Name
имя аргумента и Value
соответствующее значение. Name
должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN
.
OutCurve = irbootstrap(Settle,BootInstruments,'Type',"zero",'Compounding',2,'Basis',5,'InterpMethod',"cubic")
Type
— Тип кривой процентной ставки"zero"
(значение по умолчанию) | представляет в виде строки со значением "discount"
, "forward"
, или "zero"
| вектор символов со значением 'discount'
, 'forward'
, или 'zero'
Тип процентной ставки изгибается в виде разделенной запятой пары, состоящей из 'Type'
и скалярная строка или вектор символов.
Примечание
Когда вы используете irbootstrap
, значение вы задаете для Type
может повлиять на конструкцию кривой, потому что она влияет на тип данных, которые интерполированы на (то есть, форвардные курсы, нулевые уровни или коэффициенты дисконтирования) во время процесса начальной загрузки.
Типы данных: char |
string
Compounding
— Соединение частотыCompounding
для ratecurve
объект (значение по умолчанию) | возможные значения включает: –1
, 0
, 1
, 2
, 3
, 4
, 6
, 12
.Соединение частоты в виде разделенной запятой пары, состоящей из 'Compounding'
и скалярное числовое использование поддерживаемых значений: –1
, 0, 1
, 2
, 3
, 4
, 6
, или
12
.
Типы данных: double
Basis
— Базис дневного количества
(фактическое/фактическое) (значение по умолчанию) | целое число от 0
к 13
Базис дневного количества в виде разделенной запятой пары, состоящей из '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
метод интерполяции"linear"
(значение по умолчанию) | представляет в виде строки со значением "linear"
, "cubic"
, "next"
, "previous"
pchip
, "v5cubic"
, "makima"
, или "spline"
| вектор символов со значением 'linear'
, 'cubic'
, 'next'
, 'previous'
pchip
, 'v5cubic'
, 'makima'
, или 'spline'
Метод интерполяции в виде разделенной запятой пары, состоящей из 'InterpMethod'
и скалярная строка или вектор символов с помощью поддерживаемого значения. Для получения дополнительной информации о методах интерполяции смотрите interp1
.
Типы данных: char |
string
ShortExtrapMethod
— Метод экстраполяции для данных перед First Data "next"
(значение по умолчанию) | представляет в виде строки со значением "linear"
, "next"
, "previous"
pchip
, "cubic"
, "v5cubic"
, "makima"
, или "spline"
| вектор символов со значением 'linear'
, 'next'
, 'previous'
pchip
, 'cubic'
, 'v5cubic'
, 'makima'
, или 'spline'
Метод экстраполяции для данных перед First Data в виде разделенной запятой пары, состоящей из 'ShortExtrapMethod'
и скалярная строка или вектор символов с помощью поддерживаемого значения. Для получения дополнительной информации о методах интерполяции смотрите interp1
.
Типы данных: char |
string
LongExtrapMethod
— Метод экстраполяции для данных после последних данных "previous"
(значение по умолчанию) | представляет в виде строки со значением "linear"
, "next"
, "previous"
pchip
, "cubic"
, "v5cubic"
, "makima"
, или "spline"
| вектор символов со значением 'linear'
, 'next'
, 'previous'
pchip
, 'cubic'
, 'v5cubic'
, 'makima'
, или 'spline'
Метод экстраполяции для данных после последних данных в виде разделенной запятой пары, состоящей из 'LongExtrapMethod'
и скалярная строка или вектор символов с помощью поддерживаемого значения. Для получения дополнительной информации о методах интерполяции смотрите interp1
.
Типы данных: char |
string
DiscountCurve
— ratecurve
объект для дисконтирования потоков наличностиratecurve.empty
(значение по умолчанию) | скалярный ratecurve
объектratecurve
объект для дисконтирования потоков наличности в виде разделенной запятой пары, состоящей из 'DiscountCurve'
и имя ранее созданного ratecurve
объект.
Типы данных: object
ConvexityAdjustment
— Корректировка выпуклости к STIRFuture
инструмент
(значение по умолчанию) | числовой векторКорректировка выпуклости к одному или нескольким STIRFuture
инструменты в виде разделенной запятой пары, состоящей из 'ConvexityAdjustment'
и NFutures
- 1
вектор из числовых значений.
Примечание
Можно только использовать ConvexityAdjustment
при использовании irbootstrap
с STIRFuture
инструмент. Кроме того, длина ConvexityAdjustment
вектор должен совпадать с количеством STIRFuture
инструменты.
Типы данных: double
outCurve
— Кривая уровняratecurve
объектКривая уровня, возвращенная как ratecurve
объект. Объект имеет следующие свойства:
Type
Settle
Compounding
Basis
Dates
Rates
InterpMethod
ShortExtrapMethod
LongExtrapMethod
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.