Pricing Equity Derivatives Using Trees
Computing Instrument Prices
The portfolio pricing functions crrprice
, eqpprice
, and ittprice
calculate the price of
any set of supported instruments based on a binary equity price tree, an implied
trinomial price tree, or a standard trinomial tree. These functions are capable of
pricing the following instrument types:
Vanilla stock options
American and European puts and calls
Exotic options
Asian
Barrier
Compound
Lookback
Stock options (Bermuda put and call schedules)
The syntax for calling the function crrprice
is:
[Price, PriceTree] = crrprice(CRRTree, InstSet, Options)
The syntax for eqpprice
is:
[Price, PriceTree] = eqpprice(EQPTree, InstSet, Options)
The syntax for ittprice
is:
Price = ittprice(ITTTree, ITTInstSet, Options)
The syntax for sttprice
is:
[Price, PriceTree] = sttprice(STTTree, InstSet, Name,
Value)
These functions require two input arguments: the equity price
tree and the set of instruments, InstSet
, and allow
a third optional argument.
Required Arguments
CRRTree
is a CRR equity price tree created
using crrtree
. EQPTree
is
an equal probability equity price tree created using eqptree
. ITTTree
is
an ITT equity price tree created using itttree
. STTTree
is
a standard trinomial equity price tree created using stttree
. See Building Equity Binary Trees and Building Implied Trinomial Trees to learn
how to create these structures.
InstSet
is a structure that represents the
set of instruments to be priced independently using the model.
Optional Argument
You can enter a third optional argument, Options
, used when pricing barrier
options. For more specific information, see Pricing Options Structure.
These pricing functions internally classify the instruments
and call the appropriate individual instrument pricing function for
each of the instrument types. The CRR pricing functions are asianbycrr
, barrierbycrr
, compoundbycrr
, lookbackbycrr
,
and optstockbycrr
. A similar
set of functions exists for EQP, ITT, and STT pricing. You can also
use these functions directly to calculate the price of sets of instruments
of the same type. See the reference pages for these individual functions
for further information.
Computing Prices Using CRR
This example shows how to calculate the price of each instrument in the instrument set using crrprice
.
Load the data into the MATLAB® workspace.
load deriv.mat
Use the MATLAB® whos
command to display a list of the variables loaded from the MAT-file.
whos
Name Size Bytes Class Attributes BDTInstSet 1x1 28737 struct BDTTree 1x1 6289 struct BKInstSet 1x1 28727 struct BKTree 1x1 7355 struct CIRInstSet 1x1 31123 struct CIRTree 1x1 6784 struct CRRInstSet 1x1 22035 struct CRRTree 1x1 5832 struct EQPInstSet 1x1 22035 struct EQPTree 1x1 5832 struct HJMInstSet 1x1 28729 struct HJMTree 1x1 7206 struct HWInstSet 1x1 28727 struct HWTree 1x1 7355 struct ITTInstSet 1x1 22039 struct ITTTree 1x1 11367 struct STTInstSet 1x1 22039 struct STTTree 1x1 6600 struct ZeroInstSet 1x1 18203 struct ZeroRateSpec 1x1 1732 struct
CRRTree
and CRRInstSet
are the input arguments required to call the function crrprice
.
Use the command instdisp
to examine the set of instruments contained in the variable CRRInstSet
.
instdisp(CRRInstSet)
Index Type OptSpec Strike Settle ExerciseDates AmericanOpt Name Quantity 1 OptStock call 105 01-Jan-2003 01-Jan-2005 1 Call1 10 2 OptStock put 105 01-Jan-2003 01-Jan-2006 0 Put1 5 Index Type OptSpec Strike Settle ExerciseDates AmericanOpt BarrierSpec Barrier Rebate Name Quantity 3 Barrier call 105 01-Jan-2003 01-Jan-2006 1 ui 102 0 Barrier1 1 Index Type UOptSpec UStrike USettle UExerciseDates UAmericanOpt COptSpec CStrike CSettle CExerciseDates CAmericanOpt Name Quantity 4 Compound call 130 01-Jan-2003 01-Jan-2006 1 put 5 01-Jan-2003 01-Jan-2005 1 Compound1 3 Index Type OptSpec Strike Settle ExerciseDates AmericanOpt Name Quantity 5 Lookback call 115 01-Jan-2003 01-Jan-2006 0 Lookback1 7 6 Lookback call 115 01-Jan-2003 01-Jan-2007 0 Lookback2 9 Index Type OptSpec Strike Settle ExerciseDates AmericanOpt AvgType AvgPrice AvgDate Name Quantity 7 Asian put 110 01-Jan-2003 01-Jan-2006 0 arithmetic NaN NaN Asian1 4 8 Asian put 110 01-Jan-2003 01-Jan-2007 0 arithmetic NaN NaN Asian2 6
The instrument set contains eight instruments:
Two vanilla options (
Call1
,Put1
)One barrier option (
Barrier1
)One compound option (
Compound1
)Two lookback options (
Lookback1
,Lookback2
)Two Asian options (
Asian1
,Asian2
)
Each instrument has a corresponding index that identifies the instrument prices in the price vector returned by crrprice
.
Use crrprice
to calculate the price of each instrument in the instrument set.
Price = crrprice(CRRTree, CRRInstSet)
Price = 8×1
8.2863
2.5016
12.1272
3.3241
7.6015
11.7772
4.1797
3.4219
Computing Prices Using EQP
This example shows how to calculate the price of each instrument in the instrument set using eqpprice
.
Load the data into the MATLAB® workspace.
load deriv.mat
Use the MATLAB® whos
command to display a list of the variables loaded from the MAT-file.
whos
Name Size Bytes Class Attributes BDTInstSet 1x1 28737 struct BDTTree 1x1 6289 struct BKInstSet 1x1 28727 struct BKTree 1x1 7355 struct CIRInstSet 1x1 31123 struct CIRTree 1x1 6784 struct CRRInstSet 1x1 22035 struct CRRTree 1x1 5832 struct EQPInstSet 1x1 22035 struct EQPTree 1x1 5832 struct HJMInstSet 1x1 28729 struct HJMTree 1x1 7206 struct HWInstSet 1x1 28727 struct HWTree 1x1 7355 struct ITTInstSet 1x1 22039 struct ITTTree 1x1 11367 struct STTInstSet 1x1 22039 struct STTTree 1x1 6600 struct ZeroInstSet 1x1 18203 struct ZeroRateSpec 1x1 1732 struct
EQPTree
and EQPInstSet
are the input arguments required to call the function eqpprice
.
Use the command instdisp
to examine the set of instruments contained in the variable EQPInstSet
.
instdisp(EQPInstSet)
Index Type OptSpec Strike Settle ExerciseDates AmericanOpt Name Quantity 1 OptStock call 105 01-Jan-2003 01-Jan-2005 1 Call1 10 2 OptStock put 105 01-Jan-2003 01-Jan-2006 0 Put1 5 Index Type OptSpec Strike Settle ExerciseDates AmericanOpt BarrierSpec Barrier Rebate Name Quantity 3 Barrier call 105 01-Jan-2003 01-Jan-2006 1 ui 102 0 Barrier1 1 Index Type UOptSpec UStrike USettle UExerciseDates UAmericanOpt COptSpec CStrike CSettle CExerciseDates CAmericanOpt Name Quantity 4 Compound call 130 01-Jan-2003 01-Jan-2006 1 put 5 01-Jan-2003 01-Jan-2005 1 Compound1 3 Index Type OptSpec Strike Settle ExerciseDates AmericanOpt Name Quantity 5 Lookback call 115 01-Jan-2003 01-Jan-2006 0 Lookback1 7 6 Lookback call 115 01-Jan-2003 01-Jan-2007 0 Lookback2 9 Index Type OptSpec Strike Settle ExerciseDates AmericanOpt AvgType AvgPrice AvgDate Name Quantity 7 Asian put 110 01-Jan-2003 01-Jan-2006 0 arithmetic NaN NaN Asian1 4 8 Asian put 110 01-Jan-2003 01-Jan-2007 0 arithmetic NaN NaN Asian2 6
The instrument set contains eight instruments:
Two vanilla options (
Call1
,Put1
)One barrier option (
Barrier1
)One compound option (
Compound1
)Two lookback options (
Lookback1
,Lookback2
)Two Asian options (
Asian1
,Asian2
)
Each instrument has a corresponding index that identifies the instrument prices in the price vector returned by eqpprice
.
Use eqpprice
to calculate the price of each instrument in the instrument set.
Price = eqpprice(EQPTree, EQPInstSet)
Price = 8×1
8.4791
2.6375
12.2632
3.5091
8.7941
12.9577
4.7444
3.9178
Computing Prices Using ITT
This example shows how to calculate the price of each instrument in the instrument set using ittprice
.
Load the data into the MATLAB® workspace.
load deriv.mat
Use the MATLAB® whos
command to display a list of the variables loaded from the MAT-file.
whos
Name Size Bytes Class Attributes BDTInstSet 1x1 28737 struct BDTTree 1x1 6289 struct BKInstSet 1x1 28727 struct BKTree 1x1 7355 struct CIRInstSet 1x1 31123 struct CIRTree 1x1 6784 struct CRRInstSet 1x1 22035 struct CRRTree 1x1 5832 struct EQPInstSet 1x1 22035 struct EQPTree 1x1 5832 struct HJMInstSet 1x1 28729 struct HJMTree 1x1 7206 struct HWInstSet 1x1 28727 struct HWTree 1x1 7355 struct ITTInstSet 1x1 22039 struct ITTTree 1x1 11367 struct STTInstSet 1x1 22039 struct STTTree 1x1 6600 struct ZeroInstSet 1x1 18203 struct ZeroRateSpec 1x1 1732 struct
ITTTree
and ITTInstSet
are the input arguments required to call the function ittprice
.
Use the command instdisp
to examine the set of instruments contained in the variable ITTInstSet
.
instdisp(ITTInstSet)
Index Type OptSpec Strike Settle ExerciseDates AmericanOpt Name Quantity 1 OptStock call 95 01-Jan-2006 31-Dec-2008 1 Call1 10 2 OptStock put 80 01-Jan-2006 01-Jan-2010 0 Put1 4 Index Type OptSpec Strike Settle ExerciseDates AmericanOpt BarrierSpec Barrier Rebate Name Quantity 3 Barrier call 85 01-Jan-2006 31-Dec-2008 1 ui 115 0 Barrier1 1 Index Type UOptSpec UStrike USettle UExerciseDates UAmericanOpt COptSpec CStrike CSettle CExerciseDates CAmericanOpt Name Quantity 4 Compound call 99 01-Jan-2006 01-Jan-2010 1 put 5 01-Jan-2006 01-Jan-2010 1 Compound1 3 Index Type OptSpec Strike Settle ExerciseDates AmericanOpt Name Quantity 5 Lookback call 85 01-Jan-2006 01-Jan-2008 0 Lookback1 7 6 Lookback call 85 01-Jan-2006 01-Jan-2010 0 Lookback2 9 Index Type OptSpec Strike Settle ExerciseDates AmericanOpt AvgType AvgPrice AvgDate Name Quantity 7 Asian call 55 01-Jan-2006 01-Jan-2008 0 arithmetic NaN NaN Asian1 5 8 Asian call 55 01-Jan-2006 01-Jan-2010 0 arithmetic NaN NaN Asian2 7
The instrument set contains eight instruments:
Two vanilla options (
Call1
,Put1
)One barrier option (
Barrier1
)One compound option (
Compound1
)Two lookback options (
Lookback1
,Lookback2
)Two Asian options (
Asian1
,Asian2
)
Each instrument has a corresponding index that identifies the instrument prices in the price vector returned by ittprice
.
Use ittprice
to calculate the price of each instrument in the instrument set.
Price = ittprice(ITTTree, ITTInstSet)
Price = 8×1
1.6506
10.6832
2.4074
3.2294
0.5426
6.1845
3.2052
6.6074
Computing Prices Using STT
This example shows how to calculate the price of each instrument in the instrument set using sttprice
.
Load the data into the MATLAB® workspace.
load deriv.mat
Use the MATLAB® whos
command to display a list of the variables loaded from the MAT-file.
whos
Name Size Bytes Class Attributes BDTInstSet 1x1 28737 struct BDTTree 1x1 6289 struct BKInstSet 1x1 28727 struct BKTree 1x1 7355 struct CIRInstSet 1x1 31123 struct CIRTree 1x1 6784 struct CRRInstSet 1x1 22035 struct CRRTree 1x1 5832 struct EQPInstSet 1x1 22035 struct EQPTree 1x1 5832 struct HJMInstSet 1x1 28729 struct HJMTree 1x1 7206 struct HWInstSet 1x1 28727 struct HWTree 1x1 7355 struct ITTInstSet 1x1 22039 struct ITTTree 1x1 11367 struct STTInstSet 1x1 22039 struct STTTree 1x1 6600 struct ZeroInstSet 1x1 18203 struct ZeroRateSpec 1x1 1732 struct
STTTree
and STTInstSet
are the input arguments required to call the function sttprice
.
Use the command instdisp
to examine the set of instruments contained in the variable STTInstSet
.
instdisp(STTInstSet)
Index Type OptSpec Strike Settle ExerciseDates AmericanOpt Name Quantity 1 OptStock call 100 01-Jan-2009 01-Jan-2011 1 Call1 10 2 OptStock put 80 01-Jan-2009 01-Jan-2012 0 Put1 5 Index Type OptSpec Strike Settle ExerciseDates AmericanOpt BarrierSpec Barrier Rebate Name Quantity 3 Barrier call 105 01-Jan-2009 01-Jan-2012 1 ui 115 0 Barrier1 1 Index Type UOptSpec UStrike USettle UExerciseDates UAmericanOpt COptSpec CStrike CSettle CExerciseDates CAmericanOpt Name Quantity 4 Compound call 95 01-Jan-2009 01-Jan-2012 1 put 5 01-Jan-2009 01-Jan-2011 1 Compound1 3 Index Type OptSpec Strike Settle ExerciseDates AmericanOpt Name Quantity 5 Lookback call 90 01-Jan-2009 01-Jan-2012 0 Lookback1 7 6 Lookback call 95 01-Jan-2009 01-Jan-2013 0 Lookback2 9 Index Type OptSpec Strike Settle ExerciseDates AmericanOpt AvgType AvgPrice AvgDate Name Quantity 7 Asian call 100 01-Jan-2009 01-Jan-2012 0 arithmetic NaN NaN Asian1 4 8 Asian call 100 01-Jan-2009 01-Jan-2013 0 arithmetic NaN NaN Asian2 6
The instrument set contains eight instruments:
Two vanilla options (
Call1
,Put1
)One barrier option (
Barrier1
)One compound option (
Compound1
)Two lookback options (
Lookback1
,Lookback2
)Two Asian options (
Asian1
,Asian2
)
Each instrument has a corresponding index that identifies the instrument prices in the price vector returned by sttprice
.
Use sttprice
to calculate the price of each instrument in the instrument set.
Price = sttprice(STTTree, STTInstSet)
Price = 8×1
4.5025
3.0603
3.7977
1.7090
11.7296
12.9120
1.6905
2.6203
Examining Output from the Pricing Functions
The prices in the output vector Price
correspond
to the prices at observation time zero (tObs = 0
),
which is defined as the valuation date of the equity tree. The instrument
indexing within Price
is the same as the indexing
within InstSet
.
In the CRR example, the prices in the Price
vector
correspond to the instruments in this order.
InstNames = instget(CRRInstSet, 'FieldName','Name')
InstNames = Call1 Put1 Barrier1 Compound1 Lookback1 Lookback2 Asian1 Asian2
So, in the Price
vector, the fourth element, 3.3241
,
represents the price of the fourth instrument (Compound1
),
and the sixth element, 11.7772
, represents the
price of the sixth instrument (Lookback2
).
In the ITT example, the prices in the Price
vector
correspond to the instruments in this order.
InstNames = instget(ITTInstSet, 'FieldName','Name')
InstNames = Call1 Put1 Barrier1 Compound1 Lookback1 Lookback2 Asian1 Asian2
So, in the Price
vector, the first element,
1.650, represents the price of the first instrument (Call1
),
and the eighth elements, 6.607, represents the price of the eighth
instrument (Asian2
).
Price Tree Output for CRR
If you call a pricing function with two output arguments, for example:
[Price, PriceTree] = crrprice(CRRTree, CRRInstSet)
you generate a price tree structure along with the price information.
This price tree structure PriceTree
holds
all pricing information.
PriceTree = FinObj: 'BinPriceTree' PTree: {[8x1 double] [8x2 double] [8x3 double] [8x4 double] [8x5 double]} tObs: [0 1 2 3 4] dObs: [731582 731947 732313 732678 733043]
The first field of this structure, FinObj
,
indicates that this structure represents a price tree. The second
field, PTree
, is the tree holding the prices of
the instruments in each node of the tree. Finally, the third and fourth
fields, tObs
and dObs
, represent
the observation time and date of each level of PTree
,
with tObs
using units in terms of compounding periods.
Using the command-line interface, you can directly examine PriceTree.PTree
,
the field within the PriceTree
structure that contains
the price tree with the price vectors at every state. The first node
represents tObs = 0
, corresponding to the valuation
date.
PriceTree.PTree{1}
ans = 8.2863 2.5016 12.1272 3.3241 7.6015 11.7772 4.1797 3.4219
With this interface, you can observe the prices for all instruments in the portfolio at a specific time.
The function eqpprice
also
returns a price tree that you can examine in the same way.
Price Tree Output for ITT
If you call a pricing function with two output arguments, for example:
[Price, PriceTree] = ittprice(ITTTree, ITTInstSet)
you generate a price tree structure along with the price information.
This price tree structure PriceTree
holds
all pricing information.
PriceTree = FinObj: 'TrinPriceTree' PTree: {[8x1 double] [8x3 double] [8x5 double] [8x7 double] [8x9 double]} tObs: [0 1 2 3 4] dObs: [732678 733043 733408 733773 734139]
The first field of this structure, FinObj
,
indicates that this structure represents a trinomial price tree. The
second field, PTree
is the tree holding the prices
of the instruments in each node of the tree. Finally, the third and
fourth fields, tObs
and dObs
,
represent the observation time and date of each level of PTree
,
with tObs
using units in terms of compounding periods.
Using the command-line interface, you can directly examine PriceTree.PTree
,
the field within the PriceTree
structure that contains
the price tree with the price vectors at every state. The first node
represents tObs = 0
, corresponding to the valuation
date.
PriceTree.PTree{1}
ans = 1.6506 10.6832 2.4074 3.2294 0.5426 6.1845 3.2052 6.6074
With this interface, you can observe the prices for all instruments in the portfolio at a specific time.
Prices for Lookback and Asian Options for Equity Trees
Lookback options and Asian options are path-dependent, and,
as such, there are no unique prices for any node except the root node.
So, the corresponding values for lookback and Asian options in the
price tree are set to NaN
, the only exception being
the root node. This becomes apparent if you examine the prices in
the second node (tobs = 1
) of the CRR price tree:
PriceTree.PTree{2}
ans = 11.9176 0 0.9508 7.1914 16.4600 2.6672 2.5896 5.0000 NaN NaN NaN NaN NaN NaN NaN NaN
Examining the prices in the second node (tobs = 1
)
of the ITT price tree displays:
PriceTree.PTree{2}
ans = 3.9022 0 0 6.3736 13.3743 22.1915 5.6914 0 0 2.7663 3.8594 5.0000 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
Graphical Representation of Equity Derivative Trees
You can use the function treeviewer
to
display a graphical representation of a tree, allowing you to examine
interactively the prices and rates on the nodes of the tree until
maturity. The graphical representations of CRR, EQP, and LR trees
are equivalent to Black-Derman-Toy (BDT) trees, given that they are
all binary recombining trees. The graphical representations of ITT
and STT trees are equivalent to Hull-White (HW) trees, given that
they are all trinomial recombining trees. See Graphical Representation of Trees for
an overview on the use of treeviewer
with
CRR trees, EQP trees, LR trees, ITT trees, and STT trees and their
corresponding option price trees. Follow the instructions for BDT
trees.
See Also
crrtree
| eqptree
| lrtree
| stockspec
| crrtimespec
| eqptimespec
| lrtimespec
| itttree
| itttimespec
| treepath
| trintreepath
| asianbycrr
| barrierbycrr
| compoundbycrr
| crrprice
| crrsens
| lookbackbycrr
| optstockbycrr
| instasian
| instbarrier
| instcompound
| instlookback
| instoptstock
| asianbyeqp
| barrierbyeqp
| compoundbyeqp
| eqpprice
| eqpsens
| lookbackbyeqp
| optstockbyeqp
| optstockbylr
| optstocksensbylr
| asianbyitt
| barrierbyitt
| compoundbyitt
| ittprice
| ittsens
| lookbackbyitt
| optstockbyitt
| asianbystt
| barrierbystt
| compoundbystt
| sttprice
| sttsens
| lookbackbystt
| optstockbystt
Topics
- Understanding Equity Trees
- Computing Equity Instrument Sensitivities
- Creating Instruments or Properties
- Graphical Representation of Equity Derivative Trees
- Pricing European Call Options Using Different Equity Models
- Pricing Asian Options
- Use treeviewer to Examine HWTree and PriceTree When Pricing European Callable Bond
- Supported Equity Derivative Functions
- Supported Energy Derivative Functions
- Supported Interest-Rate Instrument Functions
- Mapping Financial Instruments Toolbox Functions for Equity, Commodity, FX Instrument Objects