## Option pricing Functions EuropeanOption <- function(type, underlying, strike, dividendYield, riskFreeRate, maturity, volatility) { UseMethod("EuropeanOption") } EuropeanOption.default <- function(type, underlying, strike, dividendYield, riskFreeRate, maturity, volatility) { type <- match.arg(type, c("call", "put")) val <- europeanOptionEngine(type, underlying, strike, dividendYield, riskFreeRate, maturity, volatility) class(val) <- c("EuropeanOption", "Option") val } AmericanOption <- function(type, underlying, strike, dividendYield, riskFreeRate, maturity, volatility, timeSteps=150, gridPoints=149, engine="BaroneAdesiWhaley") { UseMethod("AmericanOption") } AmericanOption.default <- function(type, underlying, strike, dividendYield, riskFreeRate, maturity, volatility, timeSteps=150, gridPoints=149, engine="BaroneAdesiWhaley") { type <- match.arg(type, c("call", "put")) engine <- match.arg(engine, c("BaroneAdesiWhaley", "CrankNicolson")) val <- americanOptionEngine(type, underlying, strike, dividendYield, riskFreeRate, maturity, volatility, timeSteps, gridPoints, engine) class(val) <- c("AmericanOption","Option") val } BinaryOption <- function(binType, type, excType, underlying, strike, dividendYield, riskFreeRate, maturity, volatility, cashPayoff) { UseMethod("BinaryOption") } BinaryOption.default <- function(binType, type, excType, underlying, strike, dividendYield, riskFreeRate, maturity, volatility, cashPayoff) { type <- match.arg(type, c("call", "put")) binType <- match.arg(binType, c("cash", "asset", "gap")) excType <- match.arg(excType, c("american", "european")) val <- binaryOptionEngine(binType, type, excType, underlying, strike, dividendYield, riskFreeRate, maturity, volatility, cashPayoff) class(val) <- c("BinaryOption", "Option") val } BarrierOption <- function(barrType, type, underlying, strike, dividendYield, riskFreeRate, maturity, volatility, barrier, rebate=0.0) { UseMethod("BarrierOption") } BarrierOption.default <- function(barrType, type, underlying, strike, dividendYield, riskFreeRate, maturity, volatility, barrier, rebate=0.0) { type <- match.arg(type, c("call", "put")) barrType <- match.arg(barrType, c("downin", "upin", "downout", "upout")) val <- barrierOptionEngine(barrType, type, underlying, strike, dividendYield, riskFreeRate, maturity, volatility, barrier, rebate) class(val) <- c("BarrierOption", "Option") val } plot.Option <- function(x, ...) { warning("No plotting available for class", class(x)[1],"\n") invisible(x) } print.Option <- function(x, digits=4, ...) { cat("Concise summary of valuation for", class(x)[1], "\n") print(round(unlist(x[1:7]), digits)) invisible(x) } summary.Option <- function(object, digits=4, ...) { cat("Detailed summary of valuation for", class(object)[1], "\n") print(round(unlist(object[1:7]), digits)) cat("with parameters\n") print(unlist(object[["parameters"]])) invisible(object) }