Калибровка белой как оболочка модели Используя данные о рынке

Оценка ценных бумаг производной процентной ставки использует модели, которые описывают базовый процесс. Эти модели процентной ставки зависят от одного или нескольких параметров, которые необходимо определить путем соответствия с предсказаниями модели к существующим доступным данным на рынке. В модели Hull-White существует два параметра, связанные с коротким процессом уровня: возвращение к среднему уровню и энергозависимость. Калибровка используется, чтобы определить эти параметры, такие, что модель может воспроизвести, максимально близко, цены дна или этажей, наблюдаемых на рынке. Калибровочные стандартные программы находят параметры, которые минимизируют различие между прогнозами цен модели и рыночными ценами на дно и этажи.

Для модели Hull-White минимизация является двумерной относительно возвращения к среднему уровню (α) и энергозависимость (σ). Таким образом, калибровка модели Hull-White минимизирует различие между предсказанными ценами модели и наблюдаемыми рыночными ценами соответствующего caplets или floorlets.

Белый как оболочка калибровочный пример модели

Используйте данные о рынке, чтобы идентифицировать подразумеваемую волатильность (σ), и возвращение к среднему уровню (α) коэффициенты должно было создать Белое как оболочка дерево, чтобы оценить инструмент. Идеальный случай должен использовать колебания дна, или этажи раньше вычисляли Alpha (α) и Sigma (σ). Это не будет, скорее всего, иметь место, таким образом, данные о рынке должны будут быть интерполированы, чтобы получить необходимые значения.

Рассмотрите дно этими параметрами:

Settle = ' Jan-21-2008';
Maturity = 'Mar-21-2011';
Strike = 0.0690;
Reset = 4;
Principal = 1000;
Basis = 0;

caplets для этого примера обрушился бы:

capletDates = cfdates(Settle, Maturity, Reset, Basis);
datestr(capletDates')
ans =

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
21-Mar-2011

В лучшем случае ищите волатильность рынка для caplets с Strike= 0.0690 , и сроки платежа на каждой перечисленной дате сброса, но вероятность нахождения этих точных инструментов являются низкими. Как следствие используйте данные, которые доступны на рынке, и интерполируйте, чтобы найти соответствующие значения для caplets.

На основе данных о рынке у вас есть информация о дне для различных дат и забастовок. Примите это вместо того, чтобы иметь данные для Strike= 0.0690 , у вас есть данные для Strike1= 0.0590 и Strike2= 0.0790 .

ЗрелостьStrike1 = 0.0590Strike2 = 0.0790
21 марта 20080.15330. 1526
21 июня 20080.17310. 1730
21 сентября 20080. 17270. 1726
21 декабря 20080. 17520. 1747
21 марта 20090. 18090. 1808
21 июня 20090. 18090. 1792
21 сентября 20090. 18050. 1797
21 декабря 20090. 18020. 1794
21 марта 20100. 18020. 1733
21 июня 20100. 17570. 1751
21 сентября 20100. 17550. 1750
21 декабря 20100. 17550. 1745
21 марта 20110. 17260. 1719

Природа этих данных предоставляет себя матричной номенклатуре, которая совершенна для MATLAB®. hwcalbycap требует, чтобы даты, забастовки и фактическая энергозависимость были разделены на три переменные: MarketStrike, MarketMat, и MarketVol.

MarketStrike = [0.0590; 0.0790];
MarketMat = {'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'; 
'21-Mar-2011'};


MarketVol = [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.1726; % First row in table corresponding to Strike1 
             0.1526 0.1730 0.1726 0.1747 0.1808 0.1792 0.1797 0.1794 0.1733 0.1751 ... 
             0.1750 0.1745 0.1719]; % Second row in table corresponding to Strike2

Завершите входные параметры с помощью этих данных в RateSpec:

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;
0.0792;
0.0793];

ValuationDate = '21-Jan-2008';
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';....
            '21-Mar-2011';'21-Jun-2011'};
Compounding = 4;
Basis = 0;

RateSpec = intenvset('ValuationDate', ValuationDate, ...
'StartDates', ValuationDate, 'EndDates', EndDates, ...
'Rates', Rates, 'Compounding', Compounding, 'Basis', Basis)
RateSpec = 

           FinObj: 'RateSpec'
      Compounding: 4
             Disc: [14x1 double]
            Rates: [14x1 double]
         EndTimes: [14x1 double]
       StartTimes: [14x1 double]
         EndDates: [14x1 double]
       StartDates: 733428
    ValuationDate: 733428
            Basis: 0
     EndMonthRule: 1

Вызовите калибровочную стандартную программу, чтобы найти значения для параметров энергозависимости Альфой и Сигмой

Используйте hwcalbycap вычислить значения Alpha и Sigma на основе данных о рынке. Внутренне, hwcalbycap вызывает функцию Optimization Toolbox™ lsqnonlin. Можно настроить lsqnonlin путем передачи структуры опций оптимизации создается optimoptions и затем это может быть передано hwcalbycap использование аргумента пары "имя-значение" для OptimOptions. Например, optimoptions задает допуск функции целевого уровня как 100*eps и затем вызовы hwcalbycap:

o=optimoptions('lsqnonlin','TolFun',100*eps);

[Alpha, Sigma] = hwcalbycap(RateSpec, MarketStrike, MarketMat, MarketVol,...
Strike, Settle, Maturity, 'Reset', Reset, 'Principal', Principal, 'Basis',... 
Basis, 'OptimOptions', o)
Local minimum possible.

lsqnonlin stopped because the size of the current step is less than
the default value of the step size tolerance.

Warning: LSQNONLIN did not converge to an optimal solution. It exited with exitflag = 2.
 
> In hwcalbycapfloor at 93
  In hwcalbycap at 75 

Alpha =

   1.0000e-06


Sigma =

    0.0127

Предыдущее предупреждение указывает, что преобразование не было оптимально. Алгоритм поиска, используемый Optimization Toolbox™, функционирует lsqnonlin не нашел решение, которое соответствует всем ограничениям. Чтобы различить, приемлемо ли решение, посмотрите на результаты оптимизации путем определения третьего выхода (OptimOut) для hwcalbycap:

[Alpha, Sigma, OptimOut] = hwcalbycap(RateSpec, MarketStrike, MarketMat,...
MarketVol, Strike, Settle, Maturity, 'Reset', Reset, 'Principal', Principal,...
'Basis', Basis, 'OptimOptions', o);

OptimOut.residual поле OptimOut структура является невязкой оптимизации. Это значение содержит различие между Черным caplets и вычисленными во время оптимизации. Можно использовать OptimOut.residual значение, чтобы вычислить percentual различие (ошибка) по сравнению с Черными caplet ценами и затем решить, приемлема ли невязка. Существует почти всегда некоторая невязка, поэтому решите, приемлемо ли параметрировать рынок с одним значением Alpha и Sigma.

Цена caplets данные о рынке использования и формула Черного цвета, чтобы получить ссылку caplet значения

Чтобы определить эффективность оптимизации, вычислите ссылку caplet значения с помощью формулы Черного цвета и данных о рынке. Отметьте, необходимо сначала интерполировать данные о рынке, чтобы получить caplets для вычисления:

MarketMatNum = datenum(MarketMat);
[Mats, Strikes] = meshgrid(MarketMatNum, MarketStrike);
FlatVol = interp2(Mats, Strikes, MarketVol, datenum(Maturity), Strike, 'spline');

Вычислите цену дна с помощью модели Black:

[CapPrice, Caplets] = capbyblk(RateSpec, Strike, Settle, Maturity, FlatVol,...
'Reset', Reset, 'Basis', Basis, 'Principal', Principal); 
Caplets = Caplets(2:end)';
Caplets =

    0.3210
    1.6355
    2.4863
    3.1903
    3.4110
    3.2685
    3.2385
    3.4803
    3.2419
    3.1949
    3.2991
    3.3750

Сравните оптимизированные значения и Черные значения и отобразитесь графически

После вычисления ссылочных значений для caplets сравните значения, аналитически и графически, чтобы определить ли расчетные одно значения Alpha и Sigma обеспечьте соответствующее приближение:

OptimCaplets = Caplets+OptimOut.residual;

disp('   ');
disp('    Black76   Calibrated Caplets');
disp([Caplets                   OptimCaplets])

plot(MarketMatNum(2:end), Caplets, 'or', MarketMatNum(2:end), OptimCaplets, '*b');
datetick('x', 2)
xlabel('Caplet Maturity');
ylabel('Caplet Price');
title('Black and Calibrated Caplets');
h = legend('Black Caplets', 'Calibrated Caplets');
set(h, 'color', [0.9 0.9 0.9]);
set(h, 'Location', 'SouthEast');
set(gcf, 'NumberTitle', 'off')
grid on
 Black76   Calibrated Caplets
    0.3210    0.3636
    1.6355    1.6603
    2.4863    2.4974
    3.1903    3.1874
    3.4110    3.4040
    3.2685    3.2639
    3.2385    3.2364
    3.4803    3.4683
    3.2419    3.2408
    3.1949    3.1957
    3.2991    3.2960
    3.3750    3.3663

Сравните цены дна с помощью Черного цвета, аналитичного HW, и модели дерева HW

Используя расчетные caplet значения, сравните цены соответствующего дна с помощью модели Black, Белых как оболочка аналитических, и Белых как оболочка древовидных моделей. Вычислить Белое как оболочка дерево на основе Alpha и Sigma, используйте эти калибровочные стандартные программы:

  • Черная модель:

    CapPriceBLK = CapPrice;

  • HW аналитическая модель:

    CapPriceHWAnalytical = sum(OptimCaplets);

  • Модель дерева HW, чтобы оценить дно, выведенное из калибровочного процесса:

    1. Создайте VolSpec от калибровочных параметров Alpha и Sigma:

      VolDates    = EndDates;
      VolCurve    = Sigma*ones(14,1);
      AlphaDates  = EndDates;
      AlphaCurve  = Alpha*ones(14,1);
      HWVolSpec = hwvolspec(ValuationDate, VolDates, VolCurve,AlphaDates, AlphaCurve);
    2. Создайте TimeSpec:

      HWTimeSpec  = hwtimespec(ValuationDate, EndDates, Compounding);
    3. Создайте дерево HW использование HW2000 метод:

      HWTree = hwtree(HWVolSpec, RateSpec, HWTimeSpec, 'Method', 'HW2000');
    4. Оцените дно:

      Price = capbyhw(HWTree, Strike, Settle, Maturity, Reset, Basis, Principal); 
      
      disp('   ');
      disp(['  CapPrice Black76 ..................:  ', num2str(CapPriceBLK,'%15.5f')]);
      disp(['  CapPrice HW analytical..........:  ', num2str(CapPriceHWAnalytical,'%15.5f')]);
      disp(['  CapPrice HW from capbyhw ..:  ', num2str(Price,'%15.5f')]);
      disp('   ');
      CapPrice Black76 ..........: 34.14220
      CapPrice HW analytical.....: 34.18008
      CapPrice HW from capbyhw ..: 34.14192

Оцените портфель инструментов с помощью калиброванного дерева HW

После создания Белого как оболочка дерева, на основе параметров, калиброванных из данных о рынке, HWTree использования оценивать портфель этих инструментов:

  • Две связи

    CouponRate = [0.07; 0.09];
    Settle= ' Jan-21-2008';
    Maturity = {'Mar-21-2010';'Mar-21-2011'};
    Period = 1;
    Face = 1000;
    Basis = 0;
    

  • Связь со встроенным американским колл-опционом

    CouponRateOEB = 0.08;
    SettleOEB = ' Jan-21-2008';
    MaturityOEB = 'Mar-21-2011';
    OptSpec = 'call';
    StrikeOEB = 950;
    ExerciseDatesOEB = 'Mar-21-2011';
    AmericanOpt= 1;
    Period =1;
    Face = 1000;
    Basis =0;
    

Оценивать этот портфель инструментов с помощью калиброванного HWTree:

  1. Используйте instadd создать портфель InstSet:

    InstSet = instadd('Bond', CouponRate, Settle,  Maturity, Period, Basis, [], [], [], [], [], Face);
    InstSet = instadd(InstSet,'OptEmBond',  CouponRateOEB, SettleOEB, MaturityOEB, OptSpec,...
    StrikeOEB,   ExerciseDatesOEB, 'AmericanOpt', AmericanOpt, 'Period', Period,...
    'Face',Face,  'Basis', Basis);
    
  2. Добавьте инструмент дна, используемый в калибровке:

    SettleCap = ' Jan-21-2008';
    MaturityCap = 'Mar-21-2011';
    StrikeCap = 0.0690;
    Reset = 4;
    Principal = 1000;
    
    InstSet = instadd(InstSet,'Cap', StrikeCap, SettleCap, MaturityCap, Reset, Basis, Principal);
  3. Присвойте имена к инструментам портфеля:

    Names = {'7% Bond'; '8% Bond'; 'BondEmbCall'; '6.9% Cap'};
    InstSet = instsetfield(InstSet, 'Index',1:4, 'FieldName', {'Name'}, 'Data', Names );
  4. Исследуйте набор инструментов, содержавшихся в InstSet:

    instdisp(InstSet)
    
    IdxType CoupRate Settle Mature Period Basis EOMRule IssueDate 1stCoupDate LastCoupDate StartDate Face Name
    
    1 Bond 0.07       21-Jan-2008    21-Mar-2010    1  0  NaN  NaN     NaN   NaN  NaN  1000    7% Bond
    2 Bond 0.09       21-Jan-2008    21-Mar-2011    1  0  NaN  NaN     NaN   NaN  NaN  1000    8% Bond
    
    IdxType CoupRate Settle Mature OptSpec Stke ExDate Per Basis EOMRule IssDate 1stCoupDate LstCoupDate StrtDate Face AmerOpt Name
    3 OptEmBond 0.08 21-Jan-2008 21-Mar-2011 call 950  21-Jan-2008  21-Mar-2011  1  0  1  NaN  NaN NaN  NaN  1000 1 BondEmbCall
     
    Index Type Strike Settle     Maturity   CapReset Basis Principal Name 
    4 Cap  0.069  21-Jan-2008    21-Mar-2011    4      0     1000    6.9% Cap   
  5. Используйте hwprice оценивать портфель с помощью калиброванного HWTree:

    format bank
    PricePortfolio = hwprice(HWTree, InstSet)
    PricePortfolio =
            980.45
           1023.05
            945.73
             34.14
    

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

| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |

Связанные примеры

Больше о