Main Content

dblbarriersensbybls

Calculate prices and sensitivities for European double barrier options using Black-Scholes option pricing model

Description

PriceSens = dblbarriersensbybls(RateSpec,StockSpec,OptSpec,Strike,Settle,ExerciseDates,BarrierSpec,Barrier) calculates European double barrier option prices and sensitivities using the Black-Scholes option pricing model and the Ikeda and Kunitomo approximation.

Note

Alternatively, you can use the DoubleBarrier object to calculate price or sensitivities for double barrier options. For more information, see Get Started with Workflows Using Object-Based Framework for Pricing Financial Instruments.

example

PriceSens = dblbarriersensbybls(___,Name,Value) specifies options using one or more name-value pair arguments in addition to the input arguments in the previous syntax.

example

Examples

collapse all

Compute the price and sensitivities for a European double knock-out (down and out-up and out) call option using the following data:

Rate = 0.05;
Settle = datetime(2018,6,1);
Maturity = datetime(2018,12,1);
Basis = 1;

Define a RateSpec.

RateSpec = intenvset('ValuationDate', Settle, 'StartDates', Settle, 'EndDates', Maturity,'Rates', Rate, 'Compounding', -1, 'Basis', Basis);

Define a StockSpec.

AssetPrice = 100; 
Volatility = 0.25;
StockSpec = stockspec(Volatility, AssetPrice);

Define the double barrier option and sensitivities.

LBarrier = 80; 
UBarrier = 130; 
Barrier = [UBarrier LBarrier];
BarrierSpec = 'DKO';
OptSpec = 'Call';
Strike = 110;
OutSpec = {'Price', 'Delta', 'Gamma'};

Compute the price of the option using flat boundaries.

[PriceFlat, Delta, Gamma] = dblbarriersensbybls(RateSpec, StockSpec, OptSpec, Strike, Settle, Maturity, BarrierSpec, Barrier,'OutSpec', OutSpec)
PriceFlat = 
1.1073
Delta = 
0.0411
Gamma = 
-0.0040

Compute the price of the option using two curved boundaries.

Curvature = [0.05 -0.05];
[PriceCurved, Delta, Gamma] = dblbarriersensbybls(RateSpec, StockSpec, OptSpec, Strike, Settle, Maturity, BarrierSpec, Barrier, 'Curvature', Curvature,'OutSpec', OutSpec)
PriceCurved = 
1.4548
Delta = 
0.0620
Gamma = 
-0.0045

Input Arguments

collapse all

Interest-rate term structure (annualized and continuously compounded), specified by the RateSpec obtained from intenvset. For information on the interest-rate specification, see intenvset.

Data Types: struct

Stock specification for the underlying asset, specified by the StockSpec obtained from stockspec.

stockspec handles several types of underlying assets. For example, for physical commodities the price is StockSpec.Asset, the volatility is StockSpec.Sigma, and the convenience yield is StockSpec.DividendAmounts.

Data Types: struct

Definition of the option as 'call' or 'put', specified as a NINST-by-1 cell array of character vectors or string array with values 'call' or 'put' or "call" or "put".

Data Types: char | cell | string

Option strike price value, specified as an NINST-by-1 matrix of numeric values, where each row is the schedule for one option.

Data Types: double

Settlement or trade date for the double barrier option, specified as an NINST-by-1 vector using a datetime array, string array, or date character vectors.

To support existing code, dblbarriersensbybls also accepts serial date numbers as inputs, but they are not recommended.

Option exercise dates, specified as an NINST-by-1 vector using a datetime array, string array, or date character vectors.

Note

For a European option, the option expiry date has only one ExerciseDates value, which is the maturity of the instrument.

To support existing code, dblbarriersensbybls also accepts serial date numbers as inputs, but they are not recommended.

Double barrier option type, specified as an NINST-by-1 cell array of character vectors or string array with the following values:

  • 'DKI' — Double Knock-in

    The 'DKI' option becomes effective when the price of the underlying asset reaches one of the barriers. It gives the option holder the right but not the obligation to buy or sell the underlying security at the strike price, if the underlying asset goes above or below the barrier levels during the life of the option.

  • 'DKO' — Double Knock-out

    The 'DKO' option gives the option holder the right but not the obligation to buy or sell the underlying security at the strike price, as long as the underlying asset remains between the barrier levels during the life of the option. This option terminates when the price of the underlying asset passes one of the barriers.

OptionBarrier TypePayoff If Any Barrier CrossedPayoff If Barriers Not Crossed
Call/PutDouble Knock-inStandard Call/PutWorthless
Call/PutDouble Knock-outWorthlessStandard Call/Put

Data Types: char | cell | string

Double barrier value, specified as NINST-by-1 matrix of numeric values, where each element is a 1-by-2 vector where the first column is Barrier(1)(UB) and the second column is Barrier(2)(LB). Barrier(1) must be greater than Barrier(2).

Data Types: double

Name-Value Arguments

Specify optional pairs of arguments as Name1=Value1,...,NameN=ValueN, where Name is the argument name and Value is the corresponding value. Name-value arguments must appear after other arguments, but the order of the pairs does not matter.

Before R2021a, use commas to separate each name and value, and enclose Name in quotes.

Example: PriceSens = dblbarriersensbybls(RateSpec,StockSpec,OptSpec,Strike,Settle,Maturity,BarrierSpec,Barrier,'Curvature',[1,5],'OutSpec','Delta')

Curvature levels of the upper and lower barriers, specified as the comma-separated pair consisting of 'Curvature' and an NINST-by-1 matrix of numeric values, where each element is a 1-by-2 vector. The first column is the upper barrier curvature (d1) and the second column is the lower barrier curvature (d2).

  • d1 = d2 = 0 corresponds to two flat boundaries.

  • d1 < 0 < d2 corresponds to an exponentially growing lower boundary and an exponentially decaying upper boundary.

  • d1 > 0 > d2 corresponds to a convex downward lower boundary and a convex upward upper boundary.

Data Types: double

Define outputs, specified as the comma-separated pair consisting of 'OutSpec' and a NOUT- by-1 or a 1-by-NOUT cell array of character vectors with possible values of 'Price', 'Delta', 'Gamma', 'Vega', 'Lambda', 'Rho', 'Theta', and 'All'.

OutSpec = {'All'} specifies that the output is Delta, Gamma, Vega, Lambda, Rho, Theta, and Price, in that order. This is the same as specifying OutSpec to include each sensitivity.

Example: OutSpec = {'delta','gamma','vega','lambda','rho','theta','price'}

Data Types: char | cell

Output Arguments

collapse all

Expected prices at time 0 or sensitivities (defined using OutSpec) for double barrier options, returned as a NINST-by-1 matrix.

More About

collapse all

Double Barrier Option

A double barrier option is similar to the standard single barrier option except that it has two barrier levels: a lower barrier (LB) and an upper barrier (UB).

The payoff for a double barrier option depends on whether the underlying asset remains between the barrier levels during the life of the option. Double barrier options are less expensive than single barrier options as they have a higher knock-out probability. Because of this, double barrier options allow investors to reduce option premiums and match an investor’s belief about the future movement of the underlying price process.

Ikeda and Kunitomo Approximation

The analytical formulas of Ikeda and Kunitomo approach pricing as constrained by curved boundaries.

This approach has the advantage of covering barriers that are flat, have exponential growth or decay, or are concave. The Ikeda and Kunitomo model for pricing double barrier options focuses on calculating double knock-out barriers.

References

[1] Hull, J. Options, Futures, and Other Derivatives. Fourth Edition. Upper Saddle River, NJ: Prentice Hall, 2000.

[2] Kunitomo, N., and M. Ikeda. “Pricing Options with Curved Boundaries.” Mathematical Finance. Vol. 2, Number 4, 1992.

[3] Rubinstein, M., and E. Reiner. “Breaking Down the Barriers.” Risk. Vol. 4, Number 8, 1991, pp. 28–35.

Version History

Introduced in R2019a

expand all