AffineSwaption {RQuantLib} | R Documentation |
Affine swaption valuation using several short-rate models
Description
AffineSwaption
prices a swaption with specified
strike and maturity (in years), after calibrating the selected
affine short-rate model to an input swaption volatility matrix. Swaption
maturities are in years down the rows, and swap tenors are in years
along the columns, in the usual fashion. It is assumed that the
swaption is
exercisable at the start of the swap if params$european
flag is set to TRUE
or
on each reset date (Bermudan) of the underlying swap if params$european
flag is
set to FALSE
.
Usage
AffineSwaption(params, ts, swaptionMaturities, swapTenors,
volMatrix,legparams)
Arguments
params |
A list specifying the
| ||||||||
ts |
A term structure built with DiscountCurve is required. See the
help page for | ||||||||
swaptionMaturities |
A vector containing the swaption maturities associated with the rows of the swaption volatility matrix. | ||||||||
swapTenors |
A vector containing the underlying swap tenors associated with the columns of the swaption volatility matrix. | ||||||||
volMatrix |
The swaption volatility matrix. Must be a 2D matrix stored by rows. See the example below. | ||||||||
legparams |
A list specifying the |
Details
This function is based on QuantLib
Version 0.3.10. It
introduces support for fixed-income instruments in RQuantLib
.
At present only a small number of the many parameters that can be set
in QuantLib
are exposed by this function. Some of the
hard-coded parameters that apply to the current version include:
day-count conventions, fixing days (2), index (Euribor),
fixed leg frequency (annual), and floating leg frequency
(semi-annual). Also, it is assumed that the swaption
volatility matrix corresponds to expiration dates and tenors that are
measured in years (a 6-month expiration date is not currently
supported, for example).
Given the number of parameters that must be specified and the care with which they must be specified (with no defaults), it is not practical to use this function in the usual interactive fashion.
The simplest approach is simply to save the
example below to a file, edit as desired, and source
the result.
Alternatively, the input commands can be kept in a script file
(under Windows) or an Emacs/ESS session (under Linux), and selected
parts of the script can be executed in the usual way.
Fortunately, the C++ exception mechanism seems to work well with the R
interface, and QuantLib
exceptions are propagated back to the
R user, usually with a message that indicates what went wrong. (The
first part of the message contains technical information about the
precise location of the problem in the QuantLib
code. Scroll to
the end to find information that is meaningful to the R user.)
Value
AffineSwaption
returns a list containing calibrated model
paramters (what parameters are returned depends on the model
selected) along with:
NPV |
NPV of swaption in basis points (actual price
equals |
ATMStrike |
At-the-money strike |
params |
Input parameter list |
Author(s)
Terry Leitch
References
Brigo, D. and Mercurio, F. (2001) Interest Rate Models: Theory and Practice, Springer-Verlag, New York.
For information about QuantLib
see https://www.quantlib.org/.
For information about RQuantLib
see
http://dirk.eddelbuettel.com/code/rquantlib.html.
See Also
Examples
if (.Platform$OS.type != "windows" && .Platform$r_arch != "i386") {
## Not run:
# This data was generated to match the original quantlib example for Bermudan Swaption
params <- list(tradeDate=as.Date('2016-2-15'),
settleDate=as.Date('2016-2-17'),
startDate=as.Date('2017-2-17'),
maturity=as.Date('2022-2-17'),
payFixed=TRUE,
european=FALSE,
dt=.25,
strike=.06,
method="G2Analytic",
interpWhat="discount",
interpHow="loglinear")
# Market data used to construct the term structure of interest rates
tsQuotes <- list(d1w =0.0382,
d1m =0.0372,
fut1=96.2875,
fut2=96.7875,
fut3=96.9875,
fut4=96.6875,
fut5=96.4875,
fut6=96.3875,
fut7=96.2875,
fut8=96.0875,
s3y =0.0398,
s5y =0.0443,
s10y =0.05165,
s15y =0.055175)
# Swaption volatility matrix with corresponding maturities and tenors
swaptionMaturities <- c(1,2,3,4,5)
swapTenors <- c(1,2,3,4,5)
volMatrix <- matrix(
c(0.1490, 0.1340, 0.1228, 0.1189, 0.1148,
0.1290, 0.1201, 0.1146, 0.1108, 0.1040,
0.1149, 0.1112, 0.1070, 0.1010, 0.0957,
0.1047, 0.1021, 0.0980, 0.0951, 0.1270,
0.1000, 0.0950, 0.0900, 0.1230, 0.1160),
ncol=5, byrow=TRUE)
legparams=list(dayCounter="Thirty360",
fixFreq="Annual",
floatFreq="Semiannual")
setEvaluationDate(as.Date("2016-2-16"))
times<-times <- seq(0,14.75,.25)
dcurve <- DiscountCurve(params, tsQuotes, times=times,legparams)
# Price the Bermudan swaption
pricing <- AffineSwaption(params, dcurve,swaptionMaturities, swapTenors, volMatrix,legparams)
summary(pricing)
## End(Not run)
}