optByHestonFFT

Опционная цена по модели Хестона с использованием FFT и FRFT

Описание

пример

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

пример

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

Примеры

свернуть все

Использование optByHestonFFT чтобы калибровать БПФ страйк-сетку, а затем вычислить цены на опцию и построить опцию поверхность цены.

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

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 интервалы, которые примерно центрированы вокруг каждого элемента журнала (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 prices for the entire FFT strike grid
[Call, Kout] =  optByHestonFFT(Rate, AssetPrice, Settle, Maturity, OptSpec, Strike, ...
    V0, ThetaV, Kappa, SigmaV, RhoSV, 'DividendYield', DividendYield);

% 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 prices
Range = (2046:2052);
[Kout(Range) Call(Range)]
ans = 7×2

   50.4929   29.4843
   58.8640   21.3767
   68.6231   12.5614
   80.0000    4.7008
   93.2631    0.6496
  108.7251    0.0144
  126.7505    0.0001

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

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

% Try a smaller number of FFT (or FRFT) 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)
[Call, Kout] = optByHestonFFT(Rate, AssetPrice, Settle, Maturity, OptSpec, Strike, ...
    V0, ThetaV, Kappa, SigmaV, RhoSV, 'DividendYield', DividendYield, 'NumFFT', NumFFT);

% Compare with numerical integration method
Range = (510:516);
Strike = Kout(Range);
CallFFT = Call(Range);
CallNI = optByHestonNI(Rate, AssetPrice, Settle, Maturity, OptSpec, Strike, V0, ...
    ThetaV, Kappa, SigmaV, RhoSV, 'DividendYield', DividendYield);
Error = abs(CallFFT-CallNI);
table(Strike, CallFFT, CallNI, Error)
ans=7×4 table
    Strike     CallFFT       CallNI         Error  
    ______    _________    ___________    _________

    12.696       66.066         66.696      0.62964
    23.449       55.766         56.103      0.33672
    43.312       36.359         36.539      0.17974
        80       4.7727         4.7007     0.071928
    147.76     0.066156     2.3472e-08     0.066156
    272.93     0.013271    -2.5036e-09     0.013271
    504.11    0.0034504    -3.0876e-07    0.0034508

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

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

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

% Compare with numerical integration method
Strike = Kout(Range);
CallFFT = Call(Range);
CallNI = optByHestonNI(Rate, AssetPrice, Settle, Maturity, OptSpec, Strike, V0, ...
    ThetaV, Kappa, SigmaV, RhoSV, 'DividendYield', DividendYield);
Error = abs(CallFFT-CallNI);
table(Strike, CallFFT, CallNI, Error)
ans=7×4 table
    Strike    CallFFT    CallNI      Error   
    ______    _______    ______    __________

    79.76      4.826      4.826    2.7708e-08
    79.84     4.7841     4.7841    3.0111e-08
    79.92     4.7423     4.7423    3.2376e-08
       80     4.7007     4.7007    3.4496e-08
    80.08     4.6593     4.6593    3.6457e-08
    80.16     4.6181     4.6181    3.8253e-08
    80.24      4.577      4.577    3.9872e-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; 

Call =  optByHestonFFT(Rate, AssetPrice, Settle, Maturity, OptSpec, Strike, ...
    V0, ThetaV, Kappa, SigmaV, RhoSV, 'DividendYield', DividendYield, 'NumFFT', NumFFT, ...
    'CharacteristicFcnStep', 0.065, 'LogStrikeStep', 0.001)
Call = 4.7007

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

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

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

Call =  optByHestonFFT(Rate, AssetPrice, Settle, Maturity, OptSpec, Strike, ...
    V0, ThetaV, Kappa, SigmaV, RhoSV, 'DividendYield', DividendYield, 'NumFFT', NumFFT, ...
    'CharacteristicFcnStep', 0.065, 'LogStrikeStep', 0.001)
Call = 5×1

    7.0401
    5.8053
    4.7007
    3.7316
    2.8991

Вычислите Опцию цены для вектора забастовок и вектора дат той же длины

Используйте 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

Call =  optByHestonFFT(Rate, AssetPrice, Settle, Maturity, OptSpec, Strike, ...
    V0, ThetaV, Kappa, SigmaV, RhoSV, 'DividendYield', DividendYield, 'NumFFT', NumFFT, ...
    'CharacteristicFcnStep', 0.065, 'LogStrikeStep', 0.001) % Five values in vector output
Call = 5×1

    8.9560
    9.3419
    9.6240
    9.8560
   10.0500

Разверните область «Выходы поверхности»

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

[Call, Kout] =  optByHestonFFT(Rate, AssetPrice, Settle, Maturity, OptSpec, Strike, ...
    V0, ThetaV, Kappa, SigmaV, RhoSV, 'DividendYield', DividendYield, 'NumFFT', NumFFT, ...
    'CharacteristicFcnStep', 0.065, 'LogStrikeStep', 0.001, ...
    'ExpandOutput', true) % (5 x 5) matrix outputs
Call = 5×5

    8.9560   10.4543   11.7058   12.8009   13.7728
    7.7946    9.3419   10.6337   11.7644   12.7685
    6.7244    8.3028    9.6240   10.7828   11.8134
    5.7475    7.3379    8.6771    9.8560   10.9074
    4.8645    6.4474    7.7930    8.9840   10.0500

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-by- NMaturities матрица может быть прямоугольной).

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

Call =  optByHestonFFT(Rate, AssetPrice, Settle, Maturity, OptSpec, Strike, ...
    V0, ThetaV, Kappa, SigmaV, RhoSV, 'DividendYield', DividendYield, 'NumFFT', NumFFT, ...
    'CharacteristicFcnStep', 0.065, 'LogStrikeStep', 0.001, ...
    'ExpandOutput', true) % (5 x 6) matrix output
Call = 5×6

    7.0401    8.9560   10.4543   11.7058   12.8009   13.7728
    5.8053    7.7946    9.3419   10.6337   11.7644   12.7685
    4.7007    6.7244    8.3028    9.6240   10.7828   11.8134
    3.7316    5.7475    7.3379    8.6771    9.8560   10.9074
    2.8991    4.8645    6.4474    7.7930    8.9840   10.0500

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

Когда ExpandOutput является "true", выходы могут также быть NStrikes-by- 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

Call =  optByHestonFFT(Rate, ManyAssetPrices, Settle, Maturity, OptSpec, Strike, ...
    V0, ThetaV, Kappa, SigmaV, RhoSV, 'DividendYield', DividendYield, 'NumFFT', NumFFT, ...
    'CharacteristicFcnStep', 0.065, 'LogStrikeStep', 0.001, ...
    'ExpandOutput', true) % (5 x 4) matrix output
Call = 5×4

    3.2944    5.8047    8.9560   12.6052
    2.6413    4.8810    7.7946   11.2507
    2.0864    4.0575    6.7244    9.9738
    1.6230    3.3325    5.7475    8.7783
    1.2429    2.7028    4.8645    7.6676

Постройте график поверхности цены опции

Используйте Strike вход для определения ударов. Увеличьте значение для NumFFT для поддержки более широкой области значений ударов. Кроме того, Maturity вход может быть вектором. Задайте ExpandOutput на "true" для вывода поверхности в виде NStrikes-by- 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;

Call =  optByHestonFFT(Rate, AssetPrice, Settle, Maturity, OptSpec, Strike, ...
    V0, ThetaV, Kappa, SigmaV, RhoSV, 'DividendYield', DividendYield, 'NumFFT', NumFFT, ...
    'CharacteristicFcnStep', 0.065, 'LogStrikeStep', 0.001, 'ExpandOutput', true);

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

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

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

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

свернуть все

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Пример: [Price,StrikeOut] = optByHestonFFT(Rate,AssetPrice,Settle,Maturity,OptSpec,Strike,V0,ThetaV,Kappa,SigmaV,RhoSV,'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 Альбрехером и др., заданный как разделенная разделенными запятой парами, состоящая из 'LittleTrap' и логический:

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

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

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

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

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

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

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

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

Примечание

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

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

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

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

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

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

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

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

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

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

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

свернуть все

Опционные цены, возвращенные как NINST-by- 1, или NRows-by- NColumns, в зависимости от ExpandOutput.

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

Подробнее о

свернуть все

Ванильные Опции

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

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

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

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

  • Для размещения: max(KSt,0)

где:

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

K - цена доставки.

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

Модель стохастической волатильности Хестона

Модель Хестона является расширением модели Блэка-Скоулза, где волатильность (квадратный корень отклонения) больше не принимается постоянной, и отклонение теперь следует стохастическому (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 et al. (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

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

Формулировка Карра и Мадана (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τ

где

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

q - непрерывное дивидендное выражение.

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

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

Call (K) - цена вызова при K забастовки.

Put (K) - положительная цена при забастовке K

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

.r- характеристическая функциональная переменная.

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

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

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

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

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

Дискретизированная характерная переменная функции для интегрирования, <reservedrangesplaceholder5> <reservedrangesplaceholder4> (для j = 1,2,3..., N), имеет минимальное значение 0 и максимальное значение (N-1) (Δ <reservedrangesplaceholder0>), и это приближает непрерывный диапазон интегрирования от 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., Mayer, P., Schoutens, W., and Tistaert, J. «The Little Heston Trap». Рабочий документ Linz and Graz University of Technology, K.U. Leuven, ING Financial Markets, 2006.

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

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

[4] Heston, S. L. «A Closed-Form Решения for Опций with Stochastic Volatility with Applications to Bond and Currency Опций». Обзор финансовых исследований. Vol 6. № 2. 1993.

Введенный в R2018a