В этом примере показов, как сравнить арифметические и геометрические азиатские цены на опцию с помощью 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 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');
График отображает значения чувствительности ванильной и азиатской дельты относительно базовой цены актива. Ванильный или азиатский in-the-money (ITM) вызова опции более чувствителен к изменениям цен, чем внебюджетная (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