В этом примере показано, как сравнивать арифметические и геометрические цены азиатских опций с помощью BlackScholes модель и различные методы ценообразования. Методы ценообразования: методы Кемны-Ворста, Леви, Тернбулла-Уэйкмана и Кокса-Росса-Рубинштейна и моделирование Монте-Карло. Этот пример также демонстрирует, как колебания спотовых цен влияют на значения чувствительности опциона и дельты для европейских ванильных и азиатских опционов.
ratecurve ОбъектСоздать ratecurve объект с использованием ratecurve.
Settle = datetime(2019,01,01); Maturity = datetime(2025,01,01); Rate = 0.035; Compounding = -1; Basis = 1; ZeroCurve = ratecurve('zero',Settle,Maturity,Rate,'Compounding',Compounding,'Basis', Basis)
ZeroCurve =
ratecurve with properties:
Type: "zero"
Compounding: -1
Basis: 1
Dates: 01-Jan-2025
Rates: 0.0350
Settle: 01-Jan-2019
InterpMethod: "linear"
ShortExtrapMethod: "next"
LongExtrapMethod: "previous"
BlackScholes Объект моделиИспользовать finmodel для создания BlackScholes объект модели.
Volatility = .20; BSModel = finmodel("BlackScholes",'Volatility',Volatility)
BSModel =
BlackScholes with properties:
Volatility: 0.2000
Correlation: 1
Asian Объекты КИПИспользовать fininstrument для создания двух Asian объекты инструмента, один из которых использует среднее арифметическое, а другой - среднее геометрическое.
ExerciseDates = datetime(2020,01,01); Strike = 90; OptionType = 'call'; AverageType = 'geometric'; AsianOptArith = fininstrument("Asian",'ExerciseDate',ExerciseDates,'Strike',Strike,... 'OptionType',OptionType,'Name',"CallAsianArith")
AsianOptArith =
Asian with properties:
OptionType: "call"
Strike: 90
AverageType: "arithmetic"
AveragePrice: 0
AverageStartDate: NaT
ExerciseStyle: "european"
ExerciseDate: 01-Jan-2020
Name: "CallAsianArith"
AsianOptGeo = fininstrument("Asian",'ExerciseDate',ExerciseDates,'Strike',Strike,... 'OptionType',OptionType,'AverageType', AverageType,'Name',"CallAsianGeo")
AsianOptGeo =
Asian with properties:
OptionType: "call"
Strike: 90
AverageType: "geometric"
AveragePrice: 0
AverageStartDate: NaT
ExerciseStyle: "european"
ExerciseDate: 01-Jan-2020
Name: "CallAsianGeo"
Analytic, AssetTree, и AssetMonteCarlo Объекты прайсераИспользовать finpricer создать BlackScholes, AssetTree, и AssetMonteCarlo прайсер объектов и использовать ratecurve объект для 'DiscountCurve' аргумент пары имя-значение.
SpotPrice = 100; InpSensitivity = "delta"; % Analytic Pricers LevyPricer = finpricer('Analytic', 'Model', BSModel, 'SpotPrice', SpotPrice, ... 'DiscountCurve', ZeroCurve, 'PricingMethod', "Levy"); TWPricer = finpricer('Analytic', 'Model', BSModel, 'SpotPrice', SpotPrice, ... 'DiscountCurve', ZeroCurve, 'PricingMethod', "TurnbullWakeman"); KVPricer = finpricer('Analytic', 'Model', BSModel, 'SpotPrice', SpotPrice, ... 'DiscountCurve', ZeroCurve, 'PricingMethod', "KemnaVorst"); % AssetTree Pricer % Define the number of levels of the tree NumPeriods = 50; CRRPricer = finpricer("AssetTree",'DiscountCurve',ZeroCurve,'Model',BSModel, 'SpotPrice',SpotPrice, ... 'PricingMethod',"CoxRossRubinstein",'NumPeriods', NumPeriods,... 'Maturity', ExerciseDates); % AssetMonteCarlo Pricer % Define the number of simulation trials NumTrials = 2000; SimDates =[Settle:days(2):ExerciseDates ExerciseDates]; MCPricer = finpricer("AssetMonteCarlo", 'Model', BSModel, 'SpotPrice', SpotPrice, 'DiscountCurve', ZeroCurve,... 'SimulationDates', SimDates, 'NumTrials', NumTrials);
Рассчитайте азиатские цены опционов с помощью price для функции Analytic, AssetTree, и AssetMonetCarlo методы ценообразования.
% Analytic [LevyPrice,LevyoutPR] = price(LevyPricer, AsianOptArith,InpSensitivity); [TWPrice, TWoutPR] = price(TWPricer, AsianOptArith, InpSensitivity); [KVPrice, KVoutPR] = price(KVPricer, AsianOptGeo, InpSensitivity); % Cox-Ross-Rubinstein [CRRArithPrice, CRRArithoutPR] = price(CRRPricer, AsianOptArith, InpSensitivity); [CRRGeoPrice, CRRGeooutPR] = price(CRRPricer, AsianOptGeo, InpSensitivity); % Monte Carlo [MCArithPrice, MCArithoutPR] = price(MCPricer, AsianOptArith, InpSensitivity); [MCGeoPrice, MCGeooutPR] = price(MCPricer, AsianOptGeo, InpSensitivity);
Сравните азиатские цены коллов опциона с помощью displayPricesAsianCallOption функция, определенная в локальных функциях.
displayPricesAsianCallOption(KVPrice,LevyPrice,TWPrice,CRRArithPrice,CRRGeoPrice,MCArithPrice,MCGeoPrice)
Comparison of Asian prices: Arithmetic Asian Levy: 12.164734 Turnbull-Wakeman: 12.164734 Cox-Ross-Rubinstein: 12.126509 Monte Carlo: 12.082420 Geometric Asian Kemna-Vorst: 11.862580 Cox-Ross-Rubinstein: 11.852462 Monte Carlo: 12.039533
Таблица контрастирует результаты моделей закрытого приближения с моделями цен, реализованными с использованием биномиального дерева Кокса-Росса-Рубинштейна и методов ценообразования Монте-Карло. Обратите внимание, что среднеарифметические азиатские варианты дороже, чем их среднегеометрические аналоги.
Азиатские варианты являются популярными инструментами, поскольку они, как правило, менее дороги, чем сопоставимые ванильные звонки и ставит. Это связано с тем, что волатильность в среднем значении нижнего слоя имеет тенденцию быть ниже, чем волатильность в значении самого нижнего слоя. Вы можете сравнить цены и дельта чувствительности азиатских опционов с их ванильными аналогами.
Использовать fininstrument для создания Vanilla объект инструмента с той же зрелостью и страйком, что и два азиатских варианта.
EuropeanCallOption = fininstrument("Vanilla",'ExerciseDate',ExerciseDates,'Strike',Strike,... 'OptionType',OptionType,'Name',"CallVanilla")
EuropeanCallOption =
Vanilla with properties:
OptionType: "call"
ExerciseStyle: "european"
ExerciseDate: 01-Jan-2020
Strike: 90
Name: "CallVanilla"
Analytic Объект прайсераИспользовать finpricer для создания BlackScholes pricer object и используйте ratecurve объект для 'DiscountCurve' аргумент пары имя-значение.
BLSPricer = finpricer('Analytic', 'Model', BSModel, 'SpotPrice', SpotPrice, 'DiscountCurve', ZeroCurve)
BLSPricer =
BlackScholes with properties:
DiscountCurve: [1x1 ratecurve]
Model: [1x1 finmodel.BlackScholes]
SpotPrice: 100
DividendValue: 0
DividendType: "continuous"
Вычислить цену и дельта-чувствительность.
[BLSPrice, BLSoutPR] = price(BLSPricer, EuropeanCallOption, InpSensitivity);
Сравнить цены опционов с помощью displayVanillaAsianComparison функция, определенная в локальных функциях.
displayVanillaAsianComparison('Prices', BLSPrice, KVPrice,LevyPrice,TWPrice)Comparison of Vanilla and Asian Option Prices: Vanilla BLS: 15.743809 Asian Kemna-Vorst: 11.862580 Asian Levy: 12.164734 Asian Turnbull-Wakeman: 12.164734
Обратите внимание, что цены как геометрических, так и арифметических азиатских опционов ниже, чем их ванильные аналоги.
Значение delata измеряет чувствительность цены опциона к изменениям цены базового актива. По мере изменения нижнего предела пропорции инструментов, формирующих портфель, могут нуждаться в корректировке для поддержания чувствительности в желаемом диапазоне.
displayVanillaAsianComparison('Delta', BLSoutPR.Results.Delta, KVoutPR.Results.Delta, LevyoutPR.Results.Delta,TWoutPR.Results.Delta)Comparison of Vanilla and Asian Option Delta: Vanilla BLS: 0.788666 Asian Kemna-Vorst: 0.844986 Asian Levy: 0.852806 Asian Turnbull-Wakeman: 0.852806
В таблице показаны значения дельты как для ванильных, так и для арифметических и геометрических азиатских опций. Обратите внимание, что геометрическое значение азиатской дельты меньше, чем значение дельты для арифметической азиатской опции.
Анализ влияния изменений базовых цен активов. Создайте график, чтобы показать влияние изменений цены базового актива на цены ванильных и азиатских опционов.
StockPrices = (50:5:120)'; PriceBLS = nan(size(StockPrices)); PriceKV = PriceBLS; PriceLevy = PriceBLS; PriceTW = PriceBLS; DeltaBLS = PriceBLS; DeltaLevy = PriceBLS; DeltaTW = PriceBLS; DeltaKV = PriceBLS; InpSensitivity = "delta"; idx = 1; for AssetPrice = StockPrices' PricerBLS = finpricer('Analytic', 'Model', BSModel, 'SpotPrice', AssetPrice,... 'DiscountCurve', ZeroCurve); [PriceBLS(idx), outPRBLS] = price(PricerBLS, EuropeanCallOption, InpSensitivity); DeltaBLS(idx) = outPRBLS.Results.Delta; PricerLevy = finpricer('Analytic', 'Model', BSModel, 'SpotPrice', AssetPrice, ... 'DiscountCurve', ZeroCurve, 'PricingMethod', "Levy"); [PriceLevy(idx), outPRLevy] = price(PricerLevy, AsianOptArith, InpSensitivity); DeltaLevy(idx) = outPRLevy.Results.Delta; PricerTW = finpricer('Analytic', 'Model', BSModel, 'SpotPrice', AssetPrice, ... 'DiscountCurve', ZeroCurve, 'PricingMethod', "TurnbullWakeman"); [PriceTW(idx), outPRBTW] = price(PricerTW, AsianOptArith, InpSensitivity); DeltaTW(idx) = outPRBTW.Results.Delta; PricerKV = finpricer('Analytic', 'Model', BSModel, 'SpotPrice', AssetPrice, ... 'DiscountCurve', ZeroCurve, 'PricingMethod', "KemnaVorst"); [PriceKV(idx), outPRKV] = price(PricerKV, AsianOptGeo, InpSensitivity); DeltaKV(idx) = outPRKV.Results.Delta; idx = idx+1; end figure('menubar', 'none', 'numbertitle', 'off') plot(StockPrices, [PriceBLS PriceKV PriceLevy PriceTW]); xlabel 'Spot Price ($)' ylabel 'Option Price ($)' title 'Asian and Vanilla Option Price Comparison' legend('Vanilla', 'KV Geometric Asian', 'Levy Arithmetic Asian', 'TW Arithmetic Asian', 'location','northwest');

На графике отображаются цены ванильных и азиатских опционов по отношению к базовой цене актива. Обратите внимание, что цена азиатских опционов дешевле, чем цена ванильного опциона.
Анализ влияния изменений базовых цен активов на дельта-чувствительность. На следующем графике показано поведение значения дельты для опционов Vanilla и Asian в зависимости от базовой цены.
figure('menubar', 'none', 'numbertitle', 'off') plot(StockPrices, [DeltaBLS DeltaKV DeltaLevy DeltaTW]); xlabel 'Spot Price ($)' ylabel 'Call Delta' title 'Asian and Vanilla Option Delta Comparison (Strike Price = $90)' legend('Vanilla', 'KV Geometric Asian', 'Levy Arithmetic Asian', 'TW Arithmetic Asian', 'location', 'northwest');

На графике отображаются значения чувствительности ванильной и азиатской дельты относительно базовой цены актива. Вариант ванильного или азиатского вызова в деньгах (ITM) более чувствителен к изменениям цен, чем вариант out-of-the-money (OTM). Если цена актива глубоко в деньгах, то она скорее всего будет реализована. Наоборот, для варианта «вне денег». Обратите внимание, что азиатское значение дельты ниже для внебрачных опционов и выше для опционов в деньгах по сравнению с ванильным европейским аналогом.
function displayPricesAsianCallOption(KVPrice,LevyPrice,TWPrice,CRRArithPrice,CRRGeoPrice,MCArithPrice,MCGeoPrice) fprintf('Comparison of Asian prices:\n'); fprintf('\n'); fprintf('Arithmetic Asian\n'); fprintf('Levy: %f\n', LevyPrice); fprintf('Turnbull-Wakeman: %f\n', TWPrice); fprintf('Cox-Ross-Rubinstein: %f\n', CRRArithPrice); fprintf('Monte Carlo: %f\n', MCArithPrice); fprintf('\n'); fprintf('Geometric Asian\n'); fprintf('Kemna-Vorst: %f\n', KVPrice); fprintf('Cox-Ross-Rubinstein: %f\n', CRRGeoPrice); fprintf('Monte Carlo: %f\n', MCGeoPrice); end function displayVanillaAsianComparison(type, BLS, KV, Levy, TW) fprintf('Comparison of Vanilla and Asian Option %s:\n', type); fprintf('\n'); fprintf('Vanilla BLS: %f\n', BLS); fprintf('Asian Kemna-Vorst: %f\n', KV); fprintf('Asian Levy: %f\n', Levy); fprintf('Asian Turnbull-Wakeman: %f\n', TW); end