В этом примере показов, как сравнить арифметические и геометрические азиатские цены на опцию с помощью 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