Используйте модель Блэка-Шоулза, чтобы оценить азиатские опции с несколькими калькуляторами цен акции

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

Заметьте, что и геометрические и арифметические азиатские цены опции ниже, чем их дубликаты ванили.

Сравните чувствительность Delta для опций ванили и азиата

Обвинять значение измеряет чувствительность цены опции к изменениям в цене базового актива. Как изменения 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 contains an axes object. The axes object 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.

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

Анализируйте эффект изменений базового актива на опциях Delta

Исследуйте эффект изменений цен базового актива на чувствительность дельты. Следующий график демонстрирует поведение значения дельты для Ванили и азиатских опций в зависимости от базовой цены.

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 object. The axes object 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) более чувствительны к динамике цен, чем убыточная опция (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

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

Больше о

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