Используйте модель Блэка-Скоулза для ценообразования азиатских опций с несколькими ценами на акции

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

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.

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

Похожие примеры

Подробнее о

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