Определение цен барьерных опционов с помощью сеток. Часть первая – постоянные барьеры - Использование кода

ОГЛАВЛЕНИЕ

Использование кода

Код для случая постоянного барьера содержится в классе по имени AdjustedBarrier. Он реализован в файле AdjustedBarrier.h и основан на оптимизированном алгоритме триномиального дерева. Корректировка вероятности применяется по мере перемещения по сетке. Главный цикл для колл-опциона с нижней границей следующий:

// Двигаться обратно по дереву
// с помощью "ползучего триномиального" алгоритма
for (int i = (nlevels-1); i >= 0; i--)
{
    index = outerindex;
    for (int j = 0; j <= (2*i); j++)
    {
        _tree[j].option = (dUp * _tree[j+2].option +
                      dMid * _tree[j+1].option +
                    dDown * _tree[j].option) * discount;
    
     // корректировка вероятности перехода
    if (_tree[index].spot > dbarrier)
    {
        pUpAdj = ProbAdjust(_tree[index].spot, _tree[index+1].spot, dvol, dt, dbarrier);
         pMidAdj = ProbAdjust(_tree[index].spot, _tree[index].spot, dvol, dt, dbarrier);
        pDownAdj = ProbAdjust(_tree[index].spot, _tree[index-1].spot, dvol, dt, dbarrier);
        _tree[j].option = (dUp * (1.0 - pUpAdj) * _tree[j+2].option +
                           dMid * (1.0 - pMidAdj) * _tree[j+1].option +
                   dDown * (1.0 - pDownAdj) * _tree[j].option) * discount;
    }
    else
        _tree[j].option = 0.0;
           
    index++;
    }
    outerindex++;
}

Использовать класс очень просто. Передаются требуемые параметры опциона, как в следующем примере:

// тестовые значения
int levels = 800;
double spot = 100;
double strike = 100;
double volatility = 25;
double rate = 10;
double maturity = 1;
double barrier = 95;
   
// Определить цену колл-опциона с нижней границей
double DownOutOption = AdjustedBarrier::PriceBarrierOption(levels, spot, strike,
    volatility, rate, maturity, barrier);

Вывод отправляется на консоль и содержит цену вместе со временем расчета, требуемым для базового дерева и дерева опциона:

Final option price from ADJUSTED PROBABILITY method is: 7.087516
 (requiring 0.000000 microseconds or 0.000000 seconds for the underlying tree
  and 1071541.000000 microseconds or 1.071541 seconds for the option tree)

Total calculation time: 1071541.000000 microseconds (1.071541 seconds)

Option price from HAUG FORMULA is: 7.049658


Press any key to continue . . .

Скорость и сходимость

Для тестирования кода сравнивается сходимость данного метода со сходимостью триномиальной модели Кокса-Росса-Рубинштейна (CRR). Результаты для сходимости двух методов показаны на рисунке 2, вместе с "истинным" (или аналитическим) значением опциона:

Рисунок 2: Сравнение и анализ сходимости

Рисунок 2 показывает быструю сходимость модели корректировки вероятности по сравнению со стандартной триномиальной сеткой без коррекции. Увеличение точности налицо, и сходимость к расчетному значению (отмечено красным) весьма быстрая по сравнению с моделью CRR. Однако некоторые колебания в приближении цены остаются после 500 делений сетки. Причина в том, что, хотя корректируются вероятности сетки, дискретизация сетки все же приводит к некоторой неточности. Ради крайне обобщенного алгоритма приходится мириться с некоторой неточностью. Для повышения точности можно выбрать большое число делений сетки, но из-за этого увеличится время выполнения.

Рисунок 3

Рисунок 3 показывает таблицу, представляющую результаты для поведения цены колл-опциона с нижней границей, когда биржевой курс близок к границе. Последний столбец содержит цену колл-опциона с нижней границей с использованием аналитического решения. Цены в квадратных скобках получены из стандартной модели. Цены, помеченные “-”, не удалось вычислить с помощью стандартного метода перемещения узла – то есть числа использованных делений не хватило для выработки приближения для расчетной цены.

Рисунок 3 показывает сравнение между моделью корректировки вероятности и стандартной моделью сетки. Записи, помеченные "-", показывают неудачу стандартной модели. То есть традиционная модель сетки не может выработать приближение цены. Однако представленная в статье модель всегда дает приближение цены опциона.

Рисунок 4

Рисунок 4 показывает выполнения для алгоритма для сеток базового актива и опциона (левая ось – в секундах, правая ось - в микросекундах). Левая ось обозначает дерево опциона (сплошная линия), тогда как правая ось означает базовое дерево (пунктирная линия). После 3.000 делений сетки время расчета быстро возрастает. При 10.000 делениях оно приближается к 1 минуте. Все вычисления выполнялись на процессоре 1.83 Ггц с 2 гб оперативной памяти. Типовой расчет для 1000 делений сетки и постоянного барьера требует примерно 3 секунд.

Заключение

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