exponenta event banner

optSensByBatesFFT

Цена опциона и чувствительность по модели Бейтса с использованием FFT и FRFT

Описание

пример

[PriceSens,StrikeOut] = optSensByBatesFFT(Rate,AssetPrice,Settle,Maturity,OptSpec,Strike,V0,ThetaV,Kappa,SigmaV,RhoSV,MeanJ,JumpVol,JumpFreq) вычисляет цену и чувствительность ванильных европейских опционов по модели Бейтса, используя методы Carr-Madan FFT и Chourdakis FRFT.

пример

[PriceSens,StrikeOut] = optSensByBatesFFT(___,Name,Value) добавляет необязательные аргументы пары имя-значение.

Примеры

свернуть все

Использовать optSensByBatesFFT для калибровки страйк-сетки БПФ для чувствительности, вычисления чувствительности опций и поверхности чувствительности опций графика.

Определение переменных опций и параметров модели Бейтса

AssetPrice = 80;
Rate = 0.03;
DividendYield = 0.02;
OptSpec = 'call';

V0 = 0.04;
ThetaV = 0.05;
Kappa = 1.0;
SigmaV = 0.2;
RhoSV = -0.7;
MeanJ = 0.02;
JumpVol = 0.08;
JumpFreq = 2;

Вычисление чувствительности опций для всей страйк-сетки БПФ (или FRFT) без указания «страйка»

Вычислите чувствительность опций, а также выведите соответствующие удары. Если Strike вход пуст ( [] ), чувствительность опций будет вычисляться на всей страйк-сетке FFT (или FRFT). Ударная сетка БПФ (или БПФ) определяется как exp(log-strike grid), где каждый столбец сетки log-strike имеет NumFFT точки с LogStrikeStep интервалы, которые грубо центрированы вокруг каждого элемента log(AssetPrice). Значение по умолчанию для NumFFT равно 2 ^ 12. В дополнение к чувствительности первого выхода, дополнительный последний выход содержит соответствующие удары.

Settle = datenum('29-Jun-2017');
Maturity = datemnth(Settle, 6);
Strike = []; % Strike is not specified (will use the entire FFT strike grid)

% Compute option sensitivities for the entire FFT strike grid
[Delta, Kout] = optSensByBatesFFT(Rate, AssetPrice, Settle, Maturity, OptSpec, Strike, ...
    V0, ThetaV, Kappa, SigmaV, RhoSV, MeanJ, JumpVol, JumpFreq, ...
    'DividendYield', DividendYield, 'OutSpec', "delta");

% Show the lowest and highest strike values on the FFT strike grid
format
MinStrike = Kout(1) % Lowest possible strike in the current FFT strike grid
MinStrike = 2.9205e-135
MaxStrike = Kout(end) % Highest possible strike in the current FFT strike grid
MaxStrike = 1.8798e+138
% Show a subset of the strikes and corresponding option sensitivities
Range = (2046:2052);
[Kout(Range) Delta(Range)]
ans = 7×2

   50.4929    0.9846
   58.8640    0.9585
   68.6231    0.8498
   80.0000    0.5630
   93.2631    0.1955
  108.7251    0.0319
  126.7505    0.0033

Изменение количества точек БПФ (или БПФ) и сравнение с optSensByBatesNI

Попробуйте использовать другое количество точек БПФ (или БПФ) и сравните результаты с числовым интегрированием. В отличие от этого, optSensByBatesFFT, который использует методы FFT (или FRFT) для быстрого вычисления по всему спектру ударов, optSensByBatesNI функция использует прямое численное интегрирование, и обычно она медленнее, особенно при многократных ударах. Однако значения, вычисленные optSensByBatesNI может служить эталоном для корректировки настроек для optSensByBatesFFT.

% Try a smaller number of FFT points 
% (e.g. for faster performance or smaller memory footprint)
NumFFT = 2^10; % Smaller than the default value of 2^12
Strike = []; % Strike is not specified (will use the entire FFT strike grid)
[Delta, Kout] = optSensByBatesFFT(Rate, AssetPrice, Settle, Maturity, OptSpec, Strike, ...
    V0, ThetaV, Kappa, SigmaV, RhoSV, MeanJ, JumpVol, JumpFreq, ...
    'DividendYield', DividendYield, 'OutSpec', "delta", 'NumFFT', NumFFT);

% Compare with numerical integration method
Range = (510:516);
Strike = Kout(Range);
DeltaFFT = Delta(Range);
DeltaNI = optSensByBatesNI(Rate, AssetPrice, Settle, Maturity, OptSpec, Strike, V0, ...
    ThetaV, Kappa, SigmaV, RhoSV, MeanJ, JumpVol, JumpFreq, ...
    'DividendYield', DividendYield, 'OutSpec', "delta");
Error = abs(DeltaFFT-DeltaNI);
table(Strike, DeltaFFT, DeltaNI, Error)
ans=7×4 table
    Strike     DeltaFFT      DeltaNI        Error   
    ______    __________    __________    __________

    12.696        0.9265       0.99002      0.063524
    23.449       0.95153       0.99002      0.038497
    43.312       0.95928       0.98928      0.029994
        80        0.5355       0.56303      0.027531
    147.76     0.0016267    0.00025691     0.0013698
    272.93    0.00058267    1.8942e-09    0.00058267
    504.11    0.00017752    8.7099e-10    0.00017752

Дальнейшие корректировки БПФ (или БПФ)

Если значения в выходных данных DeltaFFT значительно отличаются от таковых в DeltaNI, попробуйте внести изменения в optSensByBatesFFT настройки, такие как CharacteristicFcnStep, LogStrikeStep, NumFFT, DampingFactorи так далее. Обратите внимание, что если (LogStrikeStep * CharacteristicFcnStep) равно 2 * pi/NumFFT, используется БПФ. В противном случае используется FRFT.

Strike = []; % Strike is not specified (will use the entire FFT or FRFT strike grid)
[Delta, Kout] = optSensByBatesFFT(Rate, AssetPrice, Settle, Maturity, OptSpec, Strike, ...
    V0, ThetaV, Kappa, SigmaV, RhoSV, MeanJ, JumpVol, JumpFreq, ...    
    'DividendYield', DividendYield, 'OutSpec', "delta", 'NumFFT', NumFFT, ...
    'CharacteristicFcnStep', 0.065, 'LogStrikeStep', 0.001);

% Compare with numerical integration method
Strike = Kout(Range);
DeltaFFT = Delta(Range);
DeltaNI = optSensByBatesNI(Rate, AssetPrice, Settle, Maturity, OptSpec, Strike, V0, ...
    ThetaV, Kappa, SigmaV, RhoSV, MeanJ, JumpVol, JumpFreq, ...
    'DividendYield', DividendYield, 'OutSpec', "delta");
Error = abs(DeltaFFT-DeltaNI);
table(Strike, DeltaFFT, DeltaNI, Error)
ans=7×4 table
    Strike    DeltaFFT    DeltaNI      Error   
    ______    ________    _______    __________

    79.76     0.57037     0.57037    6.3042e-09
    79.84     0.56793     0.56793     7.156e-09
    79.92     0.56548     0.56548     7.975e-09
       80     0.56303     0.56303    8.7573e-09
    80.08     0.56057     0.56057    9.4992e-09
    80.16     0.55811     0.55811    1.0197e-08
    80.24     0.55564     0.55564    1.0847e-08

% Save the final FFT (or FRFT) strike grid for future reference. For
% example, it provides information about the range of Strike inputs for
% which the FFT (or FRFT) operation is valid.
FFTStrikeGrid = Kout;
MinStrike = FFTStrikeGrid(1) % Strike cannot be less than MinStrike
MinStrike = 47.9437
MaxStrike = FFTStrikeGrid(end) % Strike cannot be greater than MaxStrike
MaxStrike = 133.3566

Вычисление чувствительности опции для одиночного удара

После определения требуемых настроек БПФ (или БПФ) используйте Strike ввод для указания ударов вместо предоставления пустого массива. Если указанные удары не совпадают со значением на сетке ударов БПФ (или FRFT), выходные данные интерполируются на указанных ударах.

Settle = datenum('29-Jun-2017');
Maturity = datemnth(Settle, 6);
Strike = 80; 

Delta = optSensByBatesFFT(Rate, AssetPrice, Settle, Maturity, OptSpec, Strike, ...
    V0, ThetaV, Kappa, SigmaV, RhoSV, MeanJ, JumpVol, JumpFreq, ...
    'DividendYield', DividendYield, 'OutSpec', "delta", 'NumFFT', NumFFT, ...
    'CharacteristicFcnStep', 0.065, 'LogStrikeStep', 0.001)
Delta = 0.5630

Вычисление чувствительности опций для вектора ударов

Используйте Strike ввод для указания ударов.

Settle = datenum('29-Jun-2017');
Maturity = datemnth(Settle, 6);
Strike = (76:2:84)';

Delta = optSensByBatesFFT(Rate, AssetPrice, Settle, Maturity, OptSpec, Strike, ...
    V0, ThetaV, Kappa, SigmaV, RhoSV, MeanJ, JumpVol, JumpFreq, ...
    'DividendYield', DividendYield, 'OutSpec', "delta", 'NumFFT', NumFFT, ...
    'CharacteristicFcnStep', 0.065, 'LogStrikeStep', 0.001)
Delta = 5×1

    0.6807
    0.6234
    0.5630
    0.5011
    0.4392

Вычисление чувствительности опций для вектора ударов и вектора дат одинаковой длины

Используйте Strike ввод для указания ударов. Также, Maturity ввод может быть вектором, но он должен соответствовать длине Strike вектор, если ExpandOutput аргумент пары имя-значение не установлен в значение "true".

Settle = datenum('29-Jun-2017');
Maturity = datemnth(Settle, [12 18 24 30 36]); % Five maturities
Strike = [76 78 80 82 84]'; % Five strikes

Delta = optSensByBatesFFT(Rate, AssetPrice, Settle, Maturity, OptSpec, Strike, ...
    V0, ThetaV, Kappa, SigmaV, RhoSV, MeanJ, JumpVol, JumpFreq, ...
    'DividendYield', DividendYield, 'OutSpec', "delta", 'NumFFT', NumFFT, ...
    'CharacteristicFcnStep', 0.065, 'LogStrikeStep', 0.001) % Five values in vector output
Delta = 5×1

    0.6625
    0.6232
    0.5958
    0.5748
    0.5577

Развернуть выходные данные поверхности

Установите ExpandOutput аргумент пары имя-значение для "true" для расширения выходных данных в NStrikesоколо-NMaturities матрицы. В этом случае они являются квадратными матрицами.

[Delta, Kout] = optSensByBatesFFT(Rate, AssetPrice, Settle, Maturity, OptSpec, Strike, ...
    V0, ThetaV, Kappa, SigmaV, RhoSV, MeanJ, JumpVol, JumpFreq, ...
    'DividendYield', DividendYield, 'OutSpec', "delta", 'NumFFT', NumFFT, ...
    'CharacteristicFcnStep', 0.065, 'LogStrikeStep', 0.001, ...
    'ExpandOutput', true) % (5 x 5) matrix output
Delta = 5×5

    0.6625    0.6556    0.6515    0.6483    0.6455
    0.6222    0.6232    0.6239    0.6241    0.6238
    0.5805    0.5900    0.5958    0.5996    0.6019
    0.5381    0.5564    0.5674    0.5748    0.5798
    0.4954    0.5225    0.5389    0.5499    0.5577

Kout = 5×5

    76    76    76    76    76
    78    78    78    78    78
    80    80    80    80    80
    82    82    82    82    82
    84    84    84    84    84

Вычисление чувствительности опций для вектора ударов и вектора дат различной длины

Когда ExpandOutput является "true", NStrikes не обязательно соответствовать NMaturities. То есть выход NStrikesоколо-NMaturities матрица может быть прямоугольной.

Settle = datenum('29-Jun-2017');
Maturity = datemnth(Settle, 12*(0.5:0.5:3)'); % Six maturities
Strike = (76:2:84)'; % Five strikes

Delta = optSensByBatesFFT(Rate, AssetPrice, Settle, Maturity, OptSpec, Strike, ...
    V0, ThetaV, Kappa, SigmaV, RhoSV, MeanJ, JumpVol, JumpFreq, ...
    'DividendYield', DividendYield, 'OutSpec', "delta", 'NumFFT', NumFFT, ...
    'CharacteristicFcnStep', 0.065, 'LogStrikeStep', 0.001, ...
    'ExpandOutput', true) % (5 x 6) matrix output
Delta = 5×6

    0.6807    0.6625    0.6556    0.6515    0.6483    0.6455
    0.6234    0.6222    0.6232    0.6239    0.6241    0.6238
    0.5630    0.5805    0.5900    0.5958    0.5996    0.6019
    0.5011    0.5381    0.5564    0.5674    0.5748    0.5798
    0.4392    0.4954    0.5225    0.5389    0.5499    0.5577

Расчет чувствительности опционов для вектора ударов и вектора цен на активы

Когда ExpandOutput является "true", выходной сигнал также может быть NStrikesоколо-NAssetPrices прямоугольная матрица путем принятия вектора цен активов.

Settle = datenum('29-Jun-2017');
Maturity = datemnth(Settle, 12); % Single maturity
ManyAssetPrices = [70 75 80 85]; % Four asset prices
Strike = (76:2:84)'; % Five strikes

Delta = optSensByBatesFFT(Rate, ManyAssetPrices, Settle, Maturity, OptSpec, ...
    Strike, V0, ThetaV, Kappa, SigmaV, RhoSV, MeanJ, JumpVol, JumpFreq, ...
    'DividendYield', DividendYield, 'OutSpec', "delta", 'NumFFT', NumFFT, ...
    'CharacteristicFcnStep', 0.065, 'LogStrikeStep', 0.001, ...
    'ExpandOutput', true) % (5 x 4) matrix output
Delta = 5×4

    0.4350    0.5579    0.6625    0.7457
    0.3881    0.5124    0.6222    0.7120
    0.3432    0.4670    0.5805    0.6763
    0.3010    0.4223    0.5381    0.6390
    0.2619    0.3789    0.4954    0.6002

Поверхности чувствительности опций печати

Используйте Strike ввод для указания ударов. Увеличить значение для NumFFT поддерживать более широкий спектр ударов. Также, Maturity входным может быть вектор. Набор ExpandOutput кому "true" для вывода поверхностей в виде NStrikesоколо-NMaturities матрицы.

Settle = datenum('29-Jun-2017');
Maturity = datemnth(Settle, 12*[1/12 0.25 (0.5:0.5:3)]');
Times = yearfrac(Settle, Maturity);
Strike = (2:2:200)';

% Increase 'NumFFT' to support a wider range of strikes
NumFFT = 2^13;

[Delta, Gamma, Rho, Theta, Vega, VegaLT] = optSensByBatesFFT(...
    Rate, AssetPrice, Settle, Maturity, OptSpec, Strike, ...
    V0, ThetaV, Kappa, SigmaV, RhoSV, MeanJ, JumpVol, JumpFreq, ...
    'DividendYield', DividendYield, 'NumFFT', NumFFT, ...
    'CharacteristicFcnStep', 0.065, 'LogStrikeStep', 0.001, ...
    'OutSpec', ["delta", "gamma", "rho", "theta", "vega", "vegalt"], ...
    'ExpandOutput', true);

[X,Y] = meshgrid(Times,Strike);

figure;
surf(X,Y,Delta);
title('Delta');
xlabel('Years to Option Expiry');
ylabel('Strike');
view(-112,34);
xlim([0 Times(end)]);

Figure contains an axes. The axes with title Delta contains an object of type surface.

figure;
surf(X,Y,Gamma)
title('Gamma')
xlabel('Years to Option Expiry')
ylabel('Strike')
view(-112,34);
xlim([0 Times(end)]);

Figure contains an axes. The axes with title Gamma contains an object of type surface.

figure;
surf(X,Y,Rho)
title('Rho')
xlabel('Years to Option Expiry')
ylabel('Strike')
view(-112,34);
xlim([0 Times(end)]);

Figure contains an axes. The axes with title Rho contains an object of type surface.

figure;
surf(X,Y,Theta)
title('Theta')
xlabel('Years to Option Expiry')
ylabel('Strike')
view(-112,34);
xlim([0 Times(end)]);

Figure contains an axes. The axes with title Theta contains an object of type surface.

figure;
surf(X,Y,Vega)
title('Vega')
xlabel('Years to Option Expiry')
ylabel('Strike')
view(-112,34);
xlim([0 Times(end)]);

Figure contains an axes. The axes with title Vega contains an object of type surface.

figure;
surf(X,Y,VegaLT)
title('VegaLT')
xlabel('Years to Option Expiry')
ylabel('Strike')
view(-112,34);
xlim([0 Times(end)]);

Figure contains an axes. The axes with title VegaLT contains an object of type surface.

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

свернуть все

Непрерывно складываемая безрисковая процентная ставка, заданная как скалярное десятичное значение.

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

Текущая базовая цена актива, указанная как числовое значение с использованием скаляра или NINSTоколо-1 или NColumnsоколо-1 вектор.

Дополнительные сведения о соответствующих размерах для AssetPrice, см. аргумент пара имя-значение ExpandOutput.

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

Дата расчета опциона, указанная как NINSTоколо-1 или NColumnsоколо-1 вектор с использованием серийных номеров дат, векторов символов даты, массивов даты и времени или строковых массивов. Settle дата должна быть до Maturity дата.

Дополнительные сведения о соответствующих размерах для Settle, см. аргумент пара имя-значение ExpandOutput.

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

Дата погашения опциона, указанная как NINSTоколо-1 или NColumnsоколо-1 вектор с использованием серийных номеров дат, векторов символов даты, массивов даты и времени или строковых массивов.

Дополнительные сведения о соответствующих размерах для Maturity, см. аргумент пара имя-значение ExpandOutput.

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

Определение опции, указанной как NINSTоколо-1 или NColumnsоколо-1 вектор с использованием массива ячеек из символьных векторов или строковых массивов со значениями 'call' или 'put'.

Дополнительные сведения о соответствующих размерах для OptSpec, см. аргумент пара имя-значение ExpandOutput.

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

Цена страйка опциона, указанная как NINSTоколо-1, NRowsоколо-1, NRowsоколо-NColumns вектор ударных цен.

Если этот вход является пустым массивом ([]), цены опционов вычисляются по всей страйк-сетке FFT (или FRFT), которая определяется как exp(log-strike grid). Каждый столбец сетки log-strike имеет 'NumFFT' точки с 'LogStrikeStep' интервалы, которые грубо центрированы вокруг каждого элемента log(AssetPrice).

Дополнительные сведения о соответствующих размерах для Strike, см. аргумент пара имя-значение ExpandOutput.

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

Начальная дисперсия подстилающего актива, заданная как скалярное числовое значение.

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

Долгосрочная дисперсия подстилающего актива, заданная как скалярное числовое значение.

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

Средняя скорость пересмотра для подстилающего актива, заданная как скалярное числовое значение.

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

Волатильность дисперсии недоделанного актива, определяемая как скалярное числовое значение.

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

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

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

Среднее значение случайного процентного размера перехода (J), указанное как скалярное десятичное значение, где log(1 + J) обычно распределяется со средним (log(1+MeanJ)-0.5*JumpVol^ 2) и стандартное отклонениеJumpVol.

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

Стандартное отклонение log(1 + J) гдеJ - случайный размер перехода в процентах, заданный как скалярное десятичное значение.

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

Годовая частота процесса перехода Пуассона, заданная как скалярное числовое значение.

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

Аргументы пары «имя-значение»

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

Пример: [PriceSens,StrikeOut] = optSensByBatesFFT(Rate,AssetPrice,Settle,Maturity,OptSpec,Strike,V0,ThetaV,Kappa,SigmaV,RhoSV,MeanJ,JumpVol,JumpFreq,'Basis',7)

Количество дней прибора, указанное как пара, разделенная запятыми, состоящая из '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

Дополнительные сведения см. в разделе Базис.

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

Постоянно смешанная базовая доходность активов, указанная как пара, разделенная запятыми, состоящая из 'DividendYield' и скалярное числовое значение.

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

Премия за риск волатильности, указанная как пара, разделенная запятыми, состоящая из 'VolRiskPremium' и скалярное числовое значение.

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

Флаг, обозначающий состав Little Heston Trap по Albrecher et al., указанный как пара, разделенная запятыми, состоящая из: 'LittleTrap' и логическое:

  • true - Использовать композицию Albrecher et al.

  • false - Использовать оригинальную формацию Хестона.

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

Определите выходы, указанные как разделенная запятыми пара, состоящая из 'OutSpec' и NOUTоколо-1 или 1около-NOUT строковый массив или массив ячеек символьных векторов с поддерживаемыми значениями.

Примечание

"vega" - чувствительность по отношению к исходной волатильности sqrt (V0). Напротив, "vegalt" - чувствительность к долгосрочной волатильности sqrt (ThetaV).

Пример: OutSpec = ["price","delta","gamma","vega","rho","theta","vegalt"]

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

Количество точек сетки в переменной характеристической функции и в каждом столбце сетки log-strike, указанной как разделенная запятыми пара, состоящая из 'NumFFT' и скалярное числовое значение.

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

Переменная шаг сетки характеристической функции, указанная как разделенная запятыми пара, состоящая из 'CharacteristicFcnStep' и скалярное числовое значение.

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

Интервал сетки log-strike, указанный как разделенная запятыми пара, состоящая из 'LogStrikeStep' и скалярное числовое значение.

Примечание

Если (LogStrikeStep*CharacteristicFcnStepявляется 2*pi/NumFFT, используется БПФ. В противном случае используется FRFT.

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

Коэффициент демпфирования для состава Карра-Мадана, определяемый как пара, разделенная запятыми, состоящая из 'DampingFactor' и скалярное числовое значение.

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

Тип квадратуры, определяемый как разделенная запятыми пара, состоящая из 'Quadrature' и односимвольный вектор или строковый массив со значением 'simpson' или 'trapezoidal'.

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

Флаг для расширения выходных данных, указанный как разделенная запятыми пара, состоящая из 'ExpandOutput' и логическое:

  • true - если true, выходы: NRowsоколо- NColumns матрицы. NRows - количество ударов для каждого столбца, которое определяется Strike вход. Например, Strike может быть NRowsоколо-1 вектор или NRowsоколо-NColumns матрица. Если Strike пуст, NRows равно NumFFT. NColumns определяется размерами AssetPrice, Settle, Maturity, и OptSpec, которые все должны быть скалярными или NColumnsоколо-1 векторы.

  • false - если false, выходы: NINSTоколо-1 векторы. Кроме того, входные данные Strike, AssetPrice, Settle, Maturity, и OptSpec все должны быть скалярными или NINSTоколо-1 векторы.

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

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

свернуть все

Цены опционов или чувствительности, возвращенные как NINSTоколо-1, или NRowsоколо-NColumns, в зависимости от ExpandOutput. Аргумент пары имя-значение OutSpec определяет типы и порядок выходов.

Удары, соответствующие Price, возвращено как NINSTоколо-1, или NRowsоколо-NColumns, в зависимости от ExpandOutput.

Подробнее

свернуть все

Вариант ванили

Вариант ванили - это категория вариантов, включающая только самые стандартные компоненты.

Вариант ванили имеет срок годности и простую цену страйка. Варианты в американском и европейском стиле классифицируются как варианты ванили.

Окупаемость опциона на ваниль выглядит следующим образом:

  • Для вызова: max (St K, 0)

  • Для put: max (K St, 0)

где:

St - цена базового актива в момент времени t.

K - цена удара.

Дополнительные сведения см. в разделе Параметр ванили.

Модель диффузии скачка стохастической волатильности Бейтса

Модель Бейтса (Bates (1996)) является расширением модели Хестона, где, помимо стохастической волатильности, были добавлены параметры скачка диффузии, аналогичные Мертону (1976), для моделирования внезапных движений цен активов.

Стохастическое дифференциальное уравнение:

dSt = (r−q−λpμJ) Stdt+vtStdWt+JStdPtdvt =κ (θ−vt) dt +σvvtdWtE [dWtdWtv] =pdtprob (dPt=1) = λpdt

где

r - непрерывная безрисковая ставка.

q - непрерывный дивидендный выход.

St - цена актива в момент времени t.

vt - отклонение цены основного средства в момент времени t.

J - случайный процентный размер скачка, обусловленный происходящим скачком, где ln(1 + J) обычно распределяется со средним значением ln (1 + мкJ) − δ22 и стандартным отклонением δ, а (1 + J) имеет логнормальное распределение:

1 (1 + J) δ2āexp {[ln (1 + J) (ln (1 + мкJ) − δ22] 2δ22}

v0 - начальное отклонение цены основного средства при t = 0 (v0 > 0).

λ - долгосрочный уровень дисперсии для (start> 0).

δ - средняя скорость реверсирования для («» > 0 «»).

startv - дисперсная волатильность для (startv > 0).

p - корреляция между процессами Вайнера Wt и Wtv для (-1 ≤ p ≤ 1).

мкДж представляет собой среднее значение J для (мкДж > -1).

δ - стандартное отклонение ln(1 + J) для (δ ≥ 0 ).

λ p - годовая частота (интенсивность) процесса Пуассона Pt для (λ p ≥ 0).

Характеристическая функция fBatesj (start) для j = 1 (средний показатель цены актива) и j = 2 (нейтральный по отношению к риску показатель):

fBates (ϕ) =exp (Cj+Djv0+iϕlnSt) exp (λpτ (1 +μJ) mj+12 [(1 +μj) iϕeδ2 (mjiϕ + (iϕ) 22) −1] −λpτμJiϕ) mj = {m1=12m2 =−12} CJ = (r−q) iϕτ +κθσv2 [(bj−pσviϕ + ди-джей) τ−2ln (1−gjedjτ1−gj)] Dj=bj−pσviϕ + djσv2 (1−edjτ1−gjedjτ) gj=bj−pσviϕ + djbj−pσviϕ−djdj =  (bj−pσviϕ) 2−σv2 (2ujiϕ−ϕ2), где для j=1,2:u1=12, u2 =−12, b1 =κ +λVolRisk−pσv, b2 =κ +λVolRisk

где

start- переменная характеристической функции.

ƛVolRisk - премия за риск волатильности.

start- время созревания для (start= T - t).

i - единичное мнимое число для (i2 = -1).

Определения для Cj и Dj в «The Little Heston Trap» Альбрехера и др. (2007) являются:

CJ = (r−q) iϕτ +κθσv2 [(bj−pσviϕ−dj) τ−2ln (1−εje−djτ1−εj)] Dj=bj−pσviϕ−djσv2 (1−e−djτ1−εje−djτ) εj=bj−pσviϕ−djbj−pσviϕ + ди-джей

Формулировка Карр-Мадан

Формулировка Карра и Мадана (1999) является популярной модифицированной реализацией структуры Хестона (1993).

Вместо того, чтобы вычислять вероятности P1 и P2 как промежуточные шаги, Карр и Мадан разработали альтернативное выражение, так что принятие его обратного преобразования Фурье дает цену опциона непосредственно.

Вызов (k) =e−αkπ∫0∞Re[e−iukψ (u)] dustart( u) = e rstartf2 (start= (u − (α + 1) i)) α2 + α u2 + iu (+ 1) Пут (K) = вызов (K) + Ke − r

где

r - непрерывная безрисковая ставка.

q - непрерывный дивидендный выход.

St - цена актива в момент времени t.

start- время до зрелости (start= T-t).

Call (K) - цена вызова при ударе K.

Пут (К) - цена пут при ударе К.

i - единичное мнимое число (i2 = -1).

start- переменная характеристической функции.

α - коэффициент демпфирования.

u - это переменная характеристической функции для интегрирования, где start= = (u - (α + 1) i).

f2 (start) является характеристической функцией для P2.

P2 - вероятность St > K в рамках нейтральной по риску меры для модели.

Чтобы применить FFT или FRFT к этой формулировке, переменная характеристической функции для интегрирования u дискретизируется в NumFFT(N) точек с размером шага CharacteristicFcnStep (Δu), и логарифмический удар k дискретизируется в N точек с размером шага LogStrikeStep(Δk).

Дискретизированная переменная характеристической функции для интегрирования uj (для j = 1,2,3,..., N) имеет минимальное значение 0 и максимальное значение (N-1) (Δu) и аппроксимирует диапазон непрерывного интегрирования от 0 до бесконечности.

Дискретизированная логарифмическая решетка, kn (для n = 1, 2, 3, N) приблизительно центрирована вокругln(St), с минимальным значением

ln (St) N2Δk

и максимальное значение, равное

ln (St) + (N2 1) Δk

Где минимально допустимый удар

Штексп (N2Δk)

и максимально допустимый удар

Stexp [(N2 1) Δk]

В результате дискретизации выражение для опции вызова становится

Вызов (kn) =Δue−αknπ∑j=1NRe[e−iΔkΔu (j 1) (n 1) eiuj [NΔk2 ln (St)] (uj)] wj

где

Δu - размер шага переменной дискретизированной характеристической функции для интегрирования.

Δk - размер шага дискретизированного логарифмического удара.

N - количество точек БПФ/БПФ

wj - веса квадратуры, используемые для аппроксимации интеграла.

FFT используется для оценки вышеуказанного выражения, если Δk и Δu подвержены следующему ограничению:

ΔkΔu = (2πN)

в противном случае функции используют метод FRFT, описанный в Chourdakis (2005).

Ссылки

[1] Альбрехер, Х., Майер, П., Шоутенс, В. и Тистаерт, Дж. «Маленькая ловушка Хестона». Рабочий документ, Линц и Грацский технологический университет, К. У. Левен, ING Financial Markets, 2006.

[2] Бейтс, Д. С. «Скачки и стохастическая волатильность: процессы обменного курса, неявные в опционах Deutsche Mark». Обзор финансовых исследований. Том 9. № 1. 1996.

[3] Карр, П. и Д. Б. Мадан. «Оценка опциона с использованием быстрого преобразования Фурье». Журнал вычислительных финансов. Том 2. № 4. 1999.

[4] Чурдакис, К. «Опционное ценообразование с использованием дробного БПФ». Журнал вычислительных финансов. 2005.

[5] Хестон, С. Л. «Решение в закрытой форме для опционов со стохастической волатильностью с приложениями к облигациям и валютным опционам». Обзор финансовых исследований. Том 6. № 2. 1993.

Представлен в R2018a