Калибровка белого дерева корпуса с использованием полов
[ калибрует Alpha,Sigma,OptimOut] = hwcalbyfloor(RateSpec,MarketStrikeMarketMaturity,MarketVolatility)Alpha (средняя реверсия) и Sigma (волатильность) с использованием рыночных данных пола и модели Халл-Уайт с использованием всей поверхности пола.
Функции калибровки корпуса и белого (hwcalbyfloor и hwcalbycap) поддерживают три модели: Black (по умолчанию), Bachelier или Normal и Shaded Black. Дополнительные сведения см. в дополнительных аргументах для Shift и Model.
[ оценивает Alpha,Sigma,OptimOut = hwcalbyfloor(RateSpec,MarketStrikeMarketMaturity,MarketVolatility,Strike,Settle,Maturity)Alpha (средняя реверсия) и Sigma (волатильность) с использованием рыночных данных нижнего предела и модели Халла-Уайта для оценки нижнего предела при определенном сроке/волатильности с использованием дополнительных необязательных входных аргументов для Strike, Settle, и Maturity.
Strike, Settle, и Maturity аргументы указываются для калибровки до конкретной точки на поверхности волатильности рынка. Если не указано, калибровка выполняется по всем рыночным инструментам.
Пример калибровки с использованием модели Hull-White с Strike, Settle, и Maturity входные аргументы см. в разделе Калибровка модели Халл-Уайт с использованием рыночных данных.
[ добавляет необязательные аргументы пары имя-значение. Alpha,Sigma,OptimOut] = hwcalbyfloor(___,Name,Value)
В этом примере показано, как использовать hwcalbyfloor входные аргументы для MarketStrike, MarketMaturity, и MarketVolatility для калибровки модели ТС с использованием всей поверхности волатильности пола.
Данные о минимальной волатильности рынка, охватывающие два удара за 12 дат погашения.
Reset = 4;
MarketStrike = [0.0590; 0.0790];
MarketMaturity = {'21-Mar-2008'; '21-Jun-2008'; '21-Sep-2008'; '21-Dec-2008';
'21-Mar-2009'; '21-Jun-2009'; '21-Sep-2009'; '21-Dec-2009';
'21-Mar-2010'; '21-Jun-2010'; '21-Sep-2010'; '21-Dec-2010'};
MarketMaturity = datenum(MarketMaturity);
MarketVolaltility = [0.1533 0.1731 0.1727 0.1752 0.1809 0.1800 0.1805 0.1802...
0.1735 0.1757 0.1755 0.1755;
0.1526 0.1730 0.1726 0.1747 0.1808 0.1792 0.1797 0.1794...
0.1733 0.1751 0.1750 0.1745];
Построить поверхность волатильности рынка.
[AllMaturities,AllStrikes] = meshgrid(MarketMaturity,MarketStrike); figure; surf(AllMaturities,AllStrikes,MarketVolaltility) datetick xlabel('Maturity') ylabel('Strike') zlabel('Volatility') title('Market Volatility Data')

Установка структуры условий процентной ставки и создание RateSpec.
Settle = '21-Jan-2008'; Compounding = 4; Basis = 0; Rates= [0.0627; 0.0657; 0.0691; 0.0717; 0.0739; 0.0755; 0.0765; 0.0772; 0.0779; 0.0783; 0.0786; 0.0789]; EndDates = {'21-Mar-2008';'21-Jun-2008';'21-Sep-2008';'21-Dec-2008';... '21-Mar-2009';'21-Jun-2009';'21-Sep-2009';'21-Dec-2009';.... '21-Mar-2010';'21-Jun-2010';'21-Sep-2010';'21-Dec-2010'}; RateSpec = intenvset('ValuationDate', Settle, 'StartDates', Settle,... 'EndDates', EndDates,'Rates', Rates, 'Compounding', Compounding,... 'Basis',Basis)
RateSpec =
FinObj: 'RateSpec'
Compounding: 4
Disc: [12x1 double]
Rates: [12x1 double]
EndTimes: [12x1 double]
StartTimes: [12x1 double]
EndDates: [12x1 double]
StartDates: 733428
ValuationDate: 733428
Basis: 0
EndMonthRule: 1Калибровка модели Халл-Уайт на основе рыночных данных.
o = optimoptions('lsqnonlin','TolFun',1e-5,'Display','off'); [Alpha, Sigma] = hwcalbyfloor(RateSpec, MarketStrike, MarketMaturity,... MarketVolaltility, 'Reset', Reset,'Basis', Basis, 'OptimOptions', o)
Warning: LSQNONLIN did not converge to an optimal solution. It exited with exitflag = 3.
> In hwcalbycapfloor>optimizeOverCapSurface at 232
In hwcalbycapfloor at 79
In hwcalbyfloor at 81
Alpha =
0.0835
Sigma =
0.0145
Сравните с черными ценами.
BlkPrices = floorbyblk(RateSpec,AllStrikes(:), Settle, AllMaturities(:),... MarketVolaltility(:),'Reset',Reset,'Basis',Basis)
BlkPrices =
0
0.2659
0.0010
0.5426
0.0021
0.6841
0.0042
0.7947
0.0081
0.8970
0.0128
0.9947
0.0217
1.1145
0.0340
1.2448
0.0402
1.3415
0.0610
1.4947
0.0827
1.6458
0.1071
1.7951
Настройка дерева Hull-White с использованием калиброванных параметров, альфа и сигма.
VolDates = EndDates; VolCurve = Sigma*ones(numel(EndDates),1); AlphaDates = EndDates; AlphaCurve = Alpha*ones(numel(EndDates),1); HWVolSpec = hwvolspec(Settle, VolDates, VolCurve, AlphaDates, AlphaCurve); HWTimeSpec = hwtimespec(Settle, EndDates, Compounding); HWTree = hwtree(HWVolSpec, RateSpec, HWTimeSpec, 'Method', 'HW2000')
HWTree =
FinObj: 'HWFwdTree'
VolSpec: [1x1 struct]
TimeSpec: [1x1 struct]
RateSpec: [1x1 struct]
tObs: [0 0.6593 1.6612 2.6593 3.6612 4.6593 5.6612 6.6593 7.6612 8.6593 9.6612 10.6593]
dObs: [733428 733488 733580 733672 733763 733853 733945 734037 734128 734218 734310 734402]
CFlowT: {1x12 cell}
Probs: {1x11 cell}
Connect: {1x11 cell}
FwdTree: {1x12 cell}Вычислить цены Hull-White на основе откалиброванного дерева.
HWPrices = floorbyhw(HWTree, AllStrikes(:), Settle, AllMaturities(:), Reset, Basis)
HWPrices =
0
0.2644
0.0067
0.5404
0.0101
0.6924
0.0169
0.7974
0.0236
0.8919
0.0320
0.9919
0.0460
1.1074
0.0649
1.2340
0.0829
1.3558
0.1096
1.4957
0.1406
1.6418
0.1724
1.7877Постройте график черных цен по отношению к калиброванным ценам Халл-Белое дерево.
figure; plot(AllMaturities(:), BlkPrices, 'or', AllMaturities(:), HWPrices, '*b'); datetick('x', 2) xlabel('Maturity'); ylabel('Price'); title('Black and Calibrated (HW) Prices'); legend('Black Price', 'Calibrated HW Tree Price','Location', 'NorthWest'); grid on

В этом примере показано, как использовать hwcalbyfloor для калибровки рыночных данных с помощью модели Normal (Bachelier) для ценовых флорлетов. Используйте модель Normal (Bachelier) для выполнения калибровки при работе с отрицательными процентными ставками, забастовками и обычной подразумеваемой волатильностью.
Рассмотрим пол со следующими параметрами:
Settle = 'Dec-30-2016'; Maturity = 'Dec-30-2019'; Strike = -0.004075; Reset = 2; Principal = 100; Basis = 0;
Полеты и рыночные данные для этого примера определяются следующим образом:
floorletDates = cfdates(Settle, Maturity, Reset, Basis); datestr(floorletDates')
ans = 6x11 char array
'30-Jun-2017'
'30-Dec-2017'
'30-Jun-2018'
'30-Dec-2018'
'30-Jun-2019'
'30-Dec-2019'
% Market data information MarketStrike = [-0.00595; 0]; MarketMat = {'30-Jun-2017';'30-Dec-2017';'30-Jun-2018'; '30-Dec-2018';'30-Jun-2019'; '30-Dec-2019'}; MarketVol = [0.184 0.2329 0.2398 0.2467 0.2906 0.3348; % First row in table corresponding to Strike 1 0.217 0.2707 0.2760 0.2814 0.3160 0.3508]; % Second row in table corresponding to Strike 2
Определите RateSpec.
Rates= [-0.003210;-0.003020;-0.00182;-0.001343;-0.001075]; ValuationDate = 'Dec-30-2016'; EndDates = {'30-Jun-2017';'Dec-30-2017';'30-Jun-2018';'Dec-30-2018';'Dec-30-2019'}; Compounding = 2; Basis = 0; RateSpec = intenvset('ValuationDate', ValuationDate, ... 'StartDates', ValuationDate, 'EndDates', EndDates, ... 'Rates', Rates, 'Compounding', Compounding, 'Basis', Basis);
Использовать hwcalbyfloor для поиска значений параметров волатильности Alpha и Sigma с использованием модели Normal (Bachelier).
format short o=optimoptions('lsqnonlin','TolFun',100*eps); warning ('off','fininst:hwcalbycapfloor:NoConverge') [Alpha, Sigma, OptimOut] = hwcalbyfloor(RateSpec, MarketStrike, MarketMat,... MarketVol, Strike, Settle, Maturity, 'Reset', Reset, 'Principal', Principal,... 'Basis', Basis, 'OptimOptions', o, 'model', 'normal')
Local minimum possible. lsqnonlin stopped because the size of the current step is less than the value of the step size tolerance.
Alpha = 1.0000e-06
Sigma = 0.3410
OptimOut = struct with fields:
resnorm: 1.9233e-04
residual: [5x1 double]
exitflag: 2
output: [1x1 struct]
lambda: [1x1 struct]
jacobian: [5x2 double]
OptimOut.residual области OptimOut структура - это остаточное значение оптимизации. Это значение содержит разницу между нормальными (Bachelier) полюсами и полюсами, рассчитанными во время оптимизации. Используйте OptimOut.residual значение, чтобы вычислить процентную разницу (ошибку) по сравнению с нормальными (Bachelier) ценами флорлета, а затем решить, является ли остаток приемлемым. Почти всегда есть некоторый остаток, поэтому решите, приемлемо ли параметризировать рынок с одним значением Alpha и Sigma.
Оцените флорлеты с использованием рыночных данных и модели Normal (Bachelier) для получения ссылочных значений флорлетов. Для определения эффективности оптимизации вычислите ссылочные значения флорлета с использованием формулы Normal (Bachelier) и рыночных данных. Обратите внимание, что сначала необходимо интерполировать рыночные данные для получения флорлетов для расчета.
MarketMatNum = datenum(MarketMat); [Mats, Strikes] = meshgrid(MarketMatNum, MarketStrike); FlatVol = interp2(Mats, Strikes, MarketVol, datenum(Maturity), Strike, 'spline'); [FloorPrice, Floorlets] = floorbynormal(RateSpec, Strike, Settle, Maturity, FlatVol,... 'Reset', Reset, 'Basis', Basis, 'Principal', Principal); Floorlets = Floorlets(2:end)'
Floorlets = 5×1
4.7637
6.7180
8.1833
9.5825
10.6090
Сравните оптимизированные значения и значения Normal (Bachelier) и просмотрите результаты графически. После вычисления опорных значений для флорлетов сравните значения аналитически и графически, чтобы определить, являются ли вычисленные единичные значения Alpha и Sigma обеспечить адекватную аппроксимацию.
OptimFloorlets = Floorlets+OptimOut.residual;
disp(' ');disp(' Bachelier Calibrated Floorlets');Bachelier Calibrated Floorlets
disp([Floorlets OptimFloorlets])
4.7637 4.7685
6.7180 6.7263
8.1833 8.1878
9.5825 9.5795
10.6090 10.6007
plot(MarketMatNum(2:end), Floorlets, 'or', MarketMatNum(2:end), OptimFloorlets, '*b'); datetick('x', 2) xlabel('Floorlet Maturity'); ylabel('Floorlet Price'); ylim ([0 16]); title('Bachelier and Calibrated Floorlets'); h = legend('Bachelier Floorlets', 'Calibrated Floorlets'); set(h, 'color', [0.9 0.9 0.9]); set(h, 'Location', 'SouthEast'); set(gcf, 'NumberTitle', 'off') grid on

MarketStrike - Забастовка на рынкеЗабастовка на рынке, указанная как NINSTоколо-1 вектор.
Типы данных: double
MarketMaturity - Дата погашения минимального рыночного уровняДаты погашения минимального рыночного уровня, указанные как NINSTоколо-1 вектор.
Типы данных: double
MarketVolatility - Рыночные фиксированные волатильностиРыночные фиксированные волатильности, указанные как NSTRIKESоколо-NMATS матрица рыночных фиксированных волатильностей, где NSTRIKES - количество ударов кэплета от MarketStrike и NMATS - даты погашения caplet от MarketMaturity.
Типы данных: double
Strike - Ставка, по которой осуществляется нижний предел(Необязательно) Скорость, с которой выполняется нижний предел, заданная как десятичное скалярное значение.
Типы данных: single
Settle - Дата расчета пола(Необязательно) Дата расчета этажа, указанная как скалярный серийный номер даты или символ даты.
Типы данных: single | char
Maturity - Дата погашения пола(необязательно) Дата погашения этажа, указанная как скалярный серийный номер даты или вектор символов даты.
Типы данных: single | char
Укажите дополнительные пары, разделенные запятыми Name,Value аргументы. Name является именем аргумента и Value - соответствующее значение. Name должен отображаться внутри кавычек. Можно указать несколько аргументов пары имен и значений в любом порядке как Name1,Value1,...,NameN,ValueN.
[Alpha,Sigma,OptimOut] = hwcalbyfloor(RateSpec,MarketStrike,MarketMaturity,MarketVolaltility,'Reset',2,'Principal',100000,'Basis',3,'OptimOptions',o)'Reset' - Периодичность платежей в год1 (по умолчанию) | числовыеЧастота платежей в год, указанная как разделенная запятыми пара, состоящая из 'Reset' и скалярное числовое значение.
Типы данных: double
'Principal' - Условная основная сумма100
(по умолчанию) | неотрицательное целое числоУсловная основная сумма, указанная как разделенная запятыми пара, состоящая из 'Principal' и скалярное неотрицательное целое число.
Типы данных: single
'Basis' - Основание для подсчета дней, используемое при ежегодном расчете входной форвардной ставки0 (факт/факт) (по умолчанию) | целые числа множества [0...13]День-отсчет, используемый при ежегодном расчете входной прямой скорости, определяемой как пара, разделенная запятыми, состоящая из 'Basis' и скалярное значение. Значения:
0 = факт/факт
1 = 30/360 (SIA)
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 = BUS/252
Дополнительные сведения см. в разделе Базис.
Типы данных: single
'LB' - Нижние границы[0;0] (по умолчанию) | числовой векторНижние границы, указанные как разделенная запятыми пара, состоящая из 'LB' и 2около-1 вектор нижних границ, определяемый как [LBSigma; LBAlpha], используется в функции алгоритма поиска. Дополнительные сведения см. в разделе lsqnonlin.
Типы данных: double
'UB' - Верхние границы[ ] (несвязанный) (по умолчанию) | числовой векторВерхние границы, указанные как разделенная запятыми пара, состоящая из 'UB' и 2около-1 вектор верхних границ, определяемый как [UBSigma; LBAlpha], используется в функции алгоритма поиска. Дополнительные сведения см. в разделе lsqnonlin.
Типы данных: double
'XO' - Начальные значения[0.5;0.5] (по умолчанию) | числовой векторНачальные значения, указанные как разделенная запятыми пара, состоящая из 'XO' и 2около-1 вектор начальных значений, определенный как [Sigma0; Alpha0], используется в функции алгоритма поиска. Дополнительные сведения см. в разделе lsqnonlin.
Типы данных: double
'OptimOptions' - Параметры оптимизацииПараметры оптимизации, указанные как пара, разделенная запятыми, состоящая из 'OptimOptions' и структура, определенная с помощью optimoptions.
Типы данных: struct
'Shift' - Сдвиг десятичных знаков для сдвинутой модели Black 0 (без сдвига) (по умолчанию) | положительное десятичное числоСдвиг в десятичных разрядах для сдвинутой модели черного, заданной как разделенная запятыми пара, состоящая из 'Shift' и скалярное положительное десятичное значение. Установите для этого параметра положительное смещение в десятичных разрядах, чтобы добавить положительное смещение к прямой скорости и Strike, который эффективно устанавливает отрицательную нижнюю границу для форвардной ставки и Strike. Например, Shift значение 0.01 равно 1% сдвигу.
Типы данных: single
'Model' - Индикатор для модели, используемой для процедуры калибровкиlognormal (Черная модель) (по умолчанию) | значения: normal и lognormalИндикатор для модели, используемой для процедуры калибровки, указанный как разделенная запятыми пара, состоящая из 'Model' и вектор скалярных символов со значением normal или lognormal.
Типы данных: char
Alpha - Средняя реверсивная величина, полученная при калибровке пола с использованием рыночной информацииСреднее значение реверсии, полученное при калибровке пола с использованием рыночной информации, возвращается как скалярное значение.
Sigma - Значение волатильности, полученное при калибровке нижнего предела с использованием рыночной информацииЗначение волатильности, полученное при калибровке дна с использованием рыночной информации, возвращено как скаляр.
OptimOut - Результаты оптимизацииРезультаты оптимизации, возвращенные в виде структуры.
floorbyblk | HullWhite1F | hwcalbycap | hwtree | lsqnonlin
Имеется измененная версия этого примера. Открыть этот пример с помощью изменений?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.