optSensByMertonFFT

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

Синтаксис

[PriceSens,StrikeOut] = optSensByMertonFFT(Rate,AssetPrice,Settle,Maturity,OptSpec,Strike,Sigma,MeanJ,JumpVol,JumpFreq)
[PriceSens,StrikeOut] = optSensByMertonFFT(___,Name,Value)

Описание

пример

[PriceSens,StrikeOut] = optSensByMertonFFT(Rate,AssetPrice,Settle,Maturity,OptSpec,Strike,Sigma,MeanJ,JumpVol,JumpFreq) вычисляет европейскую цену опции ванили и чувствительность моделью Merton76, с помощью БПФ Топкого-места-Madan и методов Chourdakis FRFT.

пример

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

Примеры

свернуть все

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

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

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

Sigma = 0.16;
MeanJ = 0.02;
JumpVol = 0.08;
JumpFreq = 2;

Вычислите цены опции за целый БПФ (или 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

[Delta, Kout] = optSensByMertonFFT(Rate, AssetPrice, Settle, Maturity, OptSpec, Strike, ...
    Sigma, MeanJ, JumpVol, JumpFreq, 'DividendYield', DividendYield, 'OutSpec', "delta");

% Show the lowest and highest strike values on the FFT strike grid
format
[Kout(1) Kout(end)]
ans = 1×2
10138 ×

    0.0000    1.8798

% Show a subset of the strikes and corresponding option sensitivities
Range = (2046:2052);
[Kout(Range) Delta(Range)]
ans = 7×2

   50.4929    0.9895
   58.8640    0.9801
   68.6231    0.8816
   80.0000    0.5283
   93.2631    0.1551
  108.7251    0.0241
  126.7505    0.0025

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

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

% 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] = optSensByMertonFFT(Rate, AssetPrice, Settle, Maturity, OptSpec, Strike, ...
    Sigma, MeanJ, JumpVol, JumpFreq, 'DividendYield', DividendYield, 'OutSpec', "delta", ...
    'NumFFT', NumFFT);

% Compare with numerical integration method
Range = (510:516);
Strike = Kout(Range);
DeltaFFT = Delta(Range);
DeltaNI = optSensByMertonNI(Rate, AssetPrice, Settle, Maturity, OptSpec, Strike, ...
    Sigma, 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.89726       0.99002      0.092766
    23.449       0.93421       0.99002       0.05581
    43.312       0.94691       0.99001      0.043093
        80       0.50983       0.52827      0.018446
    147.76      0.004147    0.00019101      0.003956
    272.93      0.001071     1.547e-09      0.001071
    504.11    0.00030521    5.7578e-10    0.00030521

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

Если значения в выводе DeltaFFT существенно отличаются от тех в DeltaNI, попытайтесь внести изменения в настройки optSensByMertonFFT, такие как 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] = optSensByMertonFFT(Rate, AssetPrice, Settle, Maturity, OptSpec, Strike, ...
    Sigma, 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 = optSensByMertonNI(Rate, AssetPrice, Settle, Maturity, OptSpec, Strike, ...
    Sigma, 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.53701     0.53701    5.6407e-12
    79.84      0.5341      0.5341    5.3257e-12
    79.92     0.53119     0.53119    5.0099e-12
       80     0.52827     0.52827    4.6956e-12
    80.08     0.52536     0.52536    4.3811e-12
    80.16     0.52245     0.52245    4.0653e-12
    80.24     0.51953     0.51953    3.7503e-12

% 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 = optSensByMertonFFT(Rate, AssetPrice, Settle, Maturity, OptSpec, Strike, ...
    Sigma, MeanJ, JumpVol, JumpFreq, 'DividendYield', DividendYield, 'OutSpec', "delta", ...
    'NumFFT', NumFFT, 'CharacteristicFcnStep', 0.065, 'LogStrikeStep', 0.001)
Delta = 0.5283

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

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

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

Delta = optSensByMertonFFT(Rate, AssetPrice, Settle, Maturity, OptSpec, Strike, ...
    Sigma, MeanJ, JumpVol, JumpFreq, 'DividendYield', DividendYield, 'OutSpec', "delta", ...
    'NumFFT', NumFFT, 'CharacteristicFcnStep', 0.065, 'LogStrikeStep', 0.001)
Delta = 5×1

    0.6727
    0.6013
    0.5283
    0.4565
    0.3883

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

Используйте вход 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 = optSensByMertonFFT(Rate, AssetPrice, Settle, Maturity, OptSpec, Strike, ...
    Sigma, MeanJ, JumpVol, JumpFreq, 'DividendYield', DividendYield, 'OutSpec', "delta", ...
    'NumFFT', NumFFT, 'CharacteristicFcnStep', 0.065, ...
    'LogStrikeStep', 0.001) % Five values in vector output
Delta = 5×1

    0.6419
    0.5907
    0.5565
    0.5311
    0.5110

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

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

[Delta, Kout] = optSensByMertonFFT(Rate, AssetPrice, Settle, Maturity, OptSpec, Strike, ...
    Sigma, 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.6419    0.6305    0.6245    0.6204    0.6173
    0.5922    0.5907    0.5905    0.5905    0.5905
    0.5422    0.5507    0.5565    0.5607    0.5637
    0.4927    0.5112    0.5229    0.5311    0.5372
    0.4447    0.4725    0.4898    0.5020    0.5110

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

Delta = optSensByMertonFFT(Rate, AssetPrice, Settle, Maturity, OptSpec, Strike, ...
    Sigma, 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.6727    0.6419    0.6305    0.6245    0.6204    0.6173
    0.6013    0.5922    0.5907    0.5905    0.5905    0.5905
    0.5283    0.5422    0.5507    0.5565    0.5607    0.5637
    0.4565    0.4927    0.5112    0.5229    0.5311    0.5372
    0.3883    0.4447    0.4725    0.4898    0.5020    0.5110

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

Когда 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

Delta = optSensByMertonFFT(Rate, ManyAssetPrices, Settle, Maturity, OptSpec, Strike, ...
    Sigma, 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.3796    0.5157    0.6419    0.7472
    0.3315    0.4637    0.5922    0.7043
    0.2874    0.4137    0.5422    0.6592
    0.2474    0.3664    0.4927    0.6128
    0.2117    0.3224    0.4447    0.5657

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

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

[Delta, Gamma, Rho, Theta, Vega] = optSensByMertonFFT(...
    Rate, AssetPrice, Settle, Maturity, OptSpec, Strike, ...
    Sigma, MeanJ, JumpVol, JumpFreq, 'DividendYield', DividendYield, ...
    'NumFFT', NumFFT, 'CharacteristicFcnStep', 0.065, 'LogStrikeStep', 0.001, ...
    'OutSpec', ["delta", "gamma", "rho", "theta", "vega"], ...
    '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;
surf(X,Y,Gamma)
title('Gamma')
xlabel('Years to Option Expiry')
ylabel('Strike')
view(-112,34);
xlim([0 Times(end)]);

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

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

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

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

свернуть все

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

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

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

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

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

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

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

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

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

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

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

Определение опции, заданной как 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). Каждый столбец сетки логарифмической забастовки has'NumFFT' указывает с 'LogStrikeStep', располагающим с интервалами, которые примерно сосредоточены вокруг каждого элемента log(AssetPrice).

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

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

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

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

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

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

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

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

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

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

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

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

Пример: [PriceSens,StrikeOut] = optSensByMertonFFT(Rate,AssetPrice,Settle,Maturity,OptSpec,Strike,Sigma,MeanJ,JumpVol,JumpFreq,'Basis',7)

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

Задайте выходные параметры, заданные как пара, разделенная запятой, состоящая из 'OutSpec' и NOUT - 1 или 1-by-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-by-1 вектор или NRows-by-NColumns матрица. Если Strike пуст, NRows равен NumFFT. NColumns определяется размерами AssetPrice, Settle, Maturity и OptSpec, который должен все быть или скаляром или NColumns-by-1 векторы.

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

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

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

свернуть все

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

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

Больше о

свернуть все

Модель диффузии скачка Мертона

Модель диффузии скачка Мертона (Мертон (1976)) является различным расширением модели Black-Scholes, где внезапные перемещения цен активов (оба вверх и вниз) моделируются путем добавления параметров диффузии скачка с Пуассоновским процессом.

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

dSt=(rqλpμj)Stdt+σStdWt+JStdPtprob (dPt=1)=λpdt

где

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

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

W 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}

μ J является средним значением J для (μ J>-1).

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

ƛ p является ежегодной частотой (интенсивность) Пуассоновского процесса P t для (ƛ p ≥ 0).

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

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

fMerton76j=fBSjexp(λpτ(1+μj)mj+12[(1+μj)iϕeδ2(mjiϕ+(iϕ)22)1]λpτμjiϕ)где для j=1,2:fBS1(ϕ)=fBS2(ϕi)fBS2(i)fBS2(ϕ)=exp(iϕ[lnSt+(rqσ22)τ]ϕ2σ22τ)m1=12,m2=12

где

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

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

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

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

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

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

Call(k)=eαkπ0Ре[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 является модульным мнимым числом (i 2 =-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=1NРе[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] Убавляет, D. S. “Скачки и стохастическая энергозависимость: процессы обменного курса, неявные в опциях немецкой марки”. Анализ финансовых исследований. Vol 9. № 1. 1996.

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

[3] Продолжение следует, R. и П. Танков. Финансовое моделирование с процессами скачка. Chapman & Hall/CRC Press, 2004.

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

[5] Мертон, R. “Оценка опции, Когда Базовые Возвраты Запаса Прерывисты”. Журнал Финансовой Экономики. Vol 3. 1976.

Введенный в R2018a