floorbyblk

Price floors using Black option pricing model

Syntax

[FloorPrice, Floorlets] = floorbyblk(RateSpec, Strike, Settle,
Maturity, Volatility)
[FloorPrice, Floorlets] = floorbyblk(RateSpec, Strike, Settle,
Maturity, Volatility, 'Name1', Value1...)

Arguments

RateSpec

The annualized, continuously compounded rate term structure. For more information, see intenvset.

Strike

NINST-by-1 vector of rates at which the floor is exercised, as a decimal number.

Settle

Scalar representing the settle date of the floor.

Maturity

Scalar representing the maturity date of the floor.

Volatility

NINST-by-1 vector of volatilities.

Reset

(Optional) NINST-by-1 vector representing the frequency of payments per year. Default is 1.

Principal

(Optional) NINST-by-1 of notional principal amounts or NINST-by-1 cell array where each element is a NumDates-by-2 cell array where the first column is dates and the second column is associated principal amount. The date indicates the last day that the principal value is valid. Default is 100.

Basis

(Optional) NINST-by-1 vector representing the basis used when annualizing the input forward rate.

  • 0 = actual/actual (default)

  • 1 = 30/360 (SIA)

  • 2 = actual/360

  • 3 = actual/365

  • 4 = 30/360 (BMA)

  • 5 = 30/360 (ISDA)

  • 6 = 30/360 (European)

  • 7 = actual/365 (Japanese)

  • 8 = actual/actual (ICMA)

  • 9 = actual/360 (ICMA)

  • 10 = actual/365 (ICMA)

  • 11 = 30/360E (ICMA)

  • 12 = actual/actual (ISDA)

  • 13 = BUS/252

For more information, see basis.

ValuationDate

(Optional) Scalar representing the observation date of the investment horizons. The default is the Settle date.

ProjectionCurve

(Optional) The rate curve to be used in generating the future forward rates. This structure must be created using intenvset. Use this optional input if the forward curve is different from the discount curve. If ProjectionCurve is not specified, then RateSpec is used both for discounting cash flows and projecting future forward rates.

    Note:   All optional inputs are specified as matching parameter name/value pairs. The parameter name is specified as a character string, followed by the corresponding parameter value. You can specify parameter name/value pairs in any order. Names are case-insensitive and partial string matches are allowed provided no ambiguities exist.

Description

[FloorPrice, Floorlets] = floorbyblk(RateSpec, Strike, Settle,
Maturity, Volatility)
to price floors using the Black option pricing model.

[FloorPrice, Floorlets] = floorbyblk(RateSpec, Strike, Settle,
Maturity, Volatility, 'Name1', Value1...)
to price floors using the Black option pricing model with optional name-value pair arguments.

The outputsfloorbyblk for are:

  • FloorPriceNINST-by-1 expected prices of the floor.

  • FloorletsNINST-by-NCF array of floorlets, padded with NaNs.

    Note:   Use the optional name-value pair argument, Principal, to pass a schedule to compute price for an amortizing floor.

Examples

expand all

Price a Floor Using the Black Option Pricing Model

This example shows how to price a floor using the Black option pricing model. Consider an investor who gets into a contract that floors the interest rate on a $100,000 loan at 6% quarterly compounded for 3 months, starting on January 1, 2009. Assuming that on January 1, 2008 the zero rate is 6.9394% continuously compounded and the volatility is 20%, use this data to compute the floor price.

ValuationDate = 'Jan-01-2008';
EndDates ='April-01-2010';
Rates = 0.069394;
Compounding = -1;
Basis = 1;

% calculate the RateSpec
RateSpec = intenvset('ValuationDate', ValuationDate, ...
'StartDates', ValuationDate,'EndDates', EndDates, ...
'Rates', Rates,'Compounding', Compounding,'Basis', Basis);

Settle = 'Jan-01-2009'; % floor starts in a year
Maturity = 'April-01-2009';
Volatility = 0.20;
FloorRate = 0.06;
FloorReset = 4;
Principal=100000;

FloorPrice = floorbyblk(RateSpec, FloorRate, Settle, Maturity, Volatility,...
'Reset',FloorReset,'ValuationDate',ValuationDate,'Principal', Principal,...
'Basis', Basis)
FloorPrice =

   37.4864

Price a Floor Using a Different Curve to Generate the Future Forward Rates

Define the OIS and Libor rates.

Settle = datenum('15-Mar-2013');
CurveDates = daysadd(Settle,360*[1/12 2/12 3/12 6/12 1 2 3 4 5 7 10],1);
OISRates = [.0018 .0019 .0021 .0023 .0031 .006  .011 .017 .021 .026 .03]';
LiborRates = [.0045 .0047 .005 .0055 .0075 .0109  .0162 .0216 .0262 .0309 .0348]';

Create an associated RateSpec for the OIS and Libor curves.

OISCurve = intenvset('Rates',OISRates,'StartDate',Settle,'EndDates',CurveDates,'Compounding',2,'Basis',1);
LiborCurve = intenvset('Rates',LiborRates,'StartDate',Settle,'EndDates',CurveDates,'Compounding',2,'Basis',1);

Define the Floor instruments.

Maturity = {'15-Mar-2018';'15-Mar-2020'};
Strike = [.04;.05];
BlackVol = .2;

Price the floor instruments using the term structure OISCurve both for discounting the cash flows and generating future forward rates.

[Price, Floorlets] = floorbyblk(OISCurve, Strike, Settle, Maturity, BlackVol)
Price =

    9.9808
   16.9057


Floorlets =

    3.6783    3.0706    1.8275    0.7280    0.6764       NaN       NaN
    4.6753    4.0587    2.7921    1.4763    1.3442    1.4130    1.1462

Price the floor instruments using the term structure LiborCurve to generate future forward rates. The term structure OISCurve is used for discounting the cash flows.

[PriceLC, FloorletsLC] = floorbyblk(OISCurve, Strike, Settle, Maturity, BlackVol,'ProjectionCurve',LiborCurve)
PriceLC =

    8.0524
   14.3184


FloorletsLC =

    3.2385    2.5338    1.2895    0.5889    0.4017       NaN       NaN
    4.2355    3.5219    2.2286    1.2751    0.9169    1.1698    0.9706

Compute the Price of an Amortizing Floor Using the Black Model

Define the RateSpec.

Rates = [0.0358; 0.0421; 0.0473; 0.0527; 0.0543];
ValuationDate = '15-Nov-2011';
StartDates = ValuationDate;
EndDates = {'15-Nov-2012';'15-Nov-2013';'15-Nov-2014' ;'15-Nov-2015';'15-Nov-2016'};
Compounding = 1;
RateSpec = intenvset('ValuationDate', ValuationDate,'StartDates', StartDates,...
             'EndDates', EndDates,'Rates', Rates, 'Compounding', Compounding)
RateSpec = 

           FinObj: 'RateSpec'
      Compounding: 1
             Disc: [5x1 double]
            Rates: [5x1 double]
         EndTimes: [5x1 double]
       StartTimes: [5x1 double]
         EndDates: [5x1 double]
       StartDates: 734822
    ValuationDate: 734822
            Basis: 0
     EndMonthRule: 1

Define the floor instrument.

Settle ='15-Nov-2011';
Maturity = '15-Nov-2015';
Strike = 0.05;
Reset = 2;
Principal ={{'15-Nov-2012' 100;'15-Nov-2013' 70;'15-Nov-2014' 40;'15-Nov-2015' 10}};

Price the amortizing floor.

Volatility = 0.20;
Price = floorbyblk(RateSpec, Strike, Settle, Maturity, Volatility,...
'Reset',Reset,'Principal', Principal)
Price =

    1.9315

Was this topic helpful?