Ценовой ванильный инструмент с использованием модели Heston и несколькими различными ценниками

Этот пример показывает рабочий процесс, чтобы оценить Vanilla инструмент, когда вы используете Heston модель и различные методы ценообразования.

Создание Vanilla Объект прибора

Использование fininstrument для создания Vanilla объект прибора.

Settle = datetime(2017,6,29);
Maturity = datemnth(Settle,6);
Strike = 80;
VanillaOpt = fininstrument('Vanilla','ExerciseDate',Maturity,'Strike',Strike,'Name',"vanilla_option")
VanillaOpt = 
  Vanilla with properties:

       OptionType: "call"
    ExerciseStyle: "european"
     ExerciseDate: 29-Dec-2017
           Strike: 80
             Name: "vanilla_option"

Создание Heston Объект модели

Использование finmodel для создания Heston объект модели.

V0 = 0.04;
ThetaV = 0.05;
Kappa = 1.0;
SigmaV = 0.2;
RhoSV = -0.7;

HestonModel = finmodel("Heston",'V0',V0,'ThetaV',ThetaV,'Kappa',Kappa,'SigmaV',SigmaV,'RhoSV',RhoSV)
HestonModel = 
  Heston with properties:

        V0: 0.0400
    ThetaV: 0.0500
     Kappa: 1
    SigmaV: 0.2000
     RhoSV: -0.7000

Создание ratecurve объект

Создайте ratecurve объект, использующий ratecurve.

Rate = 0.03;
ZeroCurve = ratecurve('zero',Settle,Maturity,Rate);

Создание NumericalIntegration, FFT, и FiniteDifference Объекты прейскуранта

Использование finpricer для создания NumericalIntegration, FFT, и FiniteDifference Ценовые объекты и используйте ratecurve объект для 'DiscountCurve' аргумент пары "имя-значение".

SpotPrice = 80;
Strike = 80;
DividendYield = 0.02;

NIPricer = finpricer("NumericalIntegration",'Model', HestonModel,'SpotPrice',SpotPrice,'DiscountCurve',ZeroCurve,'DividendValue',DividendYield)
NIPricer = 
  NumericalIntegration with properties:

                Model: [1x1 finmodel.Heston]
        DiscountCurve: [1x1 ratecurve]
            SpotPrice: 80
         DividendType: "continuous"
        DividendValue: 0.0200
               AbsTol: 1.0000e-10
               RelTol: 1.0000e-10
     IntegrationRange: [1.0000e-09 Inf]
    CharacteristicFcn: @characteristicFcnHeston
            Framework: "heston1993"
       VolRiskPremium: 0
           LittleTrap: 1

FFTPricer = finpricer("FFT",'Model',HestonModel, ...
    'SpotPrice',SpotPrice,'DiscountCurve',ZeroCurve, ...
    'DividendValue',DividendYield,'NumFFT',8192)
FFTPricer = 
  FFT with properties:

                    Model: [1x1 finmodel.Heston]
            DiscountCurve: [1x1 ratecurve]
                SpotPrice: 80
             DividendType: "continuous"
            DividendValue: 0.0200
                   NumFFT: 8192
    CharacteristicFcnStep: 0.0100
            LogStrikeStep: 0.0767
        CharacteristicFcn: @characteristicFcnHeston
            DampingFactor: 1.5000
               Quadrature: "simpson"
           VolRiskPremium: 0
               LittleTrap: 1

FDPricer = finpricer("FiniteDifference",'Model',HestonModel,'SpotPrice',SpotPrice,'DiscountCurve',ZeroCurve,'DividendValue',DividendYield)
FDPricer = 
  FiniteDifference with properties:

     DiscountCurve: [1x1 ratecurve]
             Model: [1x1 finmodel.Heston]
         SpotPrice: 80
    GridProperties: [1x1 struct]
      DividendType: "continuous"
     DividendValue: 0.0200

Ценовые Vanilla Инструмент

Используйте следующие чувствительности при расчете цены на Vanilla прибора.

InpSensitivity = ["delta", "gamma", "theta", "rho", "vega", "vegalt"];

Использование price вычислить цену и чувствительность для Vanilla инструмент, который использует NumericalIntegration цена.

[PriceNI,  outPR_NI]  = price(NIPricer,VanillaOpt,InpSensitivity)
PriceNI = 4.7007
outPR_NI = 
  priceresult with properties:

       Results: [1x7 table]
    PricerData: []

Использование price вычислить цену и чувствительность для Vanilla инструмент, который использует FFT цена.

[PriceFFT, outPR_FFT] = price(FFTPricer,VanillaOpt,InpSensitivity)
PriceFFT = 4.7007
outPR_FFT = 
  priceresult with properties:

       Results: [1x7 table]
    PricerData: []

Использование price вычислить цену и чувствительность для Vanilla инструмент, который использует FiniteDifference цена.

[PriceFD,  outPR_FD]  = price(FDPricer,VanillaOpt,InpSensitivity)
PriceFD = 4.7003
outPR_FD = 
  priceresult with properties:

       Results: [1x7 table]
    PricerData: [1x1 struct]

Агрегируйте результаты цены.

[outPR_NI.Results;outPR_FFT.Results;outPR_FD.Results]
ans=3×7 table
    Price      Delta      Gamma       Theta      Rho       Vega     VegaLT
    ______    _______    ________    _______    ______    ______    ______

    4.7007    0.57747     0.03392    -4.8474    20.805    17.028    5.2394
    4.7007    0.57747     0.03392    -4.8474    20.805    17.028    5.2394
    4.7003    0.57722    0.035254    -4.8483    20.801    17.046    5.2422

Вычисление Опции ценовых поверхностей

Используйте price функция для NumericalIntegration ценник и price функция для FFT прейскурант для вычисления цен для области значений Vanilla приборы.

Maturities = datemnth(Settle,(3:3:24)');
NumMaturities = length(Maturities);
Strikes = (20:10:160)';
NumStrikes = length(Strikes);

[Maturities_Full,Strikes_Full] = meshgrid(Maturities,Strikes);

NumInst = numel(Strikes_Full);
VanillaOptions(NumInst, 1) = fininstrument("vanilla",...
    "ExerciseDate", Maturities_Full(1), "Strike", Strikes_Full(1));
for instidx=1:NumInst
    VanillaOptions(instidx) = fininstrument("vanilla",...
        "ExerciseDate", Maturities_Full(instidx), "Strike", Strikes_Full(instidx));
end

Prices_NI = price(NIPricer, VanillaOptions);
Prices_FFT = price(FFTPricer, VanillaOptions);

figure;
surf(Maturities_Full,Strikes_Full,reshape(Prices_NI,[NumStrikes,NumMaturities]));
title('Price (Numerical Integration)');
view(-112,34);
xlabel('Maturity')
ylabel('Strike')

Figure contains an axes. The axes with title Price (Numerical Integration) contains an object of type surface.

figure;
surf(Maturities_Full,Strikes_Full,reshape(Prices_FFT,[NumStrikes,NumMaturities]));
title('Price (FFT)');
view(-112,34);
xlabel('Maturity')
ylabel('Strike')

Figure contains an axes. The axes with title Price (FFT) contains an object of type surface.