Цена опциона по локальной модели волатильности с использованием конечных разниц
[ вычислить цену опциона Vanilla European или American по локальной модели волатильности, используя метод Крэнка-Николсона. Price,PriceGrid,AssetPrices,Times] = optByLocalVolFD(Rate,AssetPrice,Settle,ExerciseDates,OptSpec,Strike,ImpliedVolData)
[ указывает параметры, использующие один или несколько аргументов пары имя-значение в дополнение к входным аргументам в предыдущем синтаксисе. 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
Rate - Постоянно усложняемая безрисковая процентная ставкаНепрерывно складываемая безрисковая процентная ставка, определяемая скалярным числом.
Типы данных: double
AssetPrice - Текущая базовая цена активаТекущая базовая цена актива, указанная как скалярное число.
Типы данных: double
Settle - Дата расчетаДата расчета, заданная как скалярный серийный номер даты, вектор символов даты, массив datetime или строковый массив.
Типы данных: double | char | datetime | string
ExerciseDates - Даты опционных упражненийДаты выполнения опции, указанные как порядковый номер даты, вектор символов даты, массив datetime или строковый массив:
Для европейского варианта есть только один ExerciseDates и это дата истечения срока действия опции.
Для американского варианта используйте 1около-2 вектор серийных номеров дат, векторы символов даты, массивы datetime или строковые массивы. Американский опцион может быть осуществлен в любую дату между или включая пару дат. Если только один не -NaN дата указана, опцион может быть осуществлен между Settle и единственная дата, указанная в ExerciseDates.
Типы данных: double | char | cell | datetime | string
OptSpec - Определение опциона 'call' или 'put' | строковый массив со значениями "call" или "put"Определение параметра, заданного как символьный вектор или строковый массив со значениями 'call' или 'put'.
Типы данных: char | string
Strike - Цена страйка опционаЗначение цены страйка опциона, указанное как неотрицательный скаляр.
Типы данных: double
ImpliedVolData - Таблица дат погашения, цен страйка или упражнений и соответствующих подразумеваемых волатильностейТаблица дат погашения, цен страйка или упражнений и их соответствующих подразумеваемых волатильностей, указанных как NVOLоколо-3 таблица.
Типы данных: table
Укажите дополнительные пары, разделенные запятыми Name,Value аргументы. Name является именем аргумента и Value - соответствующее значение. Name должен отображаться внутри кавычек. Можно указать несколько аргументов пары имен и значений в любом порядке как Name1,Value1,...,NameN,ValueN.
Price = optByLocalVolFD(Rate,AssetPrice,Settle, ExerciseDates,OptSpec,Strike,ImpliedVolData,'AssetGridSize',1000)'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' и скалярный числовой.
Примечание
При вводе значения для DividendYield, затем установить DividendAmounts и ExDividendDates = [ ] или не вводите их. При вводе значений для DividendAmounts и ExDividendDates, затем установить DividendYield = 0.
Типы данных: double
'DividendAmounts' - Суммы денежных дивидендов[ ]
(по умолчанию) | векторСуммы денежных дивидендов, указанные как пара, разделенная запятыми, состоящая из 'DividendAmounts' и NDIVоколо-1 вектор.
Для каждой суммы дивидендов должна быть соответствующая ExDividendDates дата. При вводе значений для DividendAmounts и ExDividendDates, затем установить DividendYield = 0.
Примечание
При вводе значения для DividendYield, затем установить DividendAmounts и ExDividendDates = [ ] или не вводите их.
Типы данных: double
'ExDividendDates' - Даты выплаты бывших дивидендов[ ]
(по умолчанию) | серийный номер даты | вектор символов даты | массив datetime | строковый массивДаты бывших дивидендов, указанные как пара, разделенная запятыми, состоящая из 'ExDividendDates' и NDIVоколо-1 вектор.
Типы данных: double | char | string | datetime
'AssetPriceMax' - Максимальная цена для границы ценовой сеткиAssetPriceMax значения рассчитываются с использованием распределений активов на срок (по умолчанию) | положительный скалярМаксимальная цена для границы сетки цен, указанная как пара, разделенная запятыми, состоящая из 'AssetPriceMax' и положительный скаляр.
Типы данных: double
'AssetGridSize' - Размер сетки активов для сетки конечных разниц400
(по умолчанию) | положительный скалярРазмер сетки активов для сетки конечных разностей, указанной как разделенная запятыми пара, состоящая из 'AssetGridSize' и положительный скаляр.
Типы данных: double
'TimeGridSize' - Размер временной сетки для сетки конечных разностей100
(по умолчанию) | положительный скалярРазмер временной сетки для сетки конечных разностей, указанной как разделенная запятыми пара, состоящая из 'TimeGridSize' и положительный скаляр.
Типы данных: double
'AmericanOpt' - Тип опции0 (Европейский) (по умолчанию) | скаляр со значениями [0,1]Тип опции, указанный как разделенная запятыми пара, состоящая из 'AmericanOpt' и положительный целый скалярный флаг с одним из следующих значений:
0 - Европейский
1 - американский
Типы данных: double
'InterpMethod' - Метод интерполяции для оценки подразумеваемой поверхности летучести по ImpliedVolData'linear'
(по умолчанию) | символьный вектор со значениями 'linear', 'makima', 'spline', или 'tpaps' | строка со значениями "linear", "makima", "spline", или "tpaps"Метод интерполяции для оценки подразумеваемой поверхности летучести по ImpliedVolData, указанная как пара, разделенная запятыми, состоящая из 'InterpMethod' и символьный вектор или строковый массив с одним из следующих значений:
'linear' - Линейная интерполяция
'makima' - Модифицированная Akima кубическая эрмитовая интерполяция
'spline' - Интерполяция кубических сплайнов
'tpaps' - Тонколистовая сглаживающая сплайновая интерполяция
Примечание
'tpaps' метод использует функцию сглаживания тонколистовых сплайнов из Toolbox™ «Фитинг кривой».
'makima' и 'spline' методы работают только для данных с привязкой к сетке. Для разрозненных данных используйте 'linear' или 'tpaps' методы.
Дополнительные сведения о привязанных к сетке или разбросанных по сетке данных и подробные сведения о методах интерполяции см. в разделах Привязанные к сетке и разбросанные по сетке данные выборки и Интерполяция привязанных к сетке данных.
Типы данных: char | string
Price - Цена опционаЦена опциона, возвращаемая в виде скалярного числа.
PriceGrid - Сетка, содержащая цены, рассчитанные методом конечных разницСетка, содержащая цены, рассчитанные методом конечных разниц, возвращаемые как двумерная сетка с размером AssetGridSize ⨉ TimeGridSize. Количество столбцов не должно быть равно TimeGridSize, потому что ExerciseDates и ExDividendDates добавляются к временной сетке. PriceGrid(:, :, end) содержит цену для t = 0.
AssetPrices - Цены на активЦены актива, соответствующие первому измерению PriceGrid, возвращено как вектор.
Times - ВремяВремя, соответствующее второму размеру PriceGrid, возвращено как вектор.
Вариант ванили - это категория вариантов, включающая только самые стандартные компоненты.
Вариант ванили имеет срок годности и простую цену страйка. Варианты в американском и европейском стиле классифицируются как варианты ванили.
Окупаемость опциона на ваниль выглядит следующим образом:
Для вызова: , 0)
Для put: , 0)
где:
St - цена базового актива в момент времени t.
K - цена удара.
Дополнительные сведения см. в разделе Параметр ванили.
Локальная модель волатильности рассматривает волатильность как функцию как уровня текущих активов, так и времени.
Локальную волатильность можно оценить по формуле Дюпира [2]:
[1] Андерсен, Л. Б. и Р. Браттон-Рэтклифф. «Волатильность опциона на акции улыбается: неявный подход с конечной разницей». Журнал вычислительных финансов. Том 1, номер 2, 1997, стр. 5-37.
[2] Дюпир, Б. «Ценообразование с улыбкой». Риск. Том 7, номер 1, 1994, стр. 18-20.
optByBatesFD | optByHestonFD | optByMertonFD | optSensByBatesFD | optSensByHestonFD | optSensByLocalVolFD | optSensByMertonFD | optstockbyfd | optstocksensbyfd
Имеется измененная версия этого примера. Открыть этот пример с помощью изменений?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.