optByLocalVolFD

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

Описание

пример

[Price,PriceGrid,AssetPrices,Times] = optByLocalVolFD(Rate,AssetPrice,Settle,ExerciseDates,OptSpec,Strike,ImpliedVolData) вычислите цену Vanilla European или American опции по локальной модели волатильности, используя метод Crank-Nicolson.

пример

[Price,PriceGrid,AssetPrices,Times] = optByLocalVolFD(___,Name,Value) задает опции, использующие один или несколько аргументы пары "имя-значение" в дополнение к входным параметрам в предыдущем синтаксисе.

Примеры

свернуть все

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

AssetPrice = 590;
Strike = 590;
Rate = 0.06;
DividendYield = 0.0262;
Settle = '01-Jan-2018';
ExerciseDates = '01-Jan-2020';

Задайте данные о подразумеваемой поверхности волатильности.

Maturity = ["06-Mar-2018" "05-Jun-2018" "12-Sep-2018" "10-Dec-2018" "01-Jan-2019" ...
"02-Jul-2019" "01-Jan-2020" "01-Jan-2021" "01-Jan-2022" "01-Jan-2023"];
Maturity = repmat(Maturity,10,1);
Maturity = Maturity(:);

ExercisePrice = AssetPrice.*[0.85 0.90 0.95 1.00 1.05 1.10 1.15 1.20 1.30 1.40];
ExercisePrice = repmat(ExercisePrice,1,10)';

ImpliedVol = [...
    0.190; 0.168; 0.133; 0.113; 0.102; 0.097; 0.120; 0.142; 0.169; 0.200; ...
    0.177; 0.155; 0.138; 0.125; 0.109; 0.103; 0.100; 0.114; 0.130; 0.150; ...
    0.172; 0.157; 0.144; 0.133; 0.118; 0.104; 0.100; 0.101; 0.108; 0.124; ...
    0.171; 0.159; 0.149; 0.137; 0.127; 0.113; 0.106; 0.103; 0.100; 0.110; ...
    0.171; 0.159; 0.150; 0.138; 0.128; 0.115; 0.107; 0.103; 0.099; 0.108; ...
    0.169; 0.160; 0.151; 0.142; 0.133; 0.124; 0.119; 0.113; 0.107; 0.102; ...
    0.169; 0.161; 0.153; 0.145; 0.137; 0.130; 0.126; 0.119; 0.115; 0.111; ...
    0.168; 0.161; 0.155; 0.149; 0.143; 0.137; 0.133; 0.128; 0.124; 0.123; ...
    0.168; 0.162; 0.157; 0.152; 0.148; 0.143; 0.139; 0.135; 0.130; 0.128; ...
    0.168; 0.164; 0.159; 0.154; 0.151; 0.147; 0.144; 0.140; 0.136; 0.132];

ImpliedVolData = table(Maturity, ExercisePrice, ImpliedVol);

Вычислите европейский вызов опции цену.

OptSpec = 'Call';
Price = optByLocalVolFD(Rate, AssetPrice, ...
Settle, ExerciseDates, OptSpec, Strike, ImpliedVolData, 'DividendYield',DividendYield)
Price = 65.1319

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

свернуть все

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

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

Текущая базовая цена актива, заданная в виде скалярного числа.

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

Дата расчета, заданная как скалярный серийный номер даты, вектор символов даты, массив datetime или строковые массивы.

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

Даты упражнения опции, заданные как серийный номер даты, вектор символов даты, массив datetime или строковые массивы:

  • Для европейской опции существует только один ExerciseDates значение, и это дата истечения срока действия опции.

  • Для американской опции используйте 1-by- 2 вектор серийных номеров дат, векторов символов даты, массивов datetime или строковых массивов. Американская опция может быть реализован в любую дату между или включая пару дат. Если только один не - NaN дата указана, опция может быть реализована между Settle и одинарная дата, указанная в ExerciseDates.

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

Определение опции, заданное как вектор символов или строковые массивы со значениями 'call' или 'put'.

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

Опция цены опциона, заданное как неотрицательный скаляр.

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

Таблица дат погашения, цен забастовки или упражнений и их соответствующих предполагаемых волатильностей, указанная как NVOL-by- 3 таблица.

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

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

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

Пример: Price = optByLocalVolFD(Rate,AssetPrice,Settle, ExerciseDates,OptSpec,Strike,ImpliedVolData,'AssetGridSize',1000)

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

Примечание

Если вы вводите значение для DividendYield, затем установите DividendAmounts и ExDividendDates = [ ] или не вводите их. Если вы вводите значения для DividendAmounts и ExDividendDates, затем установите DividendYield = 0.

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

Денежные дивиденды, указанные как разделенная разделенными запятой парами, состоящая из 'DividendAmounts' и a NDIV-by- 1 вектор.

Для каждой суммы дивидендов должна быть соответствующая ExDividendDates дата. Если вы вводите значения для DividendAmounts и ExDividendDates, затем установите DividendYield = 0.

Примечание

Если вы вводите значение для DividendYield, затем установите DividendAmounts и ExDividendDates = [ ] или не вводите их.

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

Даты экс-дивидендов, заданные как разделенная разделенными запятой парами, состоящая из 'ExDividendDates' и a NDIV-by- 1 вектор.

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

Максимальная цена для контура сетки цен, заданная как разделенная разделенными запятой парами, состоящая из 'AssetPriceMax' и положительная скалярная величина.

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

Размер сетки активов для сетки конечных различий, заданный как разделенная разделенными запятой парами, состоящая из 'AssetGridSize' и положительная скалярная величина.

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

Размер временной сетки для сетки с конечным различием, заданный как разделенная разделенными запятой парами, состоящая из 'TimeGridSize' и положительная скалярная величина.

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

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

  • 0 - Европейский

  • 1 - Американский

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

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

  • 'linear' - Линейная интерполяция

  • 'makima' - Модифицированная кубическая эрмитовая интерполяция Акима

  • 'spline' - Кубическая сплайн интерполяция

  • 'tpaps' - Тонкоплитная сглаживающая сплайн интерполяция

Примечание

The 'tpaps' метод использует функцию тонкого диска сглаживания сплайна из Curve Fitting Toolbox™.

The 'makima' и 'spline' методы работают только для данных с сеткой. Для данных , имеющих разбросов используйте 'linear' или 'tpaps' методы.

Для получения дополнительной информации о сетчатых или рассеянных данных и деталях о методах интерполяции, см. «Сетчатые и рассеянные выборочные данные» и Интерполяция сетчатых данных.

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

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

свернуть все

Цена опции, возвращенная в виде скалярного числа.

Сетка, содержащая цены, рассчитанные методом конечного различия, возвращенная как сетка, двумерная с размером AssetGridSizeTimeGridSize. Количество столбцов не должно равняться TimeGridSize, потому что ExerciseDates и ExDividendDates добавляются к временной сетке. PriceGrid(:, :, end) содержит цену на t = 0.

Цены актива, соответствующего первой размерности PriceGrid, возвращается как вектор.

Время, соответствующее второму измерению PriceGrid, возвращается как вектор.

Подробнее о

свернуть все

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

A vanilla option - это категория опций, которая включает только самые стандартные компоненты.

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

Выплата для ванильной опции следующая:

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

  • Для размещения: max(KSt,0)

где:

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

K - цена доставки.

Для получения дополнительной информации смотрите Опцию Vanilla.

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

Модель локальной волатильности рассматривает волатильность как функцию как текущего уровня активов, так и времени.

Локальная волатильность может быть оценена с помощью формулы Дюпира [2]:

σloc2(K,τ)=σimp2+2τσimpσimpτ+2(τd)KτσimpσimpK(1+Kd1τσimpK)2+K2τσimp(2σimpK2d1τ(σimpK)2)d1=ln(S0/K)+((τd)+σimp2/2)τσimpτ

Ссылки

[1] Андерсен, Л. Б. и Р. Братертон-Рэтклифф. «Улыбка волатильности опции: неявный подход с конечной разницей». Журнал вычислительных финансов. Том 1, № 2, 1997, стр. 5-37.

[2] Дюпир, Б. «Ценообразование с улыбкой». Риск. Том 7, № 1, 1994, стр. 18-20.

Введенный в R2018b