exponenta event banner

Использование модели Black-Scholes для оценки азиатских опционов с несколькими ценами на акции

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

Figure contains an axes. The axes with title Asian and Vanilla Option Price Comparison contains 4 objects of type line. These objects represent Vanilla, KV Geometric Asian, Levy Arithmetic Asian, TW Arithmetic Asian.

На графике отображаются цены ванильных и азиатских опционов по отношению к базовой цене актива. Обратите внимание, что цена азиатских опционов дешевле, чем цена ванильного опциона.

Анализ влияния вариаций базового актива на дельту опционов

Анализ влияния изменений базовых цен активов на дельта-чувствительность. На следующем графике показано поведение значения дельты для опционов 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');

Figure contains an axes. The axes with title Asian and Vanilla Option Delta Comparison (Strike Price = $90) contains 4 objects of type line. These objects represent Vanilla, KV Geometric Asian, Levy Arithmetic Asian, TW Arithmetic Asian.

На графике отображаются значения чувствительности ванильной и азиатской дельты относительно базовой цены актива. Вариант ванильного или азиатского вызова в деньгах (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

Связанные примеры

Подробнее

Внешние веб-сайты