%% Price Double Touch Instrument Using a Bates Model and Asset Monte Carlo Pricer
% This example shows the workflow to price a DoubleTouch instrument when you use a Bates model and an AssetMonteCarlo pricing method.
%% Create DoubleTouch Instrument Object
% Use fininstrument to create a DoubleTouch instrument object.

DoubleTouchOpt = fininstrument("DoubleTouch",'ExerciseDate',datetime(2022,9,15),'BarrierValue',[115 95],'PayoffValue',40,'BarrierType',"DOT",'Name',"doubletouch_option")

%
%% Create Bates Model Object
% Use finmodel to create a Bates model object.

BatesModel = finmodel("Bates",'V0',0.032,'ThetaV',0.1,'Kappa',0.003,'SigmaV',0.2,'RhoSV',0.9,'MeanJ',0.11,'JumpVol',.023,'JumpFreq',0.02)

%% 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)

%% 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",BatesModel,'SpotPrice',102,'simulationDates',datetime(2022,9,15))

%% Price DoubleTouch Instrument
% Use price to compute the price and sensitivities for the DoubleTouch instrument.

[Price, outPR] = price(outPricer,DoubleTouchOpt,["all"])
outPR.Results 

% Copyright 2020 The MathWorks, Inc.