%% Price Vanilla Cap Instrument Using Black Model and Black Pricer
% This example shows the workflow to price a vanilla Cap instrument when using a Black model and a Black pricing method.
%% Create a Cap Instrument Object
% Use fininstrument to create a Cap instrument object.

CapOpt = fininstrument("Cap",'Strike',0.006,'Maturity',datetime(2021,12,15),'Reset',2,'Principal',1000,'ResetOffset',1,'Basis',3,'DaycountAdjustedCashFlow',true,'BusinessDayConvention',"follow",'Name',"cap_option")

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

BlackModel = finmodel("Black",'Volatility',0.032,'Shift',0.04)

%% Create a ratecurve Object
% Create a ratecurve object using ratecurve.

Settle = datetime(2020,9,15);
Type = 'zero';
ZeroTimes = [calmonths(6) calyears([1 2 3 4 5 7 10 20 30])]';
ZeroRates = [0.0052 0.0055 0.0061 0.0073 0.0094 0.0119 0.0168 0.0222 0.0293 0.0307]';
ZeroDates = Settle + ZeroTimes;
 
myRC = ratecurve('zero',Settle,ZeroDates,ZeroRates)

%% Create a Sabr Pricer Object
% Use finpricer to create a BlackScholes pricer object and use the ratecurve object for the 'DiscountCurve' name-value pair argument.

outPricer = finpricer("analytic",'DiscountCurve',myRC,'Model',BlackModel)

%% Price the Cap Instrument
% Use price to compute the price for the Cap instrument.

[Price, outPR] = price(outPricer,CapOpt)

% Copyright 2019 The MathWorks, Inc.