optSensByHestonNI

Цена опции и чувствительности по модели Хестона с помощью численного интегрирования

Описание

пример

PriceSens = optSensByHestonNI(Rate,AssetPrice,Settle,Maturity,OptSpec,Strike,V0,ThetaV,Kappa,SigmaV,RhoSV) вычисляет ванильную европейскую цену опций и чувствительность по модели Heston, используя численное интегрирование методы.

пример

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

Примеры

свернуть все

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

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

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;

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

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

Delta = optSensByHestonNI(Rate, AssetPrice, Settle, Maturity, OptSpec, Strike, ...
    V0, ThetaV, Kappa, SigmaV, RhoSV, 'DividendYield', DividendYield, 'OutSpec', "delta")
Delta = 0.5775

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

The Strike вход может быть вектором.

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

Delta = optSensByHestonNI(Rate, AssetPrice, Settle, Maturity, OptSpec, Strike, ...
    V0, ThetaV, Kappa, SigmaV, RhoSV, 'DividendYield', DividendYield, 'OutSpec', "delta")
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 = optSensByHestonNI(Rate, AssetPrice, Settle, Maturity, OptSpec, Strike, ...
    V0, ThetaV, Kappa, SigmaV, RhoSV, 'DividendYield', DividendYield, ...
    'OutSpec', "delta") % Five values in vector output
Delta = 5×1

    0.6848
    0.6413
    0.6095
    0.5841
    0.5631

Разверните выход для поверхности

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

Delta = optSensByHestonNI(Rate, AssetPrice, Settle, Maturity, OptSpec, Strike, ...
    V0, ThetaV, Kappa, SigmaV, RhoSV, 'DividendYield', DividendYield, ...
    'OutSpec', "delta", '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

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

Когда 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 = optSensByHestonNI(Rate, AssetPrice, Settle, Maturity, OptSpec, Strike, ...
    V0, ThetaV, Kappa, SigmaV, RhoSV, 'DividendYield', DividendYield, ...
    'OutSpec', "delta", '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-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 = optSensByHestonNI(Rate, ManyAssetPrices, Settle, Maturity, OptSpec, Strike, ...
    V0, ThetaV, Kappa, SigmaV, RhoSV, 'DividendYield', DividendYield, ...
    'OutSpec', "delta", '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

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

The Strike и 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)';

[Delta, Gamma, Rho, Theta, Vega, VegaLT] = ...
    optSensByHestonNI(Rate, AssetPrice, Settle, Maturity, OptSpec, Strike, ...
    V0, ThetaV, Kappa, SigmaV, RhoSV, 'DividendYield', DividendYield, ...
    '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-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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Пример: PriceSens = optSensByHestonFFT(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

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

Примечание

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

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

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

Абсолютный допуск ошибки для численного интегрирования, заданный как разделенная разделенными запятой парами, состоящая из 'AbsTol' и скалярное числовое значение.

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

Относительная погрешность для численного интегрирования, заданный как разделенная разделенными запятой парами, состоящая из 'RelTol' и скалярное числовое значение.

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

Численная область значений интегрирования, используемый для аппроксимации непрерывного интеграла по [0 Inf], заданная как разделенная разделенными запятой парами, состоящая из 'IntegrationRange' и a 1-by- 2вектор, представляющий [LowerLimit UpperLimit].

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

Среда для вычисления цен на опции и чувствительности с помощью численного интегрирования моделей, заданная как разделенная разделенными запятой парами, состоящая из 'Framework' и скалярный строковый или символьный вектор со следующими значениями:

  • "heston1993" или 'heston1993' - Метод, используемый в Heston (1993)

  • "lewis2001" или 'lewis2001' - Метод, используемый в Lewis (2001)

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

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

  • true - Если true, выходы NRows-by- NColumns матрицы. NRows количество ударов для каждого столбца и определяется Strike вход. Для примера, Strike может быть NRows-by- 1 вектор, или NRows-by- NColumns матрица. 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. Область аргумента пары "имя-значение" OutSpec определяет типы и порядок выходов.

Подробнее о

свернуть все

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

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

Метод численного интегрирования под Heston (1993) Framework

Численное интегрирование используется для вычисления непрерывного интеграла для обратного преобразования Фурье.

Метод численного интегрирования в среде Heston (1993) основан на следующих выражениях:

Call(K)=SteqτP1KerτP2Put(K)=Call(K)+KerτSteqτPj=12+1π0Re[eiϕln(K)fj(ϕ)iϕ]dϕ

где

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

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

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

K - это удар.

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

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

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

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

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

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

P 1 - это вероятность S t > K под измерением цены актива для модели.

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

Где j = 1,2 так, что f 1 (в) и f 2 (в) являются характеристическими функциями для вероятностей P 1 и P 2, соответственно.

Эта среда выбирается со значением по умолчанию “Heston1993” для Framework аргумент пары "имя-значение".

Метод численного интегрирования при Льюисе (2001) Среда

Численное интегрирование используется для вычисления непрерывного интеграла для обратного преобразования Фурье.

Метод численного интегрирования в среде Льюиса (2001) основан на следующих выражениях:

Call(k)=SteqτKeτtπ0Re[Kiuf2(ϕ=(ui2))1u2+14]duPut(K)=Call(K)=KeτtSteqτ

где

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

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

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

K - это удар.

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

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

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

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

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

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

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

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

Эта среда выбирается со значением “Lewis2001” для Framework аргумент пары "имя-значение".

Ссылки

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

[2] Lewis, A. L. «A Simple Option Formula for General Jump-Diffusion and Other Exponential Levy Processes». Envision Financial Systems and OptionCity.net, 2001.

Введенный в R2018a
Для просмотра документации необходимо авторизоваться на сайте