В этом примере показано, как сравнить арифметические и геометрические азиатские цены опции с помощью BlackScholes
и различные методы ценообразования модели. Методы ценообразования: Kemna-Vorst, Налог, Тернбулл-Уокемен, и методы Кокса-Росса-Рубинштейна и симуляция Монте-Карло. Этот пример также демонстрирует, как изменения спотовых цен влияют на опцию и значения чувствительности дельты на европейской ванили и азиатские опции.
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
Таблица контрастирует результаты закрытых моделей приближения против ценовых симуляций, реализованных с помощью дерева бинома Кокса-Росса-Рубинштейна и методов ценообразования Монте-Карло. Заметьте, что азиатские опции среднего арифметического являются более дорогими, чем их дубликаты среднего геометрического.
Азиатские опции являются популярными инструментами, поскольку они имеют тенденцию быть менее дорогими, чем сопоставимая ваниль вызывает и помещает. Это вызвано тем, что энергозависимость в среднем значении underlier имеет тенденцию быть ниже, чем энергозависимость значения самого underlier. Можно сравнить цену и значения чувствительности дельты азиатских опций против их дубликатов ванили.
Используйте 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
объект калькулятора цен и использование 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
Заметьте, что и геометрические и арифметические азиатские цены опции ниже, чем их дубликаты ванили.
Обвинять значение измеряет чувствительность цены опции к изменениям в цене базового актива. Как изменения underlier, пропорции инструментов, формирующих портфель могут должны быть быть настроены, чтобы сохранить чувствительность в желаемой области значений.
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');
График отображает ваниль и азиатские цены опции относительно цены базового актива. Заметьте, что цена азиатских опций является более дешевой, чем цена опции ванили.
Исследуйте эффект изменений цен базового актива на чувствительность дельты. Следующий график демонстрирует поведение значения дельты для Ванили и азиатских опций в зависимости от базовой цены.
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) более чувствительны к динамике цен, чем убыточная опция (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