optSensByHestonFFT

Цена опции и чувствительность моделью Хестона использование БПФ и FRFT

Описание

пример

[PriceSens,StrikeOut] = optSensByHestonFFT(Rate,AssetPrice,Settle,Maturity,OptSpec,Strike,V0,ThetaV,Kappa,SigmaV,RhoSV) вычисляет европейскую цену опции ванили и чувствительность моделью Хестона, с помощью БПФ Топкого-места-Madan и методов Chourdakis FRFT.

пример

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

Примеры

свернуть все

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

Задайте переменные опции и параметры модели Хестона

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;

Вычислите чувствительность опции для целого БПФ (или FRFT) сетка забастовки, не задавая "забастовку"

Вычислите чувствительность опции и также выведите соответствующие забастовки. Если Strike вход пуст ([] ), чувствительность опции будет вычислена на целом БПФ (или FRFT) сетка забастовки. БПФ (или FRFT) сетка забастовки определяется как exp(log-strike grid), где каждый столбец сетки логарифмической забастовки имеет 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] = optSensByHestonFFT(Rate, AssetPrice, Settle, Maturity, OptSpec, Strike, ...
    V0, ThetaV, Kappa, SigmaV, RhoSV, '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.9866
   58.8640    0.9671
   68.6231    0.8724
   80.0000    0.5775
   93.2631    0.1545
  108.7251    0.0059
  126.7505    0.0000

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

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

% 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] = optSensByHestonFFT(Rate, AssetPrice, Settle, Maturity, OptSpec, Strike, ...
    V0, ThetaV, Kappa, SigmaV, RhoSV, 'DividendYield', DividendYield, ...
    'OutSpec', "delta", 'NumFFT', NumFFT);

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

    12.696       0.90066       0.99002       0.08936
    23.449       0.93635       0.99002      0.053677
    43.312       0.94796        0.9896      0.041645
        80       0.53274       0.57747      0.044733
    147.76     0.0032769      2.45e-08     0.0032769
    272.93    0.00098029    -1.399e-10    0.00098029
    504.11    0.00028151    5.2868e-10    0.00028151

Внесите дальнейшие корректировки в БПФ (или FRFT)

Если значения в выходе DeltaFFT существенно отличаются от тех в DeltaNI, попытайтесь внести изменения в optSensByHestonFFT настройки, такие как 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] = optSensByHestonFFT(Rate, AssetPrice, Settle, Maturity, OptSpec, Strike, ...
    V0, ThetaV, Kappa, SigmaV, RhoSV, 'DividendYield', DividendYield, ...
    'OutSpec', "delta", 'NumFFT', NumFFT, 'CharacteristicFcnStep', 0.065, 'LogStrikeStep', 0.001);

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

    79.76     0.58558     0.58558    3.0538e-08
    79.84     0.58289     0.58289    2.8865e-08
    79.92     0.58018     0.58018    2.7053e-08
       80     0.57747     0.57747    2.5111e-08
    80.08     0.57476     0.57476    2.3049e-08
    80.16     0.57203     0.57203    2.0875e-08
    80.24      0.5693      0.5693    1.8601e-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

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

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

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

Delta = optSensByHestonFFT(Rate, AssetPrice, Settle, Maturity, OptSpec, Strike, ...
    V0, ThetaV, Kappa, SigmaV, RhoSV, 'DividendYield', DividendYield, ...
    'OutSpec', "delta", 'NumFFT', NumFFT, 'CharacteristicFcnStep', 0.065, ...
    'LogStrikeStep', 0.001)
Delta = 0.5775

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

Используйте Strike введите, чтобы задать забастовки.

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

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

    0.7043
    0.6433
    0.5775
    0.5083
    0.4377

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

Используйте 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 = optSensByHestonFFT(Rate, AssetPrice, Settle, Maturity, OptSpec, Strike, ...
    V0, ThetaV, Kappa, SigmaV, RhoSV, 'DividendYield', DividendYield, ...
    'OutSpec', "delta", 'NumFFT', NumFFT, 'CharacteristicFcnStep', 0.065, ...
    'LogStrikeStep', 0.001) % Five values in vector output
Delta = 5×1

    0.6848
    0.6413
    0.6095
    0.5841
    0.5631

Расширьте Выходные параметры для поверхности

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

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

    0.6848    0.6762    0.6703    0.6654    0.6609
    0.6416    0.6413    0.6404    0.6390    0.6372
    0.5960    0.6048    0.6095    0.6119    0.6129
    0.5485    0.5671    0.5776    0.5841    0.5882
    0.4997    0.5286    0.5452    0.5559    0.5631

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 = optSensByHestonFFT(Rate, AssetPrice, Settle, Maturity, OptSpec, Strike, ...
    V0, ThetaV, Kappa, SigmaV, RhoSV, 'DividendYield', DividendYield, ...
    'OutSpec', "delta", 'NumFFT', NumFFT, 'CharacteristicFcnStep', 0.065, ...
    'LogStrikeStep', 0.001, 'ExpandOutput', true) % (5 x 6) matrix output
Delta = 5×6

    0.7043    0.6848    0.6762    0.6703    0.6654    0.6609
    0.6433    0.6416    0.6413    0.6404    0.6390    0.6372
    0.5775    0.5960    0.6048    0.6095    0.6119    0.6129
    0.5083    0.5485    0.5671    0.5776    0.5841    0.5882
    0.4377    0.4997    0.5286    0.5452    0.5559    0.5631

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

Когда 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 = optSensByHestonFFT(Rate, ManyAssetPrices, Settle, Maturity, OptSpec, Strike, ...
    V0, ThetaV, Kappa, SigmaV, RhoSV, 'DividendYield', DividendYield, ...
    'OutSpec', "delta", 'NumFFT', NumFFT, 'CharacteristicFcnStep', 0.065, ...
    'LogStrikeStep', 0.001, 'ExpandOutput', true) % (5 x 4) matrix output
Delta = 5×4

    0.4293    0.5708    0.6848    0.7705
    0.3737    0.5193    0.6416    0.7364
    0.3200    0.4668    0.5960    0.6994
    0.2693    0.4143    0.5485    0.6597
    0.2226    0.3628    0.4997    0.6177

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

Используйте 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] = ...
    optSensByHestonFFT(Rate, AssetPrice, Settle, Maturity, OptSpec, Strike, ...
    V0, ThetaV, Kappa, SigmaV, RhoSV, 'DividendYield', DividendYield, 'NumFFT', NumFFT, ...
    'CharacteristicFcnStep', 0.065, 'LogStrikeStep', 0.001, 'ExpandOutput', true, ...
    'OutSpec', ["delta", "gamma", "rho", "theta", "vega", "vegalt"]);

[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 object. The axes object 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 object. The axes object 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 object. The axes object 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 object. The axes object 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 object. The axes object 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 object. The axes object with title VegaLT contains an object of type surface.

Входные параметры

свернуть все

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

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

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

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

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

Расчетный день опции в виде NINST- 1 или NColumns- 1 вектор с помощью последовательных чисел даты, векторов символов даты, массивов datetime или строковых массивов. Settle дата должна быть перед Maturity дата.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Аргументы name-value

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

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

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

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

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

Надбавка за риск энергозависимости в виде разделенной запятой пары, состоящей из 'VolRiskPremium' и скалярное числовое значение.

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

Отметьте указание на Небольшую формулировку Прерывания Хестона Albrecher и др. в виде разделенной запятой пары, состоящей из 'LittleTrap' и логическое:

  • true — Используйте Albrecher и др. формулировка.

  • false — Используйте исходное формирование Хестона.

Типы данных: логический

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

Примечание

"vega" чувствительность с уважением начальная энергозависимость sqrt (V0). В отличие от этого "vegalt" чувствительность относительно долгосрочной энергозависимости sqrt (ThetaV).

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

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

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

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

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

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

Интервал сетки логарифмической забастовки в виде разделенной запятой пары, состоящей из 'LogStrikeStep' и скалярное числовое значение.

Примечание

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

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

Коэффициент затухания для формулировки Топкого-места-Madan в виде разделенной запятой пары, состоящей из '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 векторы.

Типы данных: логический

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

свернуть все

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

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

Больше о

свернуть все

Опция ванили

vanilla option является категорией опций, которая включает только самые стандартные компоненты.

Опция ванили имеет дату истечения срока и прямую цену исполнения опциона. Американские параметры стиля и европейские параметры стиля оба категоризированы как опции ванили.

Выплата для опции ванили следующие:

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

  • Для помещенного: max(KSt,0)

где:

St является ценой базового актива во время t.

K является ценой исполнения опциона.

Для получения дополнительной информации см. Опцию Ванили.

Хестон стохастическая модель энергозависимости

Модель Хестона является расширением модели Black-Scholes, где энергозависимость (квадратный корень из отклонения) больше не принимается постоянным, и отклонение теперь следует за стохастическим (CIR) процесс. Этот процесс позволяет моделировать улыбки подразумеваемой волатильности, наблюдаемые на рынке.

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

dSt=(rq)Stdt+vtStdWtdvt=κ(θvt)dt+σvvtdWtvE[dWtdWtv]=pdt

где

r является непрерывным безрисковым уровнем.

q является непрерывной дивидендной доходностью.

S t является ценой активов во время t.

v t является отклонением цен активов во время t

v 0 является начальным отклонением цены активов в t = 0 для (v 0> 0).

θ является долгосрочным уровнем отклонения для (θ> 0).

κ является скоростью возвращения к среднему уровню для отклонения для (κ> 0).

σ v является энергозависимостью отклонения для (σ v> 0).

p является корреляцией между процессами Вайнера W t и Wvt для (-1 ≤ p ≤ 1).

Характеристическая функция fHestonj(ϕ) для j = 1 (мера цен активов) и j = 2 (нейтральная к риску мера):

fHestonj(ϕ)=exp(Cj+Djv0+iϕlnSt)Cj=(rq)iϕτ+κθσv2[(bjpσviϕ+dj)τ2ln(1gjedjτ1gj)]Dj=bjpσviϕ+djσv2(1edjτ1gjedjτ)gj=bjpσviϕ+djbjpσviϕdjdj=(bjpσviϕ)2σv2(2ujiϕϕ2)где для j=1,2:u1=12,u2=12,b1=κ+λVolRiskpσv,b2=κ+λVolRisk

где

ϕ является переменной характеристической функции.

ƛ VolRisk является надбавкой за риск энергозависимости.

τ является временем к зрелости (τ = T - t).

i является модульным мнимым числом (i2 = -1).

Определения для C j и D j под “Небольшим Прерыванием Хестона” Albrecher и др. (2007):

Cj=(rq)iϕτ+κθσv2[(bjpσviϕdj)τ2ln(1εjedjτ1εj)]Dj=bjpσviϕdjσv2(1edjτ1εjedjτ)εj=bjpσviϕdjbjpσviϕ+dj

Формулировка топкого-места-Madan

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

Вместо того, чтобы вычислять вероятности, P 1 и P 2 как промежуточное звено продвигается, Топкое место и Мадан разработали альтернативное выражение так, чтобы взятие его обратного преобразования Фурье дало саму цену опции непосредственно.

Call(k)=eαkπ0Re[eiukψ(u)]duψ(u)=erτf2(ϕ=(u(α+1)i))α2+αu2+iu(2α+1)Put(K)=Call(K)+KerτSteqτ

где

r является непрерывным безрисковым уровнем.

q является непрерывной дивидендной доходностью.

S t является ценой активов во время t.

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

Call (K) является досрочной ценой в забастовке K.

Put (K) является помещенной ценой в забастовке K.

i является модульным мнимым числом (i2= -1).

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

α коэффициент затухания.

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

f 2 (ϕ) является характеристической функцией для P 2.

P 2 является вероятностью S t> K под нейтральной к риску мерой для модели.

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

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

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

ln(St)N2Δk

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

ln(St)+(N21)Δk

Где минимальная допустимая забастовка

Stexp(N2Δk)

и максимальная допустимая забастовка

Stexp[(N21)Δk]

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

Call(kn)=Δueαknπj=1NRe[eiΔkΔu(j1)(n1)eiuj[NΔk2ln(St)]ψ(uj)]wj

где

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

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

N является количеством точек FRFT или БПФ.

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

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

ΔkΔu=(2πN)

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

Ссылки

[1] Albrecher, H., Майер, P., Schoutens, W. и Tistaert, J. "Небольшое прерывание Хестона". Рабочий документ, Линц и технологический университет Граца, K.U. Левен, финансовые рынки ING, 2006.

[2] Топкое место, P. и Д.Б. Мадан. “Оценка опции с помощью Быстрого преобразования Фурье”. Журнал Вычислительных Финансов. Vol 2. № 4. 1999.

[3] Chourdakis, K. “Оценка опции Используя дробный БПФ”. Журнал вычислительных финансов. 2005.

[4] Хестон, S. L. “Решение закрытой формы для опций со стохастической энергозависимостью с приложениями к опциям связи и валюты”. Анализ финансовых исследований. Vol 6. № 2. 1993.

Введенный в R2018a