exponenta event banner

optSensByHestonNI

Цена опциона и чувствительность по модели Heston с использованием числовой интеграции

Описание

пример

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

пример

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

Примеры

свернуть все

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

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

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

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

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около-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около-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около-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

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

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

[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около-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 вектор ударных цен.

Дополнительные сведения о соответствующих размерах для 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 по 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

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

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

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

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

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

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

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

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

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

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

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

  • true - если true, выходы: NRowsоколо- NColumns матрицы. NRows - количество ударов для каждого столбца, которое определяется Strike вход. Например, Strike может быть NRowsоколо-1 вектор или NRowsоколо-NColumns матрица. 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 определяет типы и порядок выходов.

Подробнее

свернуть все

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

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

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

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

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

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

где:

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

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

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

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

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

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

dSt = (r q) Stdt + vtStdWtdvt =

где

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

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

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

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

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

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

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

startv - летучесть дисперсии для (startv > 0).

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

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

fHestonj (ϕ) =exp (Cj+Djv0+iϕlnSt) 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ϕ + ди-джей

Метод численной интеграции в рамках Heston (1993)

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

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

Вызов (K) = Ste qτP1 Ke rτP2Put (K) = Вызов (K) +Ke−rτ−Ste−qτPj=12+1π∫0∞Re[e−iϕln (K) fj (

где

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

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

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

К - это удар.

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

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

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

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

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

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

P1 - вероятность St > K при измерении цены актива для модели.

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

Где j = 1,2 таким образом, что f1 (в) и f2 (в) являются характерными функциями для вероятностей P1 и P2 соответственно.

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

Метод числовой интеграции в рамках Lewis (2001) Framework

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

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

Вызов (k) =Ste−qτ−Ke−τtπ∫0∞Re[K−iuf2 (start= (u i2)) 1u2 + 14] duPut (K) = вызов (K) = Ke −

где

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

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

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

К - это удар.

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

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

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

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

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

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

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

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

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

Ссылки

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

[2] Льюис, А. Л. «Простая опционная формула для общего скачка-диффузии и других экспоненциальных процессов леви». Enquision Financial Systems and OptionCity.net, 2001.

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