Цена опции и чувствительности по модели Хестона с помощью численного интегрирования
добавляет необязательные аргументы пары "имя-значение". 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; 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)]);
Rate
- Постоянно сложная процентная ставка без рискаПостоянно сложенная процентная ставка без риска, заданная как скалярное десятичное значение.
Типы данных: double
AssetPrice
- Текущая базовая цена активаТекущая базовая цена актива, заданная в виде числа значения с использованием скаляра или NINST
-by- 1
или NColumns
-by- 1
вектор.
Для получения дополнительной информации о соответствующих размерностях для AssetPrice
, см. аргумент пары "имя-значение" ExpandOutput
.
Типы данных: double
Settle
- Дата расчета опции Дата расчета опции, заданная как NINST
-by- 1
или NColumns
-by- 1
вектор с последовательными номерами дат, векторами символов даты, массивами datetime или строковыми массивами. The Settle
дата должна быть перед Maturity
дата.
Для получения дополнительной информации о соответствующих размерностях для Settle
, см. аргумент пары "имя-значение" ExpandOutput
.
Типы данных: double
| char
| datetime
| string
Maturity
- Дата погашения опцииДата погашения опции, заданная как NINST
-by- 1
или NColumns
-by- 1
вектор с последовательными номерами дат, векторами символов даты, массивами datetime или строковыми массивами.
Для получения дополнительной информации о соответствующих размерностях для Maturity
, см. аргумент пары "имя-значение" ExpandOutput
.
Типы данных: double
| char
| datetime
| string
OptSpec
- Определение опции 'call'
или 'put'
| строковые массивы со значениями "call"
или "put"
Определение опции, заданное как NINST
-by- 1
или NColumns
-by- 1
вектор с использованием массива ячеек из векторов символов или строковых массивов со значениями 'call'
или 'put'
.
Для получения дополнительной информации о соответствующих размерностях для OptSpec
, см. аргумент пары "имя-значение" ExpandOutput
.
Типы данных: cell
| string
Strike
- значение цены опционной доставкиОпции цены значения, заданные как NINST
-by- 1
, NRows
-by- 1
, NRows
-by- NColumns
вектор страйк-цен.
Для получения дополнительной информации о соответствующих размерностях для Strike
, см. аргумент пары "имя-значение" ExpandOutput
.
Типы данных: double
V0
- Начальное отклонение базового активаНачальное отклонение нижнего актива, заданное как скалярное числовое значение.
Типы данных: double
ThetaV
- Долгосрочное отклонение базовых активовДолгосрочное отклонение базового актива, заданная в виде скалярного числового значения.
Типы данных: double
Kappa
- Средняя скорость пересмотра для отклонения базового активаСредняя скорость ревизии для нижнего актива, заданная в виде скалярного числового значения.
Типы данных: double
SigmaV
- Волатильность отклонения базового активаВолатильность отклонения базового актива, заданная в виде скалярного числового значения.
Типы данных: double
RhoSV
- Корреляция между процессами Вайнера для базового актива и его отклонениемКорреляция между процессами Вайнера для базового актива и его отклонением, заданная в виде скалярного числового значения.
Типы данных: 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
(по умолчанию) | числовые значения: 0
, 1
, 2
, 3
, 4
, 6
, 7
, 8
, 9
, 10
, 11
, 12
, 13
Счетчик дней инструмента, заданный как разделенная разделенными запятой парами, состоящая из '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'
- Постоянно сложная доходность базовых активов0
(по умолчанию) | числоПостоянно сложное базовое выражение активов, указанный как разделенная запятой пара, состоящий из 'DividendYield'
и скалярное числовое значение.
Типы данных: double
'VolRiskPremium'
- Премия за риск волатильности0
(по умолчанию) | числоПремия за риск волатильности, заданная как разделенная разделенными запятой парами, состоящая из 'VolRiskPremium'
и скалярное числовое значение.
Типы данных: double
'LittleTrap'
- Флаг, указывающий на формулировку ловушки Little Hestontrue
(по умолчанию) | логическим со значениями true
или false
Флаг, указывающий на формулировку Little Heston Trap Альбрехером и
др., заданный как разделенная разделенными запятой парами, состоящая из 'LittleTrap' и логический:
true
- Используйте
композицию Albrecher et al.
false
- Использовать исходную формацию Хестона.
Типы данных: logical
'OutSpec'
- Определить выходы["price"]
(по умолчанию) | строковые массивы со значениями "price"
, "delta"
, "gamma"
, "vega"
, "rho"
, "theta"
, и "vegalt"
| массив ячеек векторов символов со значениями 'price'
, 'delta'
, 'gamma'
, 'vega'
, 'rho'
, 'theta'
, и 'vegalt'
Задайте выходы, заданные как разделенная разделенными запятой парами, состоящая из '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'
- Абсолютный допуск ошибок для численного интегрирования1e-10
(по умолчанию) | числоАбсолютный допуск ошибки для численного интегрирования, заданный как разделенная разделенными запятой парами, состоящая из 'AbsTol'
и скалярное числовое значение.
Типы данных: double
'RelTol'
- Относительный допуск ошибок для численного интегрирования1e-6
(по умолчанию) | числоОтносительная погрешность для численного интегрирования, заданный как разделенная разделенными запятой парами, состоящая из 'RelTol'
и скалярное числовое значение.
Типы данных: double
'IntegrationRange'
- Численная область значений интегрирования, используемый для аппроксимации непрерывного интеграла по [0 Inf]
[1e-9 Inf]
(по умолчанию) | векторЧисленная область значений интегрирования, используемый для аппроксимации непрерывного интеграла по [0 Inf]
, заданная как разделенная разделенными запятой парами, состоящая из 'IntegrationRange'
и a 1
-by- 2
вектор, представляющий [LowerLimit UpperLimit]
.
Типы данных: double
'Framework'
- Среды для вычисления цен на опции и чувствительности с помощью численного интегрирования моделей"heston1993"
(по умолчанию) | строку со значениями "heston1993"
или "lewis2001"
| вектор символов со значениями 'heston1993'
или 'lewis2001'
Среда для вычисления цен на опции и чувствительности с помощью численного интегрирования моделей, заданная как разделенная разделенными запятой парами, состоящая из 'Framework'
и скалярный строковый или символьный вектор со следующими значениями:
"heston1993"
или 'heston1993'
- Метод, используемый в Heston (1993)
"lewis2001"
или 'lewis2001'
- Метод, используемый в Lewis (2001)
Типы данных: char
| string
'ExpandOutput'
- Флаг для расширения выходовfalse
(выходы NINST
-by- 1
векторы) (по умолчанию) | логическим со значением true
или false
Флаг для расширения выходов, заданный как разделенная разделенными запятой парами, состоящая из '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
PriceSens
- Опционные цены или чувствительностьОпция цены или чувствительность, возвращенные как NINST
-by- 1
, или NRows
-by- NColumns
, в зависимости от ExpandOutput
. Область аргумента пары "имя-значение" OutSpec
определяет типы и порядок выходов.
A vanilla option - это категория опций, которая включает только самые стандартные компоненты.
Ванильная опция имеет срок годности и прямолинейную цену доставки. Опции в американском стиле и опции в европейском стиле классифицируются как опции ванили.
Выплата для ванильной опции следующая:
Для вызова:
Для размещения:
где:
St - цена базового актива на t времени.
K - цена доставки.
Для получения дополнительной информации смотрите Опцию Vanilla.
Модель Хестона является расширением модели Блэка-Скоулза, где волатильность (квадратный корень отклонения) больше не принимается постоянной, и отклонение теперь следует стохастическому (CIR) процессу. Это позволяет моделировать подразумеваемые улыбки волатильности, наблюдаемые на рынке.
Стохастическое дифференциальное уравнение является:
где
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).
Функция характеристики для j = 1 (мера цены актива) и j = 2 (мера, нейтральная к риску) является:
где
ϕ - переменная функции характеристики.
ƛ VolRisk является премией за риск волатильности.
τ - время до зрелости (τ = T - t).
i - единичное мнимое число (i2 = -1).
Определения для C j и D j под «Ловушкой маленького Хестона» Albrecher et al. (2007):
Численное интегрирование используется для вычисления непрерывного интеграла для обратного преобразования Фурье.
Метод численного интегрирования в среде Heston (1993) основан на следующих выражениях:
где
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) основан на следующих выражениях:
где
r - непрерывная безрисковая ставка.
q - непрерывное дивидендное выражение.
S t является ценой актива в момент t.
K - это удар.
τ время к зрелости (τ = T - t).
Call (K) - цена вызова при K забастовки.
Put (K) - положительная цена на K забастовки.
i является модулем мнимым числом (i2= -1).
.r- характеристическая функциональная переменная.
u - переменная функции характеристики для интегрирования, где .
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.
optByBatesFFT
| optByBatesNI
| optByHestonFFT
| optByHestonNI
| optByMertonFFT
| optByMertonNI
| optSensByBatesFFT
| optSensByBatesNI
| optSensByHestonFFT
| optSensByMertonFFT
| optSensByMertonNI
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.