optSensByHestonNI

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

Синтаксис

PriceSens = optSensByHestonNI(Rate,AssetPrice,Settle,Maturity,OptSpec,Strike,V0,ThetaV,Kappa,SigmaV,RhoSV)
PriceSens = optSensByHestonNI(___,Name,Value)

Описание

пример

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

пример

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

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

Вход 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

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

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;
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)]);

figure;
surf(X,Y,VegaLT)
title('VegaLT')
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 вектор цен исполнения опциона.

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

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

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

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

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

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

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

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

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

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

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

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

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

Укажите необязательные аргументы в виде пар ""имя, значение"", разделенных запятыми. Имя (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 (СИА)

  •  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 и др. формулировка.

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

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

Задайте выходные параметры, заданные как пара, разделенная запятой, состоящая из 'OutSpec' и NOUT - 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' и 1-by-2 vector представление [LowerLimit UpperLimit].

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

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

  • "heston1993" или 'heston1993' — Метод используется в Хестоне (1993)

  • "lewis2001" или 'lewis2001' — Метод используется в Льюисе (2001)

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

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

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

Больше о

свернуть все

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

Модель Хестона является расширением модели 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 и W vt для (-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 является модульным мнимым числом (i 2 =-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

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

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

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

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

где

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

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

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

K является забастовкой.

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

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

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

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

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

f j (ϕ) является характеристической функцией для 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π0Ре[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 является модульным мнимым числом (i 2 =-1).

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

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

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

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

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

Ссылки

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

[2] Льюис, A. L. “Простая формула опции для общей диффузии скачка и других экспоненциальных процессов налога”. Предположите финансовые системы и OptionCity.net, 2001.

Введенный в R2018a