Main Content

price

Compute price for Vanilla, Barrier, Lookback, Asian, Spread, DoubleBarrier, Touch, DoubleTouch, or Binary instrument with AssetMonteCarlo pricer

Description

example

[Price,PriceResult] = price(inpPricer,inpInstrument) computes the instrument price and related pricing information based on the pricing object inpPricer and the instrument object inpInstrument.

example

[Price,PriceResult] = price(___,inpSensitivity) adds an optional argument to specify sensitivities. Use this syntax with the input argument combination in the previous syntax.

Examples

collapse all

This example shows the workflow to price a Touch instrument when you use a Heston model and an AssetMonteCarlo pricing method.

Create Touch Instrument Object

Use fininstrument to create a Touch instrument object.

TouchOpt = fininstrument("Touch",'ExerciseDate',datetime(2022,9,15),'BarrierValue',110,'PayoffValue',140,'BarrierType',"OT",'Name',"touch_option")
TouchOpt = 
  Touch with properties:

    ExerciseDate: 15-Sep-2022
    BarrierValue: 110
     PayoffValue: 140
     BarrierType: "ot"
      PayoffType: "expiry"
            Name: "touch_option"

Create Heston Model Object

Use finmodel to create a Heston model object.

HestonModel = finmodel("Heston",'V0',0.032,'ThetaV',0.1,'Kappa',0.003,'SigmaV',0.2,'RhoSV',0.9)
HestonModel = 
  Heston with properties:

        V0: 0.0320
    ThetaV: 0.1000
     Kappa: 0.0030
    SigmaV: 0.2000
     RhoSV: 0.9000

Create ratecurve Object

Create a flat ratecurve object using ratecurve.

Settle = datetime(2018,9,15);
Maturity = datetime(2023,9,15);
Rate = 0.035;
myRC = ratecurve('zero',Settle,Maturity,Rate,'Basis',12)
myRC = 
  ratecurve with properties:

                 Type: "zero"
          Compounding: -1
                Basis: 12
                Dates: 15-Sep-2023
                Rates: 0.0350
               Settle: 15-Sep-2018
         InterpMethod: "linear"
    ShortExtrapMethod: "next"
     LongExtrapMethod: "previous"

Create AssetMonteCarlo Pricer Object

Use finpricer to create an AssetMonteCarlo pricer object and use the ratecurve object for the 'DiscountCurve' name-value pair argument.

outPricer = finpricer("AssetMonteCarlo",'DiscountCurve',myRC,"Model",HestonModel,'SpotPrice',112,'simulationDates',datetime(2022,9,15))
outPricer = 
  HestonMonteCarlo with properties:

      DiscountCurve: [1x1 ratecurve]
          SpotPrice: 112
    SimulationDates: 15-Sep-2022
          NumTrials: 1000
      RandomNumbers: []
              Model: [1x1 finmodel.Heston]
       DividendType: "continuous"
      DividendValue: 0

Price Touch Instrument

Use price to compute the price and sensitivities for the Touch instrument.

[Price, outPR] = price(outPricer,TouchOpt,["all"])
Price = 63.5247
outPR = 
  priceresult with properties:

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

outPR.Results 
ans=1×8 table
    Price      Delta     Gamma     Lambda       Rho      Theta      Vega     VegaLT
    ______    _______    ______    _______    _______    ______    ______    ______

    63.525    -7.2363    1.0541    -12.758    -320.21    3.5527    418.94    8.1498

Input Arguments

collapse all

Pricer object, specified as a previously created AssetMonteCarlo pricer object. Create the pricer object using finpricer.

Data Types: object

Instrument object, specified as a previously created instrument object. Create the instrument object using fininstrument. The following instrument objects are supported:

Data Types: object

(Optional) List of sensitivities to compute, specified as an NOUT-by-1 or 1-by-NOUT cell array of character vectors or string array.

The supported sensitivities depend on the pricing method.

inpInstrument ObjectSupported Sensitivities
Vanilla{'delta','gamma','vega', 'theta','rho','price','lambda'}
Lookback{'delta','gamma','vega','theta','rho','price','lambda'}
Barrier{'delta','gamma','vega','theta','rho','price','lambda'}
Asian{'delta','gamma','vega','theta','rho','price','lambda'}
Spread{'delta','gamma','vega','theta','rho','price','lambda}'
DoubleBarrier{'delta','gamma','vega','theta','rho','price','lambda}'
Binary{'delta','gamma','vega','theta','rho','price','lambda'}
Touch{'delta','gamma','vega','theta','rho','price','lambda'}
DoubleTouch{'delta','gamma','vega','theta','rho','price','lambda'}

inpSensitivity = {'All'} or inpSensitivity = ["All"] specifies that all sensitivities for the pricing method are returned. This is the same as specifying inpSensitivity to include each sensitivity.

Example: inpSensitivity = ["delta","gamma","vega","lambda","rho","theta","price"]

Data Types: cell | string

Output Arguments

collapse all

Instrument price, returned as a numeric.

Price result, returned as a PriceResult object. The object has the following fields:

  • PriceResult.Results — Table of results that includes sensitivities (if you specify inpSensitivity)

  • PriceResult.PricerData — Structure for pricer data

Note

The inpPricer options that do not support sensitivities do not return a PriceResult. For example, there is no PriceResult returned for when you use a Black, CDSBlack, HullWhite, Normal, or SABR pricing method.

Introduced in R2020b