R : Copyright 2005, The R Foundation for Statistical Computing Version 2.1.1 (2005-06-20), ISBN 3-900051-07-0 R is free software and comes with ABSOLUTELY NO WARRANTY. You are welcome to redistribute it under certain conditions. Type 'license()' or 'licence()' for distribution details. R is a collaborative project with many contributors. Type 'contributors()' for more information and 'citation()' on how to cite R or R packages in publications. Type 'demo()' for some demos, 'help()' for on-line help, or 'help.start()' for a HTML browser interface to help. Type 'q()' to quit R. > ### *
> ### > attach(NULL, name = "CheckExEnv") > assign(".CheckExEnv", as.environment(2), pos = length(search())) # base > ## add some hooks to label plot pages for base and grid graphics > setHook("plot.new", ".newplot.hook") > setHook("persp", ".newplot.hook") > setHook("grid.newpage", ".gridplot.hook") > > assign("cleanEx", + function(env = .GlobalEnv) { + rm(list = ls(envir = env, all.names = TRUE), envir = env) + RNGkind("default", "default") + set.seed(1) + options(warn = 1) + delayedAssign("T", stop("T used instead of TRUE"), + assign.env = .CheckExEnv) + delayedAssign("F", stop("F used instead of FALSE"), + assign.env = .CheckExEnv) + sch <- search() + newitems <- sch[! sch %in% .oldSearch] + for(item in rev(newitems)) + eval(substitute(detach(item), list(item=item))) + missitems <- .oldSearch[! .oldSearch %in% sch] + if(length(missitems)) + warning("items ", paste(missitems, collapse=", "), + " have been removed from the search path") + }, + env = .CheckExEnv) > assign("..nameEx", "__{must remake R-ex/*.R}__", env = .CheckExEnv) # for now > assign("ptime", proc.time(), env = .CheckExEnv) > grDevices::postscript("fOptions-Examples.ps") > assign("par.postscript", graphics::par(no.readonly = TRUE), env = .CheckExEnv) > options(contrasts = c(unordered = "contr.treatment", ordered = "contr.poly")) > options(warn = 1) > library('fOptions') Loading required package: fBasics Rmetrics, (C) 1999-2005, Diethelm Wuertz, GPL fBasics: Markets, Basic Statistics, Date and Time Loading required package: fCalendar Rmetrics, (C) 1999-2005, Diethelm Wuertz, GPL fCalendar: Markets, Basic Statistics, Date and Time Loading required package: fSeries Rmetrics, (C) 1999-2005, Diethelm Wuertz, GPL fSeries: The Dynamical Process Behind Financial Markets Rmetrics, (C) 1999-2004, Diethelm Wuertz, GPL fOptions: Valuation of Options > > assign(".oldSearch", search(), env = .CheckExEnv) > assign(".oldNS", loadedNamespaces(), env = .CheckExEnv) > cleanEx(); ..nameEx <- "A1-PlainVanillaOptions" > > ### * A1-PlainVanillaOptions > > flush(stderr()); flush(stdout()) > > ### Name: PlainVanillaOptions > ### Title: Valuation of Plain Vanilla Options > ### Aliases: PlainVanillaOptions fOPTION fOPTION-class GBSOption > ### GBSCharacteristics BlackScholesOption GBSGreeks GBSVolatility > ### Black76Option MiltersenSchwartzOption NDF CND CBND print.option > ### summary.option print.fOPTION summary.fOPTION > ### Keywords: math > > ### ** Examples > > ## SOURCE("fBasics.A0-SPlusCompatibility") > ## SOURCE("fOptions.A1-PlainVanillaOptions") > > ## All the examples are from Haug's Option Guide (1997) > > ## CHAPTER 1.1: ANALYTICAL FORMULAS FOR EUROPEAN OPTIONS: > > ## Black Scholes Option [Haug 1.1.1] > xmpOptions("\nStart: Generalized Black Scholes Option > ") > GBSOption(TypeFlag = "c", S = 60, X = 65, Time = 1/4, r = 0.08, + b = 0.08, sigma = 0.30) Title: Black Scholes Option Valuation Call: GBSOption(TypeFlag = "c", S = 60, X = 65, Time = 1/4, r = 0.08, b = 0.08, sigma = 0.3) Parameters: Value: TypeFlag c S 60 X 65 Time 0.25 r 0.08 b 0.08 sigma 0.3 Option Price: 2.133372 Description: Wed Jul 13 14:09:36 2005 > > ## European Option on a Stock with Cash Dividends [Haug 1.1.2] > xmpOptions("\nNext: Stock Option with Cash Dividends > ") > S0 = 100; r = 0.10; D1 = D2 = 2; t1 = 1/4; t2 = 1/2 > S = S0 - 2*exp(-r*t1) - 2*exp(-r*t2) > GBSOption(TypeFlag = "c", S = S, X = 90, Time = 3/4, r = r, b = r, + sigma = 0.25) Title: Black Scholes Option Valuation Call: GBSOption(TypeFlag = "c", S = S, X = 90, Time = 3/4, r = r, b = r, sigma = 0.25) Parameters: Value: TypeFlag c S 96.146921326942 X 90 Time 0.75 r 0.1 b 0.1 sigma 0.25 Option Price: 15.64651 Description: Wed Jul 13 14:09:36 2005 > > ## Options on Stock Indexes [Haug 1.2.3] > xmpOptions("\nNext: Options on Stock Indexes > ") > GBSOption(TypeFlag = "p", S = 100, X = 95, Time = 1/2, r = 0.10, + b = 0.10-0.05, sigma = 0.20) Title: Black Scholes Option Valuation Call: GBSOption(TypeFlag = "p", S = 100, X = 95, Time = 1/2, r = 0.1, b = 0.1 - 0.05, sigma = 0.2) Parameters: Value: TypeFlag p S 100 X 95 Time 0.5 r 0.1 b 0.05 sigma 0.2 Option Price: 2.464794 Description: Wed Jul 13 14:09:36 2005 > > ## Option on Futures [Haug 1.1.4] > xmpOptions("\nNext: Option on Futures > ") > FuturesPrice = 19 > GBSOption(TypeFlag = "c", S = FuturesPrice, X = 19, Time = 3/4, + r = 0.10, b = 0, sigma = 0.28) Title: Black Scholes Option Valuation Call: GBSOption(TypeFlag = "c", S = FuturesPrice, X = 19, Time = 3/4, r = 0.1, b = 0, sigma = 0.28) Parameters: Value: TypeFlag c S 19 X 19 Time 0.75 r 0.1 b 0 sigma 0.28 Option Price: 1.701052 Description: Wed Jul 13 14:09:36 2005 > > ## Currency Option [Haug 1.1.5] > xmpOptions("\nNext: Currency Option > ") > r = 0.06; rf = 0.08 > GBSOption(TypeFlag = "c", S = 1.5600, X = 1.6000, + Time = 1/2, r = 0.06, b = 0.06-0.08, sigma = 0.12) Title: Black Scholes Option Valuation Call: GBSOption(TypeFlag = "c", S = 1.56, X = 1.6, Time = 1/2, r = 0.06, b = 0.06 - 0.08, sigma = 0.12) Parameters: Value: TypeFlag c S 1.56 X 1.6 Time 0.5 r 0.06 b -0.02 sigma 0.12 Option Price: 0.02909931 Description: Wed Jul 13 14:09:36 2005 > > ## Delta of GBS Option [Haug 1.3.1] > xmpOptions("\nNext: Delta of GBS Option > ") > GBSGreeks(Selection = "delta", TypeFlag = "c", S = 105, X = 100, + Time = 1/2, r = 0.10, b = 0, sigma = 0.36) [1] 0.5946286 > > ## Gamma of GBS Option [Haug 1.3.3] > xmpOptions("\nNext: Gamma of GBS Option > ") > GBSGreeks(Selection = "gamma", TypeFlag = "c", S = 55, X = 60, + Time = 0.75, r = 0.10, b = 0.10, sigma = 0.30) [1] 0.02782116 > > ## Vega of GBS Option [Haug 1.3.4] > xmpOptions("\nNext: Vega of GBS Option > ") > GBSGreeks(Selection = "vega", TypeFlag = "c", S = 55, X = 60, + Time = 0.75, r = 0.10, b = 0.10, sigma = 0.30) [1] 18.93578 > > ## Theta of GBS Option [Haug 1.3.5] > xmpOptions("\nNext: Theta of GBS Option > ") > GBSGreeks(Selection = "theta", TypeFlag = "p", S = 430, X = 405, + Time = 0.0833, r = 0.07, b = 0.07-0.05, sigma = 0.20) [1] -31.19237 > > ## Rho of GBS Option [Haug 1.3.5] > xmpOptions("\nNext: Rho of GBS Option > ") > GBSGreeks(Selection = "rho", TypeFlag = "c", S = 72, X = 75, + Time = 1, r = 0.09, b = 0.09, sigma = 0.19) [1] 38.73251 > > ## CHAPTER 1.3 OPTIONS SENSITIVITIES: > > ## The Generalized Black Scholes Option Formula > xmpOptions("\nNext: Generalized Black Scholes Formula > ") > GBSCharacteristics(TypeFlag = "p", S = 1.5600, X = 1.6000, + Time = 1, r = 0.09, b = 0.09, sigma = 0.19) $premium [1] 0.07205789 $delta [1] -0.3316243 $theta [1] -0.0007305364 $vega [1] 0.566061 $rho [1] -0.5893917 $lambda [1] -7.17942 $gamma [1] 1.224223 > > ## CHAPTER 1.5: RECENT DEVELOPMENTS IN COMMODITY OPTIONS > > ## Miltersen Schwartz Option vs. Black76 Option on Futures: > xmpOptions("\nNext: Miltersen Schwartz Option > ") > MiltersenSchwartzOption(TypeFlag = "c", Pt = exp(-0.05/4), FT = 95, + X = 80, time = 1/4, Time = 1/2, sigmaS = 0.2660, sigmaE = 0.2490, + sigmaF = 0.0096, rhoSE = 0.805, rhoSF = 0.0805, rhoEF = 0.1243, + KappaE = 1.045, KappaF = 0.200) Title: Miltersen Schwartz Option Valuation Call: MiltersenSchwartzOption(TypeFlag = "c", Pt = exp(-0.05/4), FT = 95, X = 80, time = 1/4, Time = 1/2, sigmaS = 0.266, sigmaE = 0.249, sigmaF = 0.0096, rhoSE = 0.805, rhoSF = 0.0805, rhoEF = 0.1243, KappaE = 1.045, KappaF = 0.2) Parameters: Value: TypeFlag c Pt 0.987577800493881 FT 95 X 80 time 0.25 Time 0.5 sigmaS 0.266 sigmaE 0.249 sigmaF 0.0096 rhoSE 0.805 rhoSF 0.0805 rhoEF 0.1243 KappaE 1.045 KappaF 0.2 Option Price: 15.00468 Description: Wed Jul 13 14:09:36 2005 > Black76Option(TypeFlag = "c", FT = 95, X = 80, Time = 1/2, r = 0.05, + sigma = 0.266) Title: Black 76 Option Valuation Call: Black76Option(TypeFlag = "c", FT = 95, X = 80, Time = 1/2, r = 0.05, sigma = 0.266) Parameters: Value: TypeFlag c FT 95 X 80 Time 0.5 r 0.05 sigma 0.266 Option Price: 16.19172 Description: Wed Jul 13 14:09:36 2005 > > > > > cleanEx(); ..nameEx <- "A2-BasicAmericanOptions" > > ### * A2-BasicAmericanOptions > > flush(stderr()); flush(stdout()) > > ### Name: BasicAmericanOptions > ### Title: Valuation of Basic American Options > ### Aliases: BasicAmericanOptions RollGeskeWhaleyOption > ### BAWAmericanApproxOption BSAmericanApproxOption > ### Keywords: math > > ### ** Examples > > ## SOURCE("fBasics.A0-SPlusCompatibility") > ## SOURCE("fOptions.A1-PlainVanillaOptions") > ## SOURCE("fOptions.A2-BasicAmericanOptions") > > ## All the examples are from Haug's Option Guide (1997) > > ## CHAPTER 1.4: ANALYTICAL MODELS FOR AMERICAN OPTIONS > > ## Roll-Geske-Whaley American Calls on Dividend Paying > # Stocks [Haug 1.4.1] > xmpOptions("\nStart: Roll-Geske-Whaley > ") > RollGeskeWhaleyOption(S = 80, X = 82, time1 = 1/4, + Time2 = 1/3, r = 0.06, D = 4, sigma = 0.30) Title: Roll Geske Whaley Option Call: RollGeskeWhaleyOption(S = 80, X = 82, time1 = 1/4, Time2 = 1/3, r = 0.06, D = 4, sigma = 0.3) Parameters: Value: S 80 X 82 time1 0.25 Time2 0.333333333333333 r 0.06 D 4 sigma 0.3 Option Price: 4.38603 Description: Wed Jul 13 14:09:36 2005 > > ## Barone-Adesi and Whaley Approximation for American > # Options [Haug 1.4.2] vs. Black76 Option on Futures: > xmpOptions("\nNext: BAW Approximation > ") > BAWAmericanApproxOption(TypeFlag = "p", S = 100, + X = 100, Time = 0.5, r = 0.10, b = 0, sigma = 0.25) Title: BAW American Approximated Option Call: BAWAmericanApproxOption(TypeFlag = "p", S = 100, X = 100, Time = 0.5, r = 0.1, b = 0, sigma = 0.25) Parameters: Value: TypeFlag p S 100 X 100 Time 0.5 r 0.1 b 0 sigma 0.25 Option Price: 6.801362 Description: Wed Jul 13 14:09:37 2005 > Black76Option(TypeFlag = "c", FT = 100, X = 100, + Time = 0.5, r = 0.10, sigma = 0.25) Title: Black 76 Option Valuation Call: Black76Option(TypeFlag = "c", FT = 100, X = 100, Time = 0.5, r = 0.1, sigma = 0.25) Parameters: Value: TypeFlag c FT 100 X 100 Time 0.5 r 0.1 sigma 0.25 Option Price: 6.69971 Description: Wed Jul 13 14:09:37 2005 > > ## Bjerksund and Stensland Approximation for American Options: > xmpOptions("\nNext: BS Approximation > ") > BSAmericanApproxOption(TypeFlag = "c", S = 42, X = 40, + Time = 0.75, r = 0.04, b = 0.04-0.08, sigma = 0.35) Title: BS American Approximated Option Call: BSAmericanApproxOption(TypeFlag = "c", S = 42, X = 40, Time = 0.75, r = 0.04, b = 0.04 - 0.08, sigma = 0.35) Parameters: Value: TypeFlag c S 42 X 40 Time 0.75 r 0.04 b -0.04 sigma 0.35 TrigerPrice 57.5994499306841 Option Price: 5.270405 Description: Wed Jul 13 14:09:37 2005 > > > > cleanEx(); ..nameEx <- "A3-BinomialTreeOptions" > > ### * A3-BinomialTreeOptions > > flush(stderr()); flush(stdout()) > > ### Name: BinomialTreeOptions > ### Title: Binomial Tree Option Model > ### Aliases: BinomialTreeOptions CRRBinomialTreeOption JRBinomialTreeOption > ### TIANBinomialTreeOption BinomialTreeOption BinomialTreePlot > ### Keywords: math > > ### ** Examples > > ## SOURCE("fBasics.A0-SPlusCompatibility") > ## SOURCE("fOptions.A1-PlainVanillaOptions") > ## SOURCE("fOptions.A3-BinomialTreeOptions") > > ## Cox-Ross-Rubinstein Binomial Tree Option Model: > # Example 14.1 from Hull's Book: > xmpOptions("\nStart: CRR Binomial Tree > ") > CRRBinomialTreeOption(TypeFlag = "pa", S = 50, X = 50, + Time = 5/12, r = 0.1, b = 0.1, sigma = 0.4, n = 5) Title: CRR Binomial Tree Option Call: CRRBinomialTreeOption(TypeFlag = "pa", S = 50, X = 50, Time = 5/12, r = 0.1, b = 0.1, sigma = 0.4, n = 5) Parameters: Value: TypeFlag pa S 50 X 50 Time 0.416666666666667 r 0.1 b 0.1 sigma 0.4 n 5 Option Price: 4.488459 Description: Wed Jul 13 14:09:37 2005 > # Example 3.1.1 from Haug's Book: > CRRBinomialTreeOption(TypeFlag = "pa", S = 100, X = 95, + Time = 0.5, r = 0.08, b = 0.08, sigma = 0.3, n = 5) Title: CRR Binomial Tree Option Call: CRRBinomialTreeOption(TypeFlag = "pa", S = 100, X = 95, Time = 0.5, r = 0.08, b = 0.08, sigma = 0.3, n = 5) Parameters: Value: TypeFlag pa S 100 X 95 Time 0.5 r 0.08 b 0.08 sigma 0.3 n 5 Option Price: 4.919211 Description: Wed Jul 13 14:09:37 2005 > # A European Call - Compare with Black Scholes: > CRRBinomialTreeOption(TypeFlag = "ce", S = 100, X = 100, + Time = 1, r = 0.1, b = 0.1, sigma = 0.25, n = 50) Title: CRR Binomial Tree Option Call: CRRBinomialTreeOption(TypeFlag = "ce", S = 100, X = 100, Time = 1, r = 0.1, b = 0.1, sigma = 0.25, n = 50) Parameters: Value: TypeFlag ce S 100 X 100 Time 1 r 0.1 b 0.1 sigma 0.25 n 50 Option Price: 14.92529 Description: Wed Jul 13 14:09:37 2005 > GBSOption(TypeFlag = "c", S = 100, X = 100, + Time = 1, r = 0.1, b = 0.1, sigma = 0.25)@price [1] 14.97580 > > ## CRR - JR - TIAN Model Comparison: > # Hull's Example as Function of "n": > xmpOptions("\nNext: Convergence Behavior > ") > par(mfrow = c(2, 1), cex = 0.7) > steps = 50 > CRROptionValue = JROptionValue = TIANOptionValue = + rep(NA, times = steps) > for (n in 3:steps) { + CRROptionValue[n] = CRRBinomialTreeOption(TypeFlag = "pa", S = 50, + X = 50, Time = 0.4167, r = 0.1, b = 0.1, sigma = 0.4, n = n)@price + JROptionValue[n] = JRBinomialTreeOption(TypeFlag = "pa", S = 50, + X = 50, Time = 0.4167, r = 0.1, b = 0.1, sigma = 0.4, n = n)@price + TIANOptionValue[n] = TIANBinomialTreeOption(TypeFlag = "pa", S = 50, + X = 50, Time = 0.4167, r = 0.1, b = 0.1, sigma = 0.4, n = n)@price + } > plot(CRROptionValue[3:steps], type = "l", col = "red", ylab = "Option Value") > lines(JROptionValue[3:steps], col = "green") > lines(TIANOptionValue[3:steps], col = "blue") > # Add Result from BAW Approximation: > BAWValue = BAWAmericanApproxOption(TypeFlag = "p", S = 50, X = 50, + Time = 0.4167, r = 0.1, b = 0.1, sigma = 0.4)@price > abline(h = BAWValue, lty = 3) > title(main = "Convergence") > data.frame(CRROptionValue, JROptionValue, TIANOptionValue) CRROptionValue JROptionValue TIANOptionValue 1 NA NA NA 2 NA NA NA 3 4.644221 4.658215 4.250039 4 4.138064 4.147067 4.436720 5 4.488599 4.498538 4.118174 6 4.174600 4.182133 4.420335 7 4.440592 4.447394 4.153362 8 4.208285 4.213683 4.376841 9 4.404249 4.407809 4.219837 10 4.220215 4.224464 4.356222 11 4.383327 4.387160 4.265722 12 4.232302 4.239263 4.327229 13 4.370110 4.372616 4.288170 14 4.240825 4.248576 4.304847 15 4.357657 4.359191 4.306384 16 4.245087 4.253081 4.288338 17 4.348818 4.349603 4.314806 18 4.249080 4.257725 4.272137 19 4.342130 4.343514 4.315981 20 4.252509 4.262715 4.255790 21 4.336482 4.338156 4.318543 22 4.255462 4.265471 4.244420 23 4.331761 4.333151 4.319010 24 4.257848 4.267585 4.244907 25 4.328345 4.329232 4.316251 26 4.260138 4.269382 4.254040 27 4.325388 4.325936 4.311505 28 4.262036 4.271401 4.261820 29 4.322574 4.323182 4.309124 30 4.263565 4.272796 4.271949 31 4.320010 4.320505 4.306223 32 4.264729 4.274120 4.279511 33 4.317817 4.318179 4.302398 34 4.265834 4.275367 4.284229 35 4.315989 4.316346 4.297096 36 4.266951 4.276686 4.287908 37 4.314409 4.314752 4.292959 38 4.268021 4.277666 4.291718 39 4.312930 4.313071 4.289362 40 4.268896 4.278398 4.295093 41 4.311560 4.311546 4.285607 42 4.269617 4.278981 4.297283 43 4.310265 4.310177 4.281393 44 4.270281 4.279516 4.298161 45 4.309224 4.308935 4.276739 46 4.271009 4.280033 4.298265 47 4.308268 4.307800 4.272384 48 4.271626 4.280648 4.299010 49 4.307313 4.306856 4.268842 50 4.272160 4.281069 4.299600 > > ## Plot CRR Option Tree: > # Again Hull's Example: > xmpOptions("\nNext: Plot CRR Option Tree > ") > CRRTree = BinomialTreeOption(TypeFlag = "pa", S = 50, X = 50, + Time = 0.4167, r = 0.1, b = 0.1, sigma = 0.4, n = 5) > BinomialTreePlot(CRRTree, dy = 1, cex = 0.8, ylim = c(-6, 7), + xlab = "n", ylab = "Option Value") > title(main = "Option Tree") > > > > > graphics::par(get("par.postscript", env = .CheckExEnv)) > cleanEx(); ..nameEx <- "B1-MultipleExercisesOptions" > > ### * B1-MultipleExercisesOptions > > flush(stderr()); flush(stdout()) > > ### Name: MultipleExercisesOptions > ### Title: Valuation of Mutiple Exercises Options > ### Aliases: MultipleExercisesOptions ExecutiveStockOption > ### ForwardStartOption RatchetOption TimeSwitchOption SimpleChooserOption > ### ComplexChooserOption OptionOnOption WriterExtendibleOption > ### HolderExtendibleOption > ### Keywords: math > > ### ** Examples > > ## SOURCE("fBasics.A0-SPlusCompatibility") > ## SOURCE("fOptions.A1-PlainVanillaOptions") > ## SOURCE("fOptions.B1-MultExercisesOptions") > > ## Examples from Chapter 2.1 - 2.7 in E.G. Haug's Option Guide (1997) > > ## ExecutiveStockOption [2.1]: > xmpOptions("\nStart: Executive Stock Option > ") > ExecutiveStockOption(TypeFlag = "c", S = 60, X = 64, Time = 2, + r = 0.07, b = 0.07-0.03, sigma = 0.38, lambda = 0.15) Title: Executive Stock Option Valuation Call: ExecutiveStockOption(TypeFlag = "c", S = 60, X = 64, Time = 2, r = 0.07, b = 0.07 - 0.03, sigma = 0.38, lambda = 0.15) Parameters: Value: TypeFlag c S 60 X 64 Time 2 r 0.07 b 0.04 sigma 0.38 lambda 0.15 Option Price: 9.124388 Description: Wed Jul 13 14:09:40 2005 > > ## ForwardStartOption [2.2]: > xmpOptions("\nNext: Forward Start Option > ") > ForwardStartOption(TypeFlag = "c", S = 60, alpha = 1.1, + time1 = 1, Time2 = 1/4, r = 0.08, b = 0.08-0.04, sigma = 0.30) Title: Forward Start Option Valuation Call: ForwardStartOption(TypeFlag = "c", S = 60, alpha = 1.1, time1 = 1, Time2 = 1/4, r = 0.08, b = 0.08 - 0.04, sigma = 0.3) Parameters: Value: TypeFlag c S 60 alpha 1.1 time1 1 Time2 0.25 r 0.08 b 0.04 sigma 0.3 Option Price: 4.406449 Description: Wed Jul 13 14:09:40 2005 > > ## Ratchet Option [2.3]: > xmpOptions("\nNext: Ratchet Option > ") > RatchetOption(TypeFlag = "c", S = 60, alpha = 1.1, time1 = c(1.00, 0.75), + Time2 = c(0.75, 0.50), r = 0.08, b = 0.04, sigma = 0.30) Title: Ratchet Option Valuation Call: RatchetOption(TypeFlag = "c", S = 60, alpha = 1.1, time1 = c(1, 0.75), Time2 = c(0.75, 0.5), r = 0.08, b = 0.04, sigma = 0.3) Parameters: Value: TypeFlag c S 60 alpha 1.1 time11 1 time12 0.75 Time21 0.75 Time22 0.5 r 0.08 b 0.04 sigma 0.3 Option Price: 3.2132 Description: Wed Jul 13 14:09:40 2005 > > ## Time Switch Option [2.4]: > xmpOptions("\nNext: Time Switch Option > ") > TimeSwitchOption(TypeFlag = "c", S = 100, X = 110, Time = 1, + r = 0.06, b = 0.06, sigma = 0.26, A = 5, m = 0, dt = 1/365) Title: Time Switch Option Valuation Call: TimeSwitchOption(TypeFlag = "c", S = 100, X = 110, Time = 1, r = 0.06, b = 0.06, sigma = 0.26, A = 5, m = 0, dt = 1/365) Parameters: Value: TypeFlag c S 100 X 110 Time 1 r 0.06 b 0.06 sigma 0.26 A 5 m 0 d 0.00273972602739726 Option Price: 1.375037 Description: Wed Jul 13 14:09:40 2005 > > ## Simple Chooser Option [2.5.1]: > xmpOptions("\nNext: Simple Chooser Option > ") > SimpleChooserOption(S = 50, X = 50, time1 = 1/4, Time2 = 1/2, + r = 0.08, b = 0.08, sigma = 0.25) Title: Simple Chooser Option Valuation Call: SimpleChooserOption(S = 50, X = 50, time1 = 1/4, Time2 = 1/2, r = 0.08, b = 0.08, sigma = 0.25) Parameters: Value: S 50 X 50 time1 0.25 Time2 0.5 r 0.08 b 0.08 sigma 0.25 Option Price: 6.107073 Description: Wed Jul 13 14:09:40 2005 > > ## Complex Chooser Option [2.5.2]: > xmpOptions("\nNext: Complex Chooser Option > ") > ComplexChooserOption(S = 50, Xc = 55, Xp = 48, Time = 0.25, + Timec = 0.50, Timep = 0.5833, r = 0.10, b = 0.1-0.05, + sigma = 0.35, doprint = TRUE) Critical Value: [1] 51.11561 Title: Complex Chooser Option Valuation Call: ComplexChooserOption(S = 50, Xc = 55, Xp = 48, Time = 0.25, Timec = 0.5, Timep = 0.5833, r = 0.1, b = 0.1 - 0.05, sigma = 0.35, doprint = TRUE) Parameters: Value: S 50 Xc 55 Xp 48 time function (x, ...) Timec 0.5 Timep 0.5833 r 0.1 b 0.05 sigma 0.35 criticalValue 51.1156056231326 Option Price: 6.050727 Description: Wed Jul 13 14:09:40 2005 > > ## Option On Option [2.6]: > xmpOptions("\nNext: Option On Option > ") > OptionOnOption(TypeFlag = "pc", S = 500, X1 = 520, X2 = 50, + time1 = 1/2, Time2 = 1/4, r = 0.08, b = 0.08-0.03, sigma = 0.35) Title: Option On Option Valuation Call: OptionOnOption(TypeFlag = "pc", S = 500, X1 = 520, X2 = 50, time1 = 1/2, Time2 = 1/4, r = 0.08, b = 0.08 - 0.03, sigma = 0.35) Parameters: Value: S 500 X1 520 X2 50 time1 0.5 Time2 0.25 r 0.08 b 0.05 sigma 0.35 criticalValue 538.316546560699 Option Price: 21.19647 Description: Wed Jul 13 14:09:40 2005 > > ## Holder Extendible Option [2.7.1]: > xmpOptions("\nNext: Holder Extendible Option > ") > HolderExtendibleOption(TypeFlag = "c", S = 100, X1 = 100, + X2 = 105, time1 = 0.50, Time2 = 0.75, r = 0.08, b = 0.08, + sigma = 0.25, A = 1) Title: Holder Extendible Option Valuation Call: HolderExtendibleOption(TypeFlag = "c", S = 100, X1 = 100, X2 = 105, time1 = 0.5, Time2 = 0.75, r = 0.08, b = 0.08, sigma = 0.25, A = 1) Parameters: Value: TypeFlag c S 100 X1 100 X2 105 time1 0.5 Time2 0.75 r 0.08 b 0.08 sigma 0.25 A 1 Option Price: 2.729216 Description: Wed Jul 13 14:09:40 2005 > > ## Writer Extendible Option [2.7.2]: > xmpOptions("\nNext: Writer Extendible Option > ") > WriterExtendibleOption(TypeFlag = "c", S = 80, X1 = 90, X2 = 82, + time1 = 0.50, Time2 = 0.75, r = 0.10, b = 0.10, sigma = 0.30) Title: Writer Extendible Option Valuation Call: WriterExtendibleOption(TypeFlag = "c", S = 80, X1 = 90, X2 = 82, time1 = 0.5, Time2 = 0.75, r = 0.1, b = 0.1, sigma = 0.3) Parameters: Value: TypeFlag c S 80 X1 90 X2 82 time1 0.5 Time2 0.75 r 0.1 b 0.1 sigma 0.3 Option Price: 6.823755 Description: Wed Jul 13 14:09:40 2005 > > > > > cleanEx(); ..nameEx <- "B2-MultipleAssetsOptions" > > ### * B2-MultipleAssetsOptions > > flush(stderr()); flush(stdout()) > > ### Name: MultipleAssetsOptions > ### Title: Valuation of Mutiple Assets Options > ### Aliases: MultipleAssetsOptions TwoAssetCorrelationOption > ### EuropeanExchangeOption AmericanExchangeOption > ### ExchangeOnExchangeOption TwoRiskyAssetsOption SpreadApproxOption > ### Keywords: math > > ### ** Examples > > ## SOURCE("fBasics.A0-SPlusCompatibility") > ## SOURCE("fOptions.A1-PlainVanillaOptions") > ## SOURCE("fOptions.B2-MultAssetsOptions") > > ## Examples from Chapter 2.8 in E.G. Haug's Option Guide (1997) > > ## Two Asset Correlation Options [2.8.1]: > xmpOptions("\nStart: Two Asset Correlation Option > ") > TwoAssetCorrelationOption(TypeFlag = "c", S1 = 52, S2 = 65, + X1 = 50, X2 = 70, Time = 0.5, r = 0.10, b1 = 0.10, b2 = 0.10, + sigma1 = 0.2, sigma2 = 0.3, rho = 0.75) Title: Two Asset Correlation Option Call: TwoAssetCorrelationOption(TypeFlag = "c", S1 = 52, S2 = 65, X1 = 50, X2 = 70, Time = 0.5, r = 0.1, b1 = 0.1, b2 = 0.1, sigma1 = 0.2, sigma2 = 0.3, rho = 0.75) Parameters: Value: TypeFlag c S1 52 S2 65 X1 50 X2 70 Time 0.5 r 0.1 b1 0.1 b2 0.1 sigma1 0.2 sigma2 0.3 rho 0.75 Option Price: 4.707327 Description: Wed Jul 13 14:09:40 2005 > > ## European Exchange Options [2.8.2]: > xmpOptions("\nNext: European Exchange Option > ") > EuropeanExchangeOption(S1 = 22, S2 = 0.20, Q1 = 1, Q2 = 1, + Time = 0.1, r = 0.1, b1 = 0.04, b2 = 0.06, sigma1 = 0.2, + sigma2 = 0.25, rho = -0.5) Title: European Exchange Option Call: EuropeanExchangeOption(S1 = 22, S2 = 0.2, Q1 = 1, Q2 = 1, Time = 0.1, r = 0.1, b1 = 0.04, b2 = 0.06, sigma1 = 0.2, sigma2 = 0.25, rho = -0.5) Parameters: Value: S1 22 S2 0.2 Q1 1 Q2 1 Time 0.1 r 0.1 b1 0.04 b2 0.06 sigma1 0.2 sigma2 0.25 rho -0.5 Option Price: 21.66919 Description: Wed Jul 13 14:09:40 2005 > > ## American Exchange Options [2.8.2]: > xmpOptions("\nNext: American Exchange Option > ") > AmericanExchangeOption(S1 = 22, S2 = 0.20, Q1 = 1, Q2 = 1, + Time = 0.1, r = 0.1, b1 = 0.04, b2 = 0.06, sigma1 = 0.2, + sigma2 = 0.25, rho = -0.5) Title: American Exchange Option Call: AmericanExchangeOption(S1 = 22, S2 = 0.2, Q1 = 1, Q2 = 1, Time = 0.1, r = 0.1, b1 = 0.04, b2 = 0.06, sigma1 = 0.2, sigma2 = 0.25, rho = -0.5) Parameters: Value: S1 22 s2 0.2 Q1 1 Time 0.1 r 0.1 b1 0.04 b2 0.06 sigma1 0.2 sigma2 0.25 rho -0.5 Option Price: 21.8 Description: Wed Jul 13 14:09:41 2005 > > ## Exchange Options On Exchange Options [2.8.3]: > xmpOptions("\nNext: Exchange On Exchange Option > ") > for (flag in 1:4) print( + ExchangeOnExchangeOption(TypeFlag = as.character(flag), + S1 = 105, S2 = 100, Q = 0.1, time1 = 0.75, Time2 = 1.0, r = 0.1, + b1 = 0.10, b2 = 0.10, sigma1 = 0.20, sigma2 = 0.25, rho = -0.5)) Title: Exchange On Exchange Option Call: ExchangeOnExchangeOption(TypeFlag = as.character(flag), S1 = 105, S2 = 100, Q = 0.1, time1 = 0.75, Time2 = 1, r = 0.1, b1 = 0.1, b2 = 0.1, sigma1 = 0.2, sigma2 = 0.25, rho = -0.5) Parameters: Value: TypeFlag 1 S1 105 S2 100 Q 0.1 time1 0.75 Time2 1 r 0.1 b1 0.1 b2 0.1 sigma1 0.2 sigma2 0.25 rho -0.5 Option Price: 12.63908 Description: Wed Jul 13 14:09:41 2005 Title: Exchange On Exchange Option Call: ExchangeOnExchangeOption(TypeFlag = as.character(flag), S1 = 105, S2 = 100, Q = 0.1, time1 = 0.75, Time2 = 1, r = 0.1, b1 = 0.1, b2 = 0.1, sigma1 = 0.2, sigma2 = 0.25, rho = -0.5) Parameters: Value: TypeFlag 2 S1 105 S2 100 Q 0.1 time1 0.75 Time2 1 r 0.1 b1 0.1 b2 0.1 sigma1 0.2 sigma2 0.25 rho -0.5 Option Price: 4.149207 Description: Wed Jul 13 14:09:41 2005 Title: Exchange On Exchange Option Call: ExchangeOnExchangeOption(TypeFlag = as.character(flag), S1 = 105, S2 = 100, Q = 0.1, time1 = 0.75, Time2 = 1, r = 0.1, b1 = 0.1, b2 = 0.1, sigma1 = 0.2, sigma2 = 0.25, rho = -0.5) Parameters: Value: TypeFlag 3 S1 105 S2 100 Q 0.1 time1 0.75 Time2 1 r 0.1 b1 0.1 b2 0.1 sigma1 0.2 sigma2 0.25 rho -0.5 Option Price: 7.366996 Description: Wed Jul 13 14:09:41 2005 Title: Exchange On Exchange Option Call: ExchangeOnExchangeOption(TypeFlag = as.character(flag), S1 = 105, S2 = 100, Q = 0.1, time1 = 0.75, Time2 = 1, r = 0.1, b1 = 0.1, b2 = 0.1, sigma1 = 0.2, sigma2 = 0.25, rho = -0.5) Parameters: Value: TypeFlag 4 S1 105 S2 100 Q 0.1 time1 0.75 Time2 1 r 0.1 b1 0.1 b2 0.1 sigma1 0.2 sigma2 0.25 rho -0.5 Option Price: 3.877121 Description: Wed Jul 13 14:09:41 2005 > > ## Two Risky Assets Options [2.8.4]: > xmpOptions("\nNext: Two Risky Assets Option > ") > TwoRiskyAssetsOption(TypeFlag = "cmax", S1 = 100, S2 = 105, + X = 98, Time = 0.5, r = 0.05, b1 = -0.01, b2 = -0.04, + sigma1 = 0.11, sigma2 = 0.16, rho = 0.63) Title: Two Risky Assets Option Call: TwoRiskyAssetsOption(TypeFlag = "cmax", S1 = 100, S2 = 105, X = 98, Time = 0.5, r = 0.05, b1 = -0.01, b2 = -0.04, sigma1 = 0.11, sigma2 = 0.16, rho = 0.63) Parameters: Value: TypeFlag cmax S1 100 S2 105 X 98 Time 0.5 r 0.05 b1 -0.01 b2 -0.04 sigma1 0.11 sigma2 0.16 rho 0.63 Option Price: 8.070065 Description: Wed Jul 13 14:09:41 2005 > TwoRiskyAssetsOption(TypeFlag = "pmax", S1 = 100, S2 = 105, + X = 98, Time = 0.5, r = 0.05, b1 = -0.01, b2 = -0.04, + sigma1 = 0.11, sigma2 = 0.16, rho = 0.63) Title: Two Risky Assets Option Call: TwoRiskyAssetsOption(TypeFlag = "pmax", S1 = 100, S2 = 105, X = 98, Time = 0.5, r = 0.05, b1 = -0.01, b2 = -0.04, sigma1 = 0.11, sigma2 = 0.16, rho = 0.63) Parameters: Value: TypeFlag pmax S1 100 S2 105 X 98 Time 0.5 r 0.05 b1 -0.01 b2 -0.04 sigma1 0.11 sigma2 0.16 rho 0.63 Option Price: 1.218085 Description: Wed Jul 13 14:09:41 2005 > > ## Spread-Option Approximation [2.8.5]: > xmpOptions("\nNext: Spread-Option Approximation > ") > SpreadApproxOption(TypeFlag = "c", S1 = 28, S2 = 20, X = 7, + Time = 0.25, r = 0.05, sigma1 = 0.29, sigma2 = 0.36, rho = 0.42) Title: Spread Approx Option Call: SpreadApproxOption(TypeFlag = "c", S1 = 28, S2 = 20, X = 7, Time = 0.25, r = 0.05, sigma1 = 0.29, sigma2 = 0.36, rho = 0.42) Parameters: Value: TypeFlag c S1 28 S2 20 X 7 Time 0.25 r 0.05 sigma1 0.29 sigma2 0.36 rho 0.42 Option Price: 2.167047 Description: Wed Jul 13 14:09:41 2005 > > > > > cleanEx(); ..nameEx <- "B3-LookbackOptions" > > ### * B3-LookbackOptions > > flush(stderr()); flush(stdout()) > > ### Name: LookbackOptions > ### Title: Valuation of Lookback Options > ### Aliases: LookbackOptions FloatingStrikeLookbackOption > ### FixedStrikeLookbackOption PTFloatingStrikeLookbackOption > ### PTFixedStrikeLookbackOption ExtremeSpreadOption > ### Keywords: math > > ### ** Examples > > ## SOURCE("fBasics.A0-SPlusCompatibility") > ## SOURCE("fOptions.A1-PlainVanillaOptions") > ## SOURCE("fOptions.B3-LookbackOptions") > > ## Examples from Chapter 2.9 in E.G. Haug's Option Guide (1997) > > ## Floating Strike Lookback Option [2.9.1]: > xmpOptions("\nStart: Floating Strike Lookback Option > ") > FloatingStrikeLookbackOption(TypeFlag = "c", S = 120, + SMinOrMax = 100, Time = 0.5, r = 0.10, b = 0.10-0.06, + sigma = 0.30) Title: Floating Strike Lookback Option Call: FloatingStrikeLookbackOption(TypeFlag = "c", S = 120, SMinOrMax = 100, Time = 0.5, r = 0.1, b = 0.1 - 0.06, sigma = 0.3) Parameters: Value: TypeFlag c S 120 SMinOrMax 100 Time 0.5 r 0.1 b 0.04 sigma 0.3 Option Price: 25.35334 Description: Wed Jul 13 14:09:41 2005 > > ## Fixed Strike Lookback Option [2.9.2]: > xmpOptions("\nNext: Fixed Strike Lookback Option > ") > FixedStrikeLookbackOption(TypeFlag = "c", S = 100, + SMinOrMax = 100, X = 105, Time = 0.5, r = 0.10, b = 0.10, + sigma = 0.30) Title: Fixed Strike Lookback Option Call: FixedStrikeLookbackOption(TypeFlag = "c", S = 100, SMinOrMax = 100, X = 105, Time = 0.5, r = 0.1, b = 0.1, sigma = 0.3) Parameters: Value: TypeFlag c S 100 SMinOrMax 100 X 105 Time 0.5 r 0.1 b 0.1 sigma 0.3 Option Price: 15.85121 Description: Wed Jul 13 14:09:41 2005 > > ## Partial Time Floating Strike Lookback Option [2.9.3]: > xmpOptions("\nNext: PT Floating Strike Option > ") > PTFloatingStrikeLookbackOption(TypeFlag = "p", S = 90, + SMinOrMax = 90, time1 = 0.5, Time2 = 1, r = 0.06, b = 0.06, + sigma = 0.20, lambda = 1) Title: Partial Time Floating Strike Lookback Option Call: PTFloatingStrikeLookbackOption(TypeFlag = "p", S = 90, SMinOrMax = 90, time1 = 0.5, Time2 = 1, r = 0.06, b = 0.06, sigma = 0.2, lambda = 1) Parameters: Value: TypeFlag p S 90 time1 0.5 Time2 1 r 0.06 b 0.06 sigma 0.2 lambda 1 Option Price: 9.58246 Description: Wed Jul 13 14:09:41 2005 > > ## Partial Time Fixed Strike Lookback Option [2.9.4]: > xmpOptions("\nNext: PT Fixed Strike Lookback Option > ") > PTFixedStrikeLookbackOption(TypeFlag = "c", S = 100, X = 90, + time1 = 0.5, Time2 = 1, r = 0.06, b = 0.06, sigma = 0.20) Title: Partial Time Fixed Strike Lookback Option Call: PTFixedStrikeLookbackOption(TypeFlag = "c", S = 100, X = 90, time1 = 0.5, Time2 = 1, r = 0.06, b = 0.06, sigma = 0.2) Parameters: Value: TypeFlag c S 100 X 90 time1 0.5 Time2 1 r 0.06 b 0.06 sigma 0.2 Option Price: 25.81262 Description: Wed Jul 13 14:09:41 2005 > > ## Extreme Spread Option [2.9.5]: > xmpOptions("\nNext: PT Fixed Strike Lookback Option > ") > ExtremeSpreadOption(TypeFlag = "c", S = 100, SMin = NA, + SMax = 110, time1 = 0.5, Time2 = 1, r = 0.1, b = 0.1, + sigma = 0.30) Title: Extreme Spread Option Call: ExtremeSpreadOption(TypeFlag = "c", S = 100, SMin = NA, SMax = 110, time1 = 0.5, Time2 = 1, r = 0.1, b = 0.1, sigma = 0.3) Parameters: Value: TypeFlag c S 100 SMin SMax 110 time1 0.5 Time2 1 r 0.1 b 0.1 sigma 0.3 Option Price: 10.46681 Description: Wed Jul 13 14:09:41 2005 > ExtremeSpreadOption(TypeFlag = "cr", S = 100, SMin = 90, + SMax = NA, time1 = 0.5, Time2 = 1, r = 0.1, b = 0.1, + sigma = 0.30) Title: Extreme Spread Option Call: ExtremeSpreadOption(TypeFlag = "cr", S = 100, SMin = 90, SMax = NA, time1 = 0.5, Time2 = 1, r = 0.1, b = 0.1, sigma = 0.3) Parameters: Value: TypeFlag cr S 100 SMin 90 SMax time1 0.5 Time2 1 r 0.1 b 0.1 sigma 0.3 Option Price: 9.347113 Description: Wed Jul 13 14:09:41 2005 > > > > > cleanEx(); ..nameEx <- "B4-BarrierOptions" > > ### * B4-BarrierOptions > > flush(stderr()); flush(stdout()) > > ### Name: BarrierOptions > ### Title: Valuation of Barrier Options > ### Aliases: BarrierOptions StandardBarrierOption DoubleBarrierOption > ### PTSingleAssetBarrierOption TwoAssetBarrierOption > ### PTTwoAssetBarrierOption LookBarrierOption DiscreteBarrierOption > ### SoftBarrierOption > ### Keywords: math > > ### ** Examples > > ## SOURCE("fBasics.A0-SPlusCompatibility") > ## SOURCE("fOptions.A1-PlainVanillaOptions") > ## SOURCE("fOptions.B4-BarrierOptions") > > ## Examples from Chapter 2.10 in E.G. Haug's Option Guide (1997) > > ## Standard Barrier Option [2.10.1]: > xmpOptions("\nStart: Down-and-Out Barrier Option > ") > # down-and-out Barrier Call > StandardBarrierOption(TypeFlag = "cdo", S = 100, X = 90, + H = 95, K = 3, Time = 0.5, r = 0.08, b = 0.04, sigma = 0.25) Title: Standard Barrier Option Call: StandardBarrierOption(TypeFlag = "cdo", S = 100, X = 90, H = 95, K = 3, Time = 0.5, r = 0.08, b = 0.04, sigma = 0.25) Parameters: Value: TypeFlag cdo S 100 X 90 H 95 K 3 Time 0.5 r 0.08 b 0.04 sigma 0.25 Option Price: 9.024584 Description: Wed Jul 13 14:09:41 2005 > > ## Double Barrier Option [2.10.2]: > xmpOptions("\nNext: Double Barrier Option > ") > DoubleBarrierOption(TypeFlag = "co", S = 100, X = 100, L = 50, + U = 150, Time = 0.25, r = 0.10, b = 0.10, sigma = 0.15, + delta1 = -0.1, delta2 = 0.1) Title: Double Barrier Option Call: DoubleBarrierOption(TypeFlag = "co", S = 100, X = 100, L = 50, U = 150, Time = 0.25, r = 0.1, b = 0.1, sigma = 0.15, delta1 = -0.1, delta2 = 0.1) Parameters: Value: TypeFlag co S 100 X 100 L 50 U 150 Time 0.25 r 0.1 b 0.1 sigma 0.15 delta1 -0.1 delta2 0.1 Option Price: 4.351415 Description: Wed Jul 13 14:09:41 2005 > > ## Partial Time Single-Asset Barrier Option [2.10.3]: > xmpOptions("\nNext: PT Single-Asset Barrier Option > ") > PTSingleAssetBarrierOption(TypeFlag = "coB1", S = 95, X = 110, + H = 100, time1 = 0.5, Time2 = 1, r = 0.20, b = 0.20, + sigma = 0.25) Title: Partial Time Single Asset Barrier Option Call: PTSingleAssetBarrierOption(TypeFlag = "coB1", S = 95, X = 110, H = 100, time1 = 0.5, Time2 = 1, r = 0.2, b = 0.2, sigma = 0.25) Parameters: Value: TypeFlag coB1 S 95 X 110 H 100 time1 0.5 Time2 1 r 0.2 b 0.2 sigma 0.25 Option Price: 40.91774 Description: Wed Jul 13 14:09:41 2005 > > ## Two Asset Barrier Option [2.10.4]: > xmpOptions("\nNext: Two Asset Barrier Option > ") > TwoAssetBarrierOption(TypeFlag = "puo", S1 = 100, S2 = 100, + X = 110, H = 105, Time = 0.5, r = 0.08, b1 = 0.08, b2 = 0.08, + sigma1 = 0.2, sigma2 = 0.2, rho = -0.5) Title: Two Asset Barrier Option Call: TwoAssetBarrierOption(TypeFlag = "puo", S1 = 100, S2 = 100, X = 110, H = 105, Time = 0.5, r = 0.08, b1 = 0.08, b2 = 0.08, sigma1 = 0.2, sigma2 = 0.2, rho = -0.5) Parameters: Value: TypeFlag puo S1 100 S2 100 X 110 H 105 Time 0.5 r 0.08 b1 0.08 b2 0.08 sigma1 0.2 sigma2 0.2 rho -0.5 Option Price: 1.013378 Description: Wed Jul 13 14:09:41 2005 > > ## PT Two Asset Barrier Option [2.10.5]: > xmpOptions("\nNext: PT Two Asset Barrier Option > ") > PTTwoAssetBarrierOption(TypeFlag = "pdo", S1 = 100, S2 = 100, + X = 100, H = 85, time1 = 0.5, Time2 = 1, r = 0.1, b1 = 0.1, + b2 = 0.1, sigma1 = 0.25, sigma2 = 0.30, rho = -0.5) Title: Partial Time Two Asset Barrier Option Call: PTTwoAssetBarrierOption(TypeFlag = "pdo", S1 = 100, S2 = 100, X = 100, H = 85, time1 = 0.5, Time2 = 1, r = 0.1, b1 = 0.1, b2 = 0.1, sigma1 = 0.25, sigma2 = 0.3, rho = -0.5) Parameters: Value: TypeFlag pdo S1 100 S2 100 X 100 H 85 time1 0.5 Time2 1 r 0.1 b1 0.1 b2 0.1 sigma1 0.25 sigma2 0.3 Option Price: 4.10429 Description: Wed Jul 13 14:09:41 2005 > > ## Look Barrier Option [2.10.6]: > xmpOptions("\nNext: Look Barrier Option > ") > LookBarrierOption(TypeFlag = "cuo", S = 100, X = 100, H = 130, + time1 = 0.25, Time2 = 1, r = 0.1, b = 0.1, sigma = 0.15) Title: Look Barrier Option Call: LookBarrierOption(TypeFlag = "cuo", S = 100, X = 100, H = 130, time1 = 0.25, Time2 = 1, r = 0.1, b = 0.1, sigma = 0.15) Parameters: Value: TypeFlag cuo S 100 X 100 H 130 time1 0.25 Time2 1 r 0.1 b 0.1 sigma 0.15 Option Price: 17.05969 Description: Wed Jul 13 14:09:41 2005 > LookBarrierOption(TypeFlag = "cuo", S = 100, X = 100, H = 110, + time1 = 1, Time2 = 1, r = 0.1, b = 0.1, sigma = 0.30) Title: Look Barrier Option Call: LookBarrierOption(TypeFlag = "cuo", S = 100, X = 100, H = 110, time1 = 1, Time2 = 1, r = 0.1, b = 0.1, sigma = 0.3) Parameters: Value: TypeFlag cuo S 100 X 100 H 110 time1 1 Time2 1 r 0.1 b 0.1 sigma 0.3 Option Price: 0.03574962 Description: Wed Jul 13 14:09:41 2005 > > ## Discrete Barrier Option [2.10.7]: > xmpOptions("\nNext: Discrete Barrier Option > ") > DiscreteBarrierOption(S = 100, H = 105, sigma = 0.25, dt = 0.1) Title: Discrete Barrier Option Call: DiscreteBarrierOption(S = 100, H = 105, sigma = 0.25, dt = 0.1) Parameters: Value: S 100 H 105 sigma 0.25 dt 0.1 Option Price: 109.9493 Description: Wed Jul 13 14:09:41 2005 > > ## Soft Barrier Option [2.10.8]: > xmpOptions("\nNext: Soft Barrier Option > ") > SoftBarrierOption(TypeFlag = "cdo", S = 100, X = 100, L = 70, + U = 95, Time = 0.5, r = 0.1, b = 0.05, sigma = 0.20) Title: Soft Barrier Option Call: SoftBarrierOption(TypeFlag = "cdo", S = 100, X = 100, L = 70, U = 95, Time = 0.5, r = 0.1, b = 0.05, sigma = 0.2) Parameters: Value: TypeFlag cdo S 100 X 100 L 70 U 95 Time 0.5 r 0.1 b 0.05 sigma 0.2 Option Price: 6.442895 Description: Wed Jul 13 14:09:41 2005 > > > > > cleanEx(); ..nameEx <- "B5-BinaryOptions" > > ### * B5-BinaryOptions > > flush(stderr()); flush(stdout()) > > ### Name: BinaryOptions > ### Title: Valuation of Binary Options > ### Aliases: BinaryOptions GapOption CashOrNothingOption > ### TwoAssetCashOrNothingOption AssetOrNothingOption SuperShareOption > ### BinaryBarrierOption > ### Keywords: math > > ### ** Examples > > ## SOURCE("fBasics.A0-SPlusCompatibility") > ## SOURCE("fOptions.A1-PlainVanillaOptions") > ## SOURCE("fOptions.B5-BinaryOptions") > > ## Examples from Chapter 2.11 in E.G. Haug's Option Guide (1997) > > ## Gap Option [2.11.1]: > xmpOptions("\nStart: Gap Option > ") > GapOption(TypeFlag = "c", S = 50, X1 = 50, X2 = 57, Time = 0.5, + r = 0.09, b = 0.09, sigma = 0.20) Title: Gap Option Call: GapOption(TypeFlag = "c", S = 50, X1 = 50, X2 = 57, Time = 0.5, r = 0.09, b = 0.09, sigma = 0.2) Parameters: Value: TypeFlag c S 50 X1 50 X2 57 Time 0.5 r 0.09 b 0.09 sigma 0.2 Option Price: -0.005252202 Description: Wed Jul 13 14:09:41 2005 > > ## Cash Or Nothing Option [2.11.2]: > xmpOptions("\nNext: Cash or Nothing Option > ") > CashOrNothingOption(TypeFlag = "p", S = 100, X = 80, K = 10, + Time = 9/12, r = 0.06, b = 0, sigma = 0.35) Title: Cash Or Nothing Option Call: CashOrNothingOption(TypeFlag = "p", S = 100, X = 80, K = 10, Time = 9/12, r = 0.06, b = 0, sigma = 0.35) Parameters: Value: TypeFlag p S 100 X 80 K 10 Time 0.75 r 0.06 b 0 sigma 0.35 Option Price: 2.671045 Description: Wed Jul 13 14:09:41 2005 > > ## Two Asset Cash Or Nothing Option [2.11.3]: > xmpOptions("\nNext: Two Asset Cash Or Nothing Option > ") > # Type 1 - call: > TwoAssetCashOrNothingOption(TypeFlag = "c", S1 = 100, S2 = 100, + X1 = 110, X2 = 90, K = 10, Time = 0.5, r = 0.10, b1 = 0.05, + b2 = 0.06, sigma1 = 0.20, sigma2 = 0.25, rho = 0.5) Title: Two Asset Cash Or Nothing Option Call: TwoAssetCashOrNothingOption(TypeFlag = "c", S1 = 100, S2 = 100, X1 = 110, X2 = 90, K = 10, Time = 0.5, r = 0.1, b1 = 0.05, b2 = 0.06, sigma1 = 0.2, sigma2 = 0.25, rho = 0.5) Parameters: Value: TypeFlag c S1 100 S2 100 X1 110 X2 90 K 10 Time 0.5 r 0.1 b1 0.05 b2 0.06 sigma1 0.2 sigma2 0.25 rho 0.5 Option Price: 2.498750 Description: Wed Jul 13 14:09:41 2005 > # Type 2 - put: > TwoAssetCashOrNothingOption(TypeFlag = "p", S1 = 100, S2 = 100, + X1 = 110, X2 = 90, K = 10, Time = 0.5, r = 0.10, b1 = 0.05, + b2 = 0.06, sigma1 = 0.20, sigma2 = 0.25, rho = -0.5) Title: Two Asset Cash Or Nothing Option Call: TwoAssetCashOrNothingOption(TypeFlag = "p", S1 = 100, S2 = 100, X1 = 110, X2 = 90, K = 10, Time = 0.5, r = 0.1, b1 = 0.05, b2 = 0.06, sigma1 = 0.2, sigma2 = 0.25, rho = -0.5) Parameters: Value: TypeFlag p S1 100 S2 100 X1 110 X2 90 K 10 Time 0.5 r 0.1 b1 0.05 b2 0.06 sigma1 0.2 sigma2 0.25 rho -0.5 Option Price: 1.116392 Description: Wed Jul 13 14:09:41 2005 > # Type 3 - down-up: > TwoAssetCashOrNothingOption(TypeFlag = "ud", S1 = 100, S2 = 100, + X1 = 110, X2 = 90, K = 10, Time = 1, r = 0.10, b1 = 0.05, + b2 = 0.06, sigma1 = 0.20, sigma2 = 0.25, rho = 0) Title: Two Asset Cash Or Nothing Option Call: TwoAssetCashOrNothingOption(TypeFlag = "ud", S1 = 100, S2 = 100, X1 = 110, X2 = 90, K = 10, Time = 1, r = 0.1, b1 = 0.05, b2 = 0.06, sigma1 = 0.2, sigma2 = 0.25, rho = 0) Parameters: Value: TypeFlag ud S1 100 S2 100 X1 110 X2 90 K 10 Time 1 r 0.1 b1 0.05 b2 0.06 sigma1 0.2 sigma2 0.25 rho 0 Option Price: 0.9957608 Description: Wed Jul 13 14:09:41 2005 > # Type 4 - up-down: > TwoAssetCashOrNothingOption(TypeFlag = "du", S1 = 100, S2 = 100, + X1 = 110, X2 = 90, K = 10, Time = 1, r = 0.10, b1 = 0.05, + b2 = 0.06, sigma1 = 0.20, sigma2 = 0.25, rho = 0) Title: Two Asset Cash Or Nothing Option Call: TwoAssetCashOrNothingOption(TypeFlag = "du", S1 = 100, S2 = 100, X1 = 110, X2 = 90, K = 10, Time = 1, r = 0.1, b1 = 0.05, b2 = 0.06, sigma1 = 0.2, sigma2 = 0.25, rho = 0) Parameters: Value: TypeFlag du S1 100 S2 100 X1 110 X2 90 K 10 Time 1 r 0.1 b1 0.05 b2 0.06 sigma1 0.2 sigma2 0.25 rho 0 Option Price: 4.001356 Description: Wed Jul 13 14:09:41 2005 > > ## Asset Or Nothing Option [2.11.4]: > xmpOptions("\nNext: Asset Or Nothing Option > ") > AssetOrNothingOption(TypeFlag = "p", S = 70, X = 65, Time = 0.5, + r = 0.07, b = 0.07 - 0.05, sigma = 0.27) Title: Asset Or Nothing Option Call: AssetOrNothingOption(TypeFlag = "p", S = 70, X = 65, Time = 0.5, r = 0.07, b = 0.07 - 0.05, sigma = 0.27) Parameters: Value: TypeFlag p S 70 X 65 Time 0.5 r 0.07 b 0.02 sigma 0.27 Option Price: 20.20695 Description: Wed Jul 13 14:09:41 2005 > > ## Super Share Option [2.11.5]: > xmpOptions("\nNext: Super Share Option > ") > SuperShareOption(S = 100, XL = 90, XH = 110, Time = 0.25, r = 0.10, + b = 0, sigma = 0.20) Title: Super Share Option Call: SuperShareOption(S = 100, XL = 90, XH = 110, Time = 0.25, r = 0.1, b = 0, sigma = 0.2) Parameters: Value: S 100 XL 90 XH 110 Time 0.25 r 0.1 b 0 sigma 0.2 Option Price: 0.7389401 Description: Wed Jul 13 14:09:41 2005 > > ## Binary Barrier Option [2.11.6]: > xmpOptions("\nNext: Binary Barrier Option > ") > BinaryBarrierOption(TypeFlag = "6", S = 95, X=102, H = 100, + K = 15, Time = 0.5, r = 0.1, b = 0.1, sigma = 0.20) Title: Binary Barrier Option Call: BinaryBarrierOption(TypeFlag = "6", S = 95, X = 102, H = 100, K = 15, Time = 0.5, r = 0.1, b = 0.1, sigma = 0.2) Parameters: Value: TypeFlag 6 S 95 X 102 H 100 K 15 Time 0.5 r 0.1 b 0.1 sigma 0.2 eta -1 phi 1 Option Price: 11.22233 Description: Wed Jul 13 14:09:41 2005 > BinaryBarrierOption(TypeFlag = "12", S = 95, X = 98, H = 100, + K = 15, Time = 0.5, r = 0.1, b = 0.1, sigma = 0.20) Title: Binary Barrier Option Call: BinaryBarrierOption(TypeFlag = "12", S = 95, X = 98, H = 100, K = 15, Time = 0.5, r = 0.1, b = 0.1, sigma = 0.2) Parameters: Value: TypeFlag 12 S 95 X 98 H 100 K 15 Time 0.5 r 0.1 b 0.1 sigma 0.2 eta -1 phi -1 Option Price: 17.29827 Description: Wed Jul 13 14:09:41 2005 > > > > > cleanEx(); ..nameEx <- "B6-AsianOptions" > > ### * B6-AsianOptions > > flush(stderr()); flush(stdout()) > > ### Name: AsianOptions > ### Title: Valuation of Asian Options > ### Aliases: AsianOptions GeometricAverageRateOption > ### TurnbullWakemanAsianApproxOption LevyAsianApproxOption > ### Keywords: math > > ### ** Examples > > ## SOURCE("fBasics.A0-SPlusCompatibility") > ## SOURCE("fOptions.A1-PlainVanillaOptions") > ## SOURCE("fOptions.B6-AsianOptions") > > ## Examples from Chapter 2.12 in E.G. Haug's Option Guide (1997) > > ## Geometric Average Rate Option: > xmpOptions("\nStart: Geometric Average Rate Option > ") > GeometricAverageRateOption(TypeFlag = "p", S = 80, X = 85, + Time = 0.25, r = 0.05, b = 0.08, sigma = 0.20) Title: Geometric Average Rate Option Call: GeometricAverageRateOption(TypeFlag = "p", S = 80, X = 85, Time = 0.25, r = 0.05, b = 0.08, sigma = 0.2) Parameters: Value: TypeFlag p S 80 X 85 Time 0.25 r 0.05 b 0.08 sigma 0.2 Option Price: 4.69222 Description: Wed Jul 13 14:09:41 2005 > > ## Turnbull Wakeman Approximation: > xmpOptions("\nNext: Turnbull Wakeman Option > ") > TurnbullWakemanAsianApproxOption(TypeFlag = "p", S = 90, SA = 88, + X = 95, Time = 0.50, time = 0.25, tau = 0.0, r = 0.07, + b = 0.02, sigma = 0.25) Title: Turnbull Wakeman Asian Approximated Option Call: TurnbullWakemanAsianApproxOption(TypeFlag = "p", S = 90, SA = 88, X = 95, Time = 0.5, time = 0.25, tau = 0, r = 0.07, b = 0.02, sigma = 0.25) Parameters: Value: TypeFlag p S 90 SA 88 X 102 Time 0.5 time 0.25 tau 0 r 0.07 b 0.02 sigma 0.25 Option Price: 5.848187 Description: Wed Jul 13 14:09:41 2005 > > ## Levy Asian Approximation: > xmpOptions("\nNext: Levy Asian Option > ") > LevyAsianApproxOption(TypeFlag = "c", S = 100, SA = 100, X = 105, + Time = 0.75, time = 0.50, r = 0.10, b = 0.05, sigma = 0.15) Title: Levy Asian Approximated Option Call: LevyAsianApproxOption(TypeFlag = "c", S = 100, SA = 100, X = 105, Time = 0.75, time = 0.5, r = 0.1, b = 0.05, sigma = 0.15) Parameters: Value: TypeFlag c S 100 SA 100 X 105 Time 0.75 time 0.5 r 0.1 b 0.05 sigma 0.15 Option Price: 0.3564905 Description: Wed Jul 13 14:09:41 2005 > > > > > cleanEx(); ..nameEx <- "B7-CurrencyTranslatedOptions" > > ### * B7-CurrencyTranslatedOptions > > flush(stderr()); flush(stdout()) > > ### Name: CurrencyTranslatedOptions > ### Title: Valuation of Currency Translated Options > ### Aliases: CurrencyTranslatedOptions FEInDomesticFXOption QuantoOption > ### EquityLinkedFXOption TakeoverFXOption > ### Keywords: math > > ### ** Examples > > ## SOURCE("fBasics.A0-SPlusCompatibility") > ## SOURCE("fOptions.A1-PlainVanillaOptions") > ## SOURCE("fOptions.B7-FXTransOptions") > > ## Examples from Chapter 2.13 in E.G. Haug's Option Guide (1997) > > ## Foreign Equity Options Struck in Domestic Currency [2.13.1]: > xmpOptions("\nStart: FE in Domestic Currency Option > ") > FEInDomesticFXOption(TypeFlag = "c", S = 100, E = 1.5, + X = 160, Time = 0.5, r = 0.08, q = 0.05, sigmaS = 0.20, + sigmaE = 0.12, rho = 0.45) Title: FE In Domestic FX Option Call: FEInDomesticFXOption(TypeFlag = "c", S = 100, E = 1.5, X = 160, Time = 0.5, r = 0.08, q = 0.05, sigmaS = 0.2, sigmaE = 0.12, rho = 0.45) Parameters: Value: TypeFlag c S 100 E 1.5 X 160 Time 0.5 r 0.08 q 0.05 sigmaS 0.2 sigmaE 0.12 rho 0.45 Option Price: 8.305561 Description: Wed Jul 13 14:09:41 2005 > > ## Fixed Exchange-Rate Foreign-Equity Option [2.13.2]: > xmpOptions("\nNext: Quanto Option > ") > QuantoOption(TypeFlag = "c", S = 100, Ep = 1.5, X = 105, + Time = 0.5, r = 0.08, rf = 0.05, q = 0.04, sigmaS= 0.2, + sigmaE = 0.10, rho = 0.30) Title: Quanto Option Call: QuantoOption(TypeFlag = "c", S = 100, Ep = 1.5, X = 105, Time = 0.5, r = 0.08, rf = 0.05, q = 0.04, sigmaS = 0.2, sigmaE = 0.1, rho = 0.3) Parameters: Value: TypeFlag c S 100 Ep 1.5 X 105 Time 0.5 r 0.08 rf 0.05 q 0.04 sigmaS 0.2 sigmaE 0.1 rho 0.3 Option Price: 5.328035 Description: Wed Jul 13 14:09:41 2005 > > ## Equity Linked Foreign Exchange Option [2.13.3]: > xmpOptions("\nNext: Equity Linked FX Option > ") > EquityLinkedFXOption(TypeFlag = "p", E = 1.5, S = 100, + X = 1.52, Time = 0.25, r = 0.08, rf = 0.05, q = 0.04, + sigmaS = 0.20, sigmaE = 0.12, rho = -0.40) Title: Equity Linked FX Option Call: EquityLinkedFXOption(TypeFlag = "p", E = 1.5, S = 100, X = 1.52, Time = 0.25, r = 0.08, rf = 0.05, q = 0.04, sigmaS = 0.2, sigmaE = 0.12, rho = -0.4) Parameters: Value: TypeFlag p E 1.5 S 100 X 1.52 Time 0.25 r 0.08 rf 0.05 q 0.04 sigmaS 0.2 sigmaE 0.12 rho -0.4 Option Price: 4.208856 Description: Wed Jul 13 14:09:41 2005 > > ## Takeover Foreign-Exchange Option [2.13.4]: > xmpOptions("\nNext: Takeover FX Option > ") > TakeoverFXOption(V = 100, B = 100, E = 1.5, X = 1.55, Time = 1, + r = 0.08, rf = 0.06, sigmaV = 0.20, sigmaE = 0.25, rho = 0.1) Title: Takeover FX Option Call: TakeoverFXOption(V = 100, B = 100, E = 1.5, X = 1.55, Time = 1, r = 0.08, rf = 0.06, sigmaV = 0.2, sigmaE = 0.25, rho = 0.1) Parameters: Value: V 100 B 100 E 1.5 X 1.55 Time 1 r 0.08 rf 0.06 q function (save = "default", status = 0, runLast = TRUE) sigmaV 0.2 sigmaE 0.25 rho 0.1 Option Price: 4.977936 Description: Wed Jul 13 14:09:41 2005 > > > > > cleanEx(); ..nameEx <- "C1-HestonNandiGarchFit" > > ### * C1-HestonNandiGarchFit > > flush(stderr()); flush(stdout()) > > ### Name: HestonNandiGarchFit > ### Title: Heston-Nandi Garch(1,1) Modelling > ### Aliases: HestonNandiGarchFit hngarchSim hngarchFit hngarchStats > ### print.hngarch summary.hngarch > ### Keywords: models > > ### ** Examples > > ## SOURCE("fBasics.A0-SPlusCompatibility") > ## SOURCE("fOptions.C1-HestonNandiGarchFit") > > ## hngarchSim - > # Simulate a Heston Nandi Garch(1,1) Process: > xmpOptions("\nStart: Simulate a HN-GARCH(1,1) Process > ") > # Symmetric Model - Parameters: > model = list(lambda = 4, omega = 8e-5, alpha = 6e-5, + beta = 0.7, gamma = 0, rf = 0) > ts = hngarchSim(model = model, n = 500, n.start = 100) > par(mfrow = c(2, 1), cex = 0.75) > ts.plot(ts, col = "steelblue4", main = "HN Garch Symmetric Model") > grid() > > ## hngarchFit - > # HN-GARCH log likelihood Parameter Estimation: > xmpOptions("\nNext: Estimate a HN-GARCH(1,1) Process > ") > # To speed up, we start with the simulated model ... > mle = hngarchFit(model = model, x = ts, symmetric = TRUE) > mle Title: Heston-Nandi Garch Parameter Estimation Call: hngarchFit(x = ts, model = model, symmetric = TRUE) Parameters: lambda omega alpha beta gamma rf 4e+00 8e-05 6e-05 7e-01 0e+00 0e+00 Coefficients: lambda, omega, alpha, beta, gamma lambda omega alpha beta gamma 5.175e+00 2.904e-05 4.420e-05 8.473e-01 0.000e+00 Log-Likelihood: 2462.019 Persistence and Variance: 0.8473191 0.0004796996 Description: Wed Jul 13 14:09:45 2005 > > ## summary.hngarch - > # HN-GARCH Diagnostic Analysis: > xmpOptions("\nNext: Analyse a HN-GARCH(1,1) Process > ") > par(mfrow = c(3, 1), cex = 0.75) > summary(mle) Title: Heston-Nandi Garch Parameter Estimation Call: hngarchFit(x = ts, model = model, symmetric = TRUE) Parameters: lambda omega alpha beta gamma rf 4e+00 8e-05 6e-05 7e-01 0e+00 0e+00 Coefficients: lambda, omega, alpha, beta, gamma lambda omega alpha beta gamma 5.175e+00 2.904e-05 4.420e-05 8.473e-01 0.000e+00 Log-Likelihood: 2462.019 Persistence and Variance: 0.8473191 0.0004796996 > > ## hngarchStats - > # HN-GARCH Moments: > xmpOptions("\nNext: Compute Moments of a HN-GARCH(1,1) Process > ") > hngarchStats(mle$model) $mean [1] 0.002482388 $variance [1] 0.0004800705 $skewness [1] 0.02046919 $kurtosis [1] 3.181555 $persistence [1] 0.8473191 $leverage [1] 0 $meansigma2 [1] 0.0004796996 $meansigma4 [1] 2.439647e-07 $meansigma6 [1] 1.32084e-10 $meansigma8 [1] 7.641582e-14 > > > > graphics::par(get("par.postscript", env = .CheckExEnv)) > cleanEx(); ..nameEx <- "C2-HestonNandiOptions" > > ### * C2-HestonNandiOptions > > flush(stderr()); flush(stdout()) > > ### Name: HestonNandiOptions > ### Title: Option Price for the Heston-Nandi Garch Option Model > ### Aliases: HestonNandiOptions HNGOption HNGGreeks HNGCharacteristics > ### Keywords: math > > ### ** Examples > > ## SOURCE("fBasics.A0-SPlusCompatibility") > ## SOURCE("fOptions.A1-PlainVanillaOptions") > ## SOURCE("fOptions.C2-HestonNandiOptions") > > ## model - > # Define the Model Parameters for a Heston-Nandi Option: > xmpOptions("\nStart: Parameter Settings > ") > model = list(lambda = -0.5, omega = 2.3e-6, alpha = 2.9e-6, + beta = 0.85, gamma = 184.25) > S = X = 100 > Time.inDays = 252 > r.daily = 0.05/Time.inDays > sigma.daily = sqrt((model$omega + model$alpha) / + (1 - model$beta - model$alpha * model$gamma^2)) > data.frame(S, X, r.daily, sigma.daily) S X r.daily sigma.daily 1 100 100 0.0001984127 0.01004349 > > ## HNGOption - > # Compute HNG Call-Put and compare with GBS Call-Put: > xmpOptions("\nNext: HNG Option Prices > ") > HNG = GBS = Diff = NULL > for (TypeFlag in c("c", "p")) { + HNG = c(HNG, HNGOption(TypeFlag, model = model, S = S, X = X, + Time.inDays = Time.inDays, r.daily = r.daily)$price ) + GBS = c(GBS, GBSOption(TypeFlag, S = S, X = X, Time = Time.inDays, + r = r.daily, b = r.daily, sigma = sigma.daily)$price) } > Options = cbind(HNG, GBS, Diff = round(100*(HNG-GBS)/GBS, digits=2)) > row.names(Options) <- c("Call", "Put") > data.frame(Options) HNG Call 8.992100 Put 4.115042 > > ## HNGGreeks - > # Compute HNG Greeks and compare with GBS Greeks: > xmpOptions("\nNext: HNG Delta and Gamma Sensitivities > ") > Selection = c("Delta", "Gamma") > HNG = GBS = NULL > for (i in 1:2){ + HNG = c(HNG, HNGGreeks(Selection[i], TypeFlag = "c", model = model, + S = 100, X = 100, Time = Time.inDays, r = r.daily) ) + GBS = c(GBS, GBSGreeks(Selection[i], TypeFlag = "c", S = 100, X = 100, + Time = Time.inDays, r = r.daily, b = r.daily, sigma = sigma.daily) ) } > Greeks = cbind(HNG, GBS, Diff = round(100*(HNG-GBS)/GBS, digits = 2)) > row.names(Greeks) <- Selection > data.frame(Greeks) HNG GBS Diff Delta 0.67395339 0.65295993 3.22 Gamma 0.02211149 0.02315963 -4.53 > > > > cleanEx(); ..nameEx <- "D1-LowDiscrepancy" > > ### * D1-LowDiscrepancy > > flush(stderr()); flush(stdout()) > > ### Name: LowDiscrepancy > ### Title: Low Discrepancy Sequences > ### Aliases: LowDiscrepancy runif.halton rnorm.halton runif.sobol > ### rnorm.sobol runif.pseudo rnorm.pseudo > ### Keywords: programming > > ### ** Examples > > ## SOURCE("fBasics.A0-SPlusCompatibility") > ## SOURCE("fOptions.D1-LowDiscrepancy") > > ## *.halton - > xmpOptions("\nStart: Uniform Holton Numbers > ") > par(mfrow = c(2, 2), cex = 0.75) > runif.halton(n = 10, dimension = 5) [,1] [,2] [,3] [,4] [,5] [1,] 0.5000 0.33333334 0.20 0.14285715 0.0909091 [2,] 0.2500 0.66666669 0.40 0.28571430 0.1818182 [3,] 0.7500 0.11111111 0.60 0.42857145 0.2727273 [4,] 0.1250 0.44444446 0.80 0.57142860 0.3636364 [5,] 0.6250 0.77777780 0.04 0.71428575 0.4545455 [6,] 0.3750 0.22222223 0.24 0.85714290 0.5454546 [7,] 0.8750 0.55555557 0.44 0.02040816 0.6363637 [8,] 0.0625 0.88888892 0.64 0.16326531 0.7272727 [9,] 0.5625 0.03703704 0.84 0.30612246 0.8181818 [10,] 0.3125 0.37037038 0.08 0.44897961 0.9090909 > hist(runif.halton(n = 5000, dimension = 1), main = "Uniform Halton", + xlab = "x", col = "steelblue3", border = "white") > xmpOptions("\nNext: Normal Holton Numbers > ") > rnorm.halton(n = 10, dimension = 5) [,1] [,2] [,3] [,4] [,5] [1,] 0.0000000 -0.4307273 -0.8416212 -1.0675704 -1.3351778 [2,] -0.6744898 0.4307274 -0.2533471 -0.5659488 -0.9084579 [3,] 0.6744898 -1.2206403 0.2533472 -0.1800123 -0.6045853 [4,] -1.1503494 -0.1397103 0.8416213 0.1800124 -0.3487557 [5,] 0.3186394 0.7647098 -1.7506860 0.5659490 -0.1141853 [6,] -0.3186394 -0.7647097 -0.7063026 1.0675707 0.1141853 [7,] 1.1503494 0.1397104 -0.1509692 -2.0453911 0.3487558 [8,] -1.5341206 1.2206405 0.3584588 -0.9811260 0.6045854 [9,] 0.1573107 -1.7861556 0.9944580 -0.5068716 0.9084580 [10,] -0.4887764 -0.3308726 -1.4050716 -0.1282398 1.3351779 > hist(rnorm.halton(n = 5000, dimension = 1), main = "Normal Halton", + xlab = "x", col = "steelblue3", border = "white") > > ## *.sobol - > xmpOptions("\nNext: Uniform Sobol Numbers > ") > runif.sobol(n = 10, dimension = 5, scrambling = 3) [,1] [,2] [,3] [,4] [,5] [1,] 0.950436413 0.68109584 0.7964226 0.7789567 0.23022613 [2,] 0.505117655 0.10001671 0.5394357 0.1626083 0.29512087 [3,] 0.174511641 0.78909838 0.1558685 0.5312866 0.65873003 [4,] 0.677048326 0.93456447 0.3741792 0.9448428 0.60587275 [5,] 0.002695417 0.23693027 0.9461251 0.3135365 0.46957344 [6,] 0.447998792 0.54445720 0.7023839 0.7443072 0.03626848 [7,] 0.872369945 0.34755540 0.1179216 0.1217079 0.91564041 [8,] 0.418673247 0.05109694 0.2309227 0.9069477 0.13713892 [9,] 0.776573420 0.86932898 0.5893981 0.2873449 0.75079370 [10,] 0.706255734 0.41129529 0.8402236 0.6534181 0.69252151 > hist(runif.sobol(5000, 1, scrambling = 2), main = "Uniform Sobol", + xlab = "x", col = "steelblue3", border = "white") > xmpOptions("\nNext: Normal Sobol Numbers > ") > rnorm.sobol(n = 10, dimension = 5, scrambling = 3) [,1] [,2] [,3] [,4] [,5] [1,] 1.64909995 0.4707654 0.82891095 0.76867431 -0.73810238 [2,] 0.01282844 -1.2814564 0.09901215 -0.98379427 -0.53848583 [3,] -0.93648547 0.8032967 -1.01158381 0.07850444 0.40899965 [4,] 0.45946077 1.5106759 -0.32080469 1.59678173 0.26857796 [5,] -2.78270173 -0.7162119 1.60838985 -0.48585087 -0.07634218 [6,] -0.13071904 0.1116693 0.53126925 0.65668160 -1.79573321 [7,] 1.13766563 -0.3919289 -1.18544102 -1.16649163 1.37633109 [8,] -0.20528881 -1.6343095 -0.73581159 1.32219112 -1.09326410 [9,] 0.76067173 1.1232247 0.22599693 -0.56115818 0.67698956 [10,] 0.54247910 -0.2242143 0.99537706 0.39456514 0.50301039 > hist(rnorm.sobol(5000, 1, scrambling = 2), main = "Normal Sobol", + xlab = "x", col = "steelblue3", border = "white") > > ## *.pseudo - > xmpOptions("\nNext: Uniform Pseudo Random Numbers > ") > runif.pseudo(n = 10, dimension = 5) [,1] [,2] [,3] [,4] [,5] [1,] 0.26550866 0.2059746 0.93470523 0.4820801 0.82094629 [2,] 0.37212390 0.1765568 0.21214252 0.5995658 0.64706019 [3,] 0.57285336 0.6870228 0.65167377 0.4935413 0.78293276 [4,] 0.90820779 0.3841037 0.12555510 0.1862176 0.55303631 [5,] 0.20168193 0.7698414 0.26722067 0.8273733 0.52971958 [6,] 0.89838968 0.4976992 0.38611409 0.6684667 0.78935623 [7,] 0.94467527 0.7176185 0.01339033 0.7942399 0.02333120 [8,] 0.66079779 0.9919061 0.38238796 0.1079436 0.47723007 [9,] 0.62911404 0.3800352 0.86969085 0.7237109 0.73231374 [10,] 0.06178627 0.7774452 0.34034900 0.4112744 0.69273156 > rnorm.pseudo(n = 10, dimension = 5) [,1] [,2] [,3] [,4] [,5] [1,] -0.05612874 -0.4149946 -0.7074952 1.98039990 0.1887923 [2,] -0.15579551 -0.3942900 0.3645820 -0.36722148 -1.8049586 [3,] -1.47075238 -0.0593134 0.7685329 -1.04413463 1.4655549 [4,] -0.47815006 1.1000254 -0.1123462 0.56971963 0.1532533 [5,] 0.41794156 0.7631757 0.8811077 -0.13505460 2.1726117 [6,] 1.35867955 -0.1645236 0.3981059 2.40161776 0.4755095 [7,] -0.10278773 -0.2533617 -0.6120264 -0.03924000 -0.7099464 [8,] 0.38767161 0.6969634 0.3411197 0.68973936 0.6107264 [9,] -0.05380504 0.5566632 -1.1293631 0.02800216 -0.9340976 [10,] -1.37705956 -0.6887557 1.4330237 -0.74327321 -1.2536334 > > > > graphics::par(get("par.postscript", env = .CheckExEnv)) > cleanEx(); ..nameEx <- "D2-MonteCarloOptions" > > ### * D2-MonteCarloOptions > > flush(stderr()); flush(stdout()) > > ### Name: MonteCarloOptions > ### Title: Monte Carlo Valuation of Options > ### Aliases: MonteCarloOptions wienerMCPath plainVanillaMCPayoff > ### arithmeticAsianMCPayoff MonteCarloOption > ### Keywords: programming > > ### ** Examples > > ## SOURCE("fBasics.A0-SPlusCompatibility") > ## SOURCE("fOptions.A1-PlainVanillaOptions") > ## SOURCE("fOptions.B6-AsianOptions") > ## SOURCE("fOptions.D1-LowDiscrepancy") > ## SOURCE("fOptions.D2-MonteCarloOptions") > > ## How to perform a Monte Carlo Simulation? > > ## First Step: > xmpOptions("\nStart: Sobol Generator > ") > # Write a function to generate the option's innovations. > # Use scrambled normal Sobol numbers: > sobolInnovations = function(mcSteps, pathLength, init, ...) { + # Create Normal Sobol Innovations: + innovations = rnorm.sobol(mcSteps, pathLength, init, ...) + # Return Value: + innovations } > > ## Second Step: > xmpOptions("\nNext: Wiener Path > ") > # Write a function to generate the option's price paths. > # Use a Wiener path: > wienerPath = function(eps) { + # Note, the option parameters must be globally defined! + # Generate the Paths: + path = (b-sigma*sigma/2)*delta.t + sigma*sqrt(delta.t)*eps + # Return Value: + path } > > ## Third Step: > # Write a function for the option's payoff > > # Example 1: use the payoff for a plain Vanilla Call or Put: > xmpOptions("\nNext: Plain Vanilla Payoff > ") > plainVanillaPayoff = function(path) { + # Note, the option parameters must be globally defined! + # Compute the Call/Put Payoff Value: + ST = S*exp(sum(path)) + if (TypeFlag == "c") payoff = exp(-r*Time)*max(ST-X, 0) + if (TypeFlag == "p") payoff = exp(-r*Time)*max(0, X-ST) + # Return Value: + payoff } > > # Example 2: use the payoff for an arithmetic Asian Call or Put: > xmpOptions("\nNext: Arithmetic Asian Payoff > ") > arithmeticAsianPayoff = function(path) { + # Note, the option parameters must be globally defined! + # Compute the Call/Put Payoff Value: + SM = mean(S*exp(cumsum(path))) + if (TypeFlag == "c") payoff = exp(-r*Time)*max(SM-X, 0) + if (TypeFlag == "p") payoff = exp(-r*Time)*max(0, X-SM) + # Return Value: + payoff } > > ## Final Step: > xmpOptions("\nNext: Set Option Parameters > ") > # Set Global Parameters for the plain Vanilla / arithmetic Asian Options: > TypeFlag <<- "c"; S <<- 100; X <<- 100 > Time <<- 1/12; sigma <<- 0.4; r <<- 0.10; b <<- 0.1 > > # Do the Asian Simulation with scrambled random numbers: > xmpOptions("\nNext: Monte Carlo Simulation > ") > mc = MonteCarloOption(delta.t = 1/360, pathLength = 30, mcSteps = 5000, + mcLoops = 50, init = TRUE, innovations.gen = sobolInnovations, + path.gen = wienerPath, payoff.calc = arithmeticAsianPayoff, + antithetic = TRUE, standardization = FALSE, trace = TRUE, + scrambling = 2, seed = 4711) Monte Carlo Simulation Path: Loop: No Loop: 1 : 3.253438 3.253438 Loop: 2 : 2.635155 2.944296 Loop: 3 : 2.6733 2.853964 Loop: 4 : 2.748978 2.827718 Loop: 5 : 2.795612 2.821297 Loop: 6 : 2.904629 2.835185 Loop: 7 : 2.76193 2.82472 Loop: 8 : 2.943873 2.839614 Loop: 9 : 3.628506 2.927269 Loop: 10 : 3.549677 2.98951 Loop: 11 : 2.623178 2.956207 Loop: 12 : 3.26091 2.981599 Loop: 13 : 3.206552 2.998903 Loop: 14 : 3.188396 3.012438 Loop: 15 : 3.080368 3.016967 Loop: 16 : 2.469462 2.982748 Loop: 17 : 2.573869 2.958696 Loop: 18 : 2.736681 2.946362 Loop: 19 : 3.275842 2.963703 Loop: 20 : 2.357822 2.933409 Loop: 21 : 2.689799 2.921808 Loop: 22 : 2.780071 2.915366 Loop: 23 : 2.767823 2.908951 Loop: 24 : 3.090034 2.916496 Loop: 25 : 2.520999 2.900676 Loop: 26 : 2.854596 2.898904 Loop: 27 : 3.274827 2.912827 Loop: 28 : 3.58878 2.936968 Loop: 29 : 2.862528 2.934401 Loop: 30 : 2.987253 2.936163 Loop: 31 : 2.726644 2.929404 Loop: 32 : 2.345068 2.911144 Loop: 33 : 2.849574 2.909278 Loop: 34 : 3.391248 2.923454 Loop: 35 : 2.738562 2.918171 Loop: 36 : 3.244874 2.927246 Loop: 37 : 3.337475 2.938333 Loop: 38 : 2.790049 2.934431 Loop: 39 : 2.308579 2.918384 Loop: 40 : 3.427204 2.931104 Loop: 41 : 2.497448 2.920527 Loop: 42 : 2.562182 2.911995 Loop: 43 : 2.821961 2.909901 Loop: 44 : 2.496715 2.900511 Loop: 45 : 2.627413 2.894442 Loop: 46 : 2.676602 2.889706 Loop: 47 : 2.938307 2.89074 Loop: 48 : 3.024983 2.893537 Loop: 49 : 2.443328 2.884349 Loop: 50 : 3.336588 2.893394 > > # Plot the MC Iteration Path: > xmpOptions("\nNext: Output Results > ") > par(mfrow = c(1, 1)) > mcPrice = cumsum(mc)/(1:length(mc)) > plot(mcPrice, type = "l", main = "Arithmetic Asian Option", + xlab = "Monte Carlo Loops", ylab = "Option Price") > > # Compare with Turnbull-Wakeman Approximation: > TW = TurnbullWakemanAsianApproxOption(TypeFlag = "c", S = 100, SA = 100, + X = 100, Time = 1/12, time = 1/12, tau = 0 , r = 0.1, b = 0.1, + sigma = 0.4)$price > print(TW) NULL > abline(h = TW, col = 2) > > > > graphics::par(get("par.postscript", env = .CheckExEnv)) > cleanEx(); ..nameEx <- "E1-EBMDistribution" > > ### * E1-EBMDistribution > > flush(stderr()); flush(stdout()) > > ### Name: EBMDistribution > ### Title: Exponential Brownian Motion Distributions > ### Aliases: EBMDistribution dlognorm plognorm dgam pgam drgam prgam > ### djohnson pjohnson mnorm mlognorm mrgam mjohnson masian derivative > ### Keywords: math > > ### ** Examples > > ## SOURCE("fBasics.A0-SPlusCompatibility") > ## SOURCE("fOptions.E1-EBMDistribution") > > ## Calculate Log-Normal Density and its Derivaties, > x = exp(seq(-2.8, 1.2, length = 100)) > y0 = dlognorm(x, deriv = 0) > y1 = dlognorm(x, deriv = 1) > y2 = dlognorm(x, deriv = 2) > # Compare with Numerical Differentiation: > par(mfrow = c(2, 2)) > xa = exp(seq(-2.5, 1.5, length = 20)) > plot(x, y0, type = "l", main = "Log-Normal Density") > plot(x, y1, type = "l", main = "1st Derivative") > z = derivative(xa, dlognorm(xa, deriv = 0), deriv = 1) > points(z$x, z$y, col = "steelblue4") > plot(x, y2, type = "l", main = "2nd Derivative") > z = derivative(xa, dlognorm(xa, deriv = 0), deriv = 2) > points(z$x, z$y, col = "steelblue4") > > ## Calculate Reciprocal-Gamma Density and its Derivaties: > alpha = 2; beta = 1 > x = exp(seq(-2.8, 1.2, length = 100)) > y0 = drgam(x, alpha, beta, deriv = 0) > y1 = drgam(x, alpha, beta, deriv = 1) > y2 = drgam(x, alpha, beta, deriv = 2) > # Compare with Numerical Differentiation: > par(mfrow = c(2, 2)) > xa = exp(seq(-2.5, 1.5, length = 20)) > plot(x, y0, type = "l", main = "Rec-Gamma Density") > plot(x, y1, type = "l", main = "1st Derivative") > z = derivative(xa, drgam(xa, alpha, beta, deriv = 0), deriv = 1) > points(z$x, z$y, col = "steelblue4") > plot(x, y2, type = "l", main = "2nd Derivative") > z = derivative(xa, drgam(xa, alpha, beta, deriv = 0), deriv = 2) > points(z$x, z$y, col = "steelblue4") > > ## Calculate Johnson-Type-I Density and its Derivaties: > a = 0.3; b = 1.2; c = -0.2; d = 0.8 > x = exp(seq(-2.8, 1.2, length = 100)) > y0 = djohnson(x, a, b, c, d, deriv = 0) > y1 = djohnson(x, a, b, c, d, deriv = 1) > y2 = djohnson(x, a, b, c, d, deriv = 2) > # Compare with Numerical Differentiation: > par(mfrow = c(2, 2)) > xa = exp(seq(-2.5, 1.5, length = 20)) > plot(x, y0, type = "l", main = "Johnson Type I Density") > plot(x, y1, type = "l", main = "1st Derivative") > z = derivative(xa, djohnson(xa, a, b, c, d, deriv = 0), deriv = 1) > points(z$x, z$y, col = "steelblue4") > plot(x, y2, type = "l", main = "2nd Derivative") > z = derivative(xa, djohnson(xa, a, b, c, d, deriv = 0), deriv = 2) > points(z$x, z$y, col = "steelblue4") > > > > graphics::par(get("par.postscript", env = .CheckExEnv)) > cleanEx(); ..nameEx <- "E2-GammaFunctions" > > ### * E2-GammaFunctions > > flush(stderr()); flush(stdout()) > > ### Name: GammaFunctions > ### Title: Gamma and Related Functions > ### Aliases: GammaFunctions erf Psi igamma cgamma Pochhammer > ### Keywords: math > > ### ** Examples > > ## SOURCE("fBasics.A0-SPlusCompatibility") > ## SOURCE("fOptions.E2-GammaFunctions") > ## SOURCE("fOptions.E3-HypergeometricFunctions") > > ## Calculate Error, Gamma and Related Functions > > ## gamma - > # Abramowitz-Stegun: Figure 6.1 > x = seq(-4.01, 4.01, by = 0.011) > plot(x, gamma(x), ylim = c(-5,5), type = "l", main = "Gamma Function") > lines(x = c(-4, 4), y = c(0, 0)) > > ## Psi - > # Abramowitz-Stegun: Figure 6.1 > x = seq(-4.01, 4.01, by = 0.011) > plot(x, Psi(x), ylim = c(-5, 5), type = "l", main = "Psi Function") > lines(x = c(-4, 4), y = c(0, 0)) > # Note: Is digamma defined for positive values only ? > > ## igamma - > # Abramowitz-Stegun: Figure 6.3. > gammaStar = function(x, a) { igamma(x,a)/x^a } > # ... create Figure as an exercise. > > ## igamma - > # Abramowitz-Stegun: Formula 6.5.12 > # Relation to Confluent Hypergeometric Functions > a = sqrt(2) > x = pi > Re ( (x^a/a) * kummerM(-x, a, 1+a) ) [1] 0.8091978 > Re ( (x^a*exp(-x)/a) * kummerM(x, 1, 1+a) ) [1] 0.8091978 > pgamma(x,a) * gamma(a) [1] 0.8091978 > igamma(x, a) [1] 0.9127168 > > ## cgamma - > # Abramowitz-Stegun: Tables 6.7 > x = 1 > y = seq(0, 5, by = 0.1); x = rep(x, length = length(y)) > z = complex(real = x, imag = y) > c = cgamma(z, log = TRUE) > cbind(y, Re(c), Im(c)) y [1,] 0.0 37.7834389 -3.141593 [2,] 0.1 2.2894121 -1.613142 [3,] 0.2 1.5573513 -1.655890 [4,] 0.3 1.0889377 -1.699432 [5,] 0.4 0.7167914 -1.744147 [6,] 0.5 0.3906299 -1.790386 [7,] 0.6 0.0897932 -1.838472 [8,] 0.7 -0.1954818 -1.888696 [9,] 0.8 -0.4701834 -1.941312 [10,] 0.9 -0.7370080 -1.996537 [11,] 1.0 -0.9974968 -2.054554 [12,] 1.1 -1.2525904 -2.115511 [13,] 1.2 -1.5029110 -2.179524 [14,] 1.3 -1.7489076 -2.246680 [15,] 1.4 -1.9909314 -2.317042 [16,] 1.5 -2.2292757 -2.390650 [17,] 1.6 -2.4641962 -2.467525 [18,] 1.7 -2.6959224 -2.547670 [19,] 1.8 -2.9246637 -2.631078 [20,] 1.9 -3.1506121 -2.717728 [21,] 2.0 -3.3739449 -2.807591 [22,] 2.1 -3.5948260 -2.900633 [23,] 2.2 -3.8134070 -2.996811 [24,] 2.3 -4.0298279 -3.096079 [25,] 2.4 -4.2442183 -3.198390 [26,] 2.5 -4.4566983 -3.303691 [27,] 2.6 -4.6673788 -3.411930 [28,] 2.7 -4.8763624 -3.523053 [29,] 2.8 -5.0837443 -3.637008 [30,] 2.9 -5.2896127 -3.753739 [31,] 3.0 -5.4940491 -3.873193 [32,] 3.1 -5.6971296 -3.995317 [33,] 3.2 -5.8989245 -4.120060 [34,] 3.3 -6.0994994 -4.247368 [35,] 3.4 -6.2989153 -4.377193 [36,] 3.5 -6.4972289 -4.509486 [37,] 3.6 -6.6944932 -4.644197 [38,] 3.7 -6.8907578 -4.781280 [39,] 3.8 -7.0860688 -4.920690 [40,] 3.9 -7.2804696 -5.062381 [41,] 4.0 -7.4740006 -5.206312 [42,] 4.1 -7.6666999 -5.352440 [43,] 4.2 -7.8586032 -5.500723 [44,] 4.3 -8.0497439 -5.651123 [45,] 4.4 -8.2401537 -5.803602 [46,] 4.5 -8.4298621 -5.958121 [47,] 4.6 -8.6188972 -6.114644 [48,] 4.7 -8.8072853 -6.273137 [49,] 4.8 -8.9950513 -6.433565 [50,] 4.9 -9.1822189 -6.595896 [51,] 5.0 -9.3688103 -6.760096 > > ## cgamma - > # Abramowitz-Stegun: Examples 4-8: > options(digits = 10) > gamma(6.38); lgamma(56.38) # 1/2 [1] 232.4367103 [1] 169.8549740 > Psi(6.38); Psi(56.38) # 3/4 [1] 1.772755883 [1] 4.023219877 > cgamma(complex(real = 1, imag = -1), log = TRUE ) # 5 [1] -0.9974967896-4.228631137i > cgamma(complex(real = 1/2, imag = 1/2), log = TRUE ) # 6 [1] 0.4589608331-3.176261615i > cgamma(complex(real = 3, imag = 7), log = TRUE ) # 7/8 [1] -17.02096979-12.85295311i > > > > cleanEx(); ..nameEx <- "E3-HypergeometricFunctions" > > ### * E3-HypergeometricFunctions > > flush(stderr()); flush(stdout()) > > ### Name: HypergeometricFunctions > ### Title: Confluent Hypergeometric Functions > ### Aliases: HypergeometricFunctions kummerM kummerU whittakerM whittakerW > ### hermiteH > ### Keywords: math > > ### ** Examples > > ## SOURCE("fBasics.A0-SPlusCompatibility") > ## SOURCE("fOptions.E2-GammaFunctions") > ## SOURCE("fOptions.E3-HypergeometricFunctions") > ## SOURCE("fOptions.E4-BesselFunctions") > > ## kummerM - > # Abramowitz-Stegun: Formula 13.6.3/13.6.21 > x = c(0.001, 0.01, 0.1, 1, 10, 100, 1000) > nu = 1; a = nu+1/2; b = 2*nu+1 > M = Re ( kummerM(x = 2*x, a = a, b = b) ) > Bessel = gamma(1+nu) * exp(x)*(x/2)^(-nu) * BesselI(x, nu) > cbind(x, M, Bessel) x M Bessel [1,] 1e-03 1.001000625e+00 1.001000625e+00 [2,] 1e-02 1.010062793e+00 1.010062793e+00 [3,] 1e-01 1.106552959e+00 1.106552957e+00 [4,] 1e+00 3.072523445e+00 3.072523445e+00 [5,] 1e+01 1.176648650e+07 1.176648650e+07 [6,] 1e+02 Inf 5.743804144e+83 [7,] 1e+03 Inf Inf > > ## kummerM - > # Abramowitz-Stegun: Formula 13.6.14 > x = c(0.001, 0.01, 0.1, 1, 10, 100, 1000) > M = Re ( kummerM(2*x, a = 1, b = 2) ) > Sinh = exp(x)*sinh(x)/(x) > cbind(x, M, Sinh) x M Sinh [1,] 1e-03 1.001000667e+00 1.001000667e+00 [2,] 1e-02 1.010067001e+00 1.010067001e+00 [3,] 1e-01 1.107013793e+00 1.107013791e+00 [4,] 1e+00 3.194528049e+00 3.194528049e+00 [5,] 1e+01 2.425825972e+07 2.425825972e+07 [6,] 1e+02 Inf 3.612986884e+84 [7,] 1e+03 Inf Inf > # Now the same for complex x: > y = rep(1, length = length(x)) > x = complex(real = x, imag = y) > M = kummerM(2*x, a = 1, b = 2) > Sinh = exp(x)*sinh(x)/(x) > cbind(x, M, Sinh) x M [1,] 1e-03+1i 4.548499759e-01+7.089448316e-01i [2,] 1e-02+1i 4.566647923e-01+7.168434279e-01i [3,] 1e-01+1i 4.751436121e-01+8.016558096e-01i [4,] 1e+00+1i 6.609793442e-01+2.698445505e+00i [5,] 1e+01+1i -7.811089896e+06+2.283908218e+07i [6,] 1e+02+1i Inf+ Infi [7,] 1e+03+1i Inf+ Infi Sinh [1,] 4.548499759e-01+7.089448315e-01i [2,] 4.566647924e-01+7.168434281e-01i [3,] 4.751436117e-01+8.016558082e-01i [4,] 6.609793442e-01+2.698445505e+00i [5,] -7.811089896e+06+2.283908218e+07i [6,] -1.470533212e+84+3.299985009e+84i [7,] NaN+ NaNi > > ## kummerU - > # Abramowitz-Stegun: Formula 13.1.3 > x = c(0.001, 0.01, 0.1, 1, 10, 100, 1000) > a = 1/3; b = 2/3 > U = Re ( kummerU(x, a = a, b = b) ) > cbind(x, U) x U [1,] 1e-03 2.540886147e-01 [2,] 1e-02 2.892416476e-01 [3,] 1e-01 3.794402004e-01 [4,] 1e+00 9.081338106e-01 [5,] 1e+01 3.217004121e+03 [6,] 1e+02 1.780988978e+42 [7,] 1e+03 NaN > > ## whittakerM - > # Abramowitz-Stegun: Example 13 > AS = c(1.10622, 0.57469) > W = c( + whittakerM(x = 1, kappa = 0, mu = -0.4), + whittakerW(x = 1, kappa = 0, mu = -0.4) ) > data.frame(AS, W) AS W 1 1.10622 1.1062175447+0.000000000e+00i 2 0.57469 0.2600649302-4.361603884e-17i > > ## kummerM > # Abramowitz-Stegun: Example 17 > x = seq(0, 16, length = 200) > plot(x = x, y = kummerM(x, -4.5, 1), type = "l", ylim = c(-25,125), + main = "Figure 13.2: M(-4.5, 1, x)") > lines(x = c(0, 16), y = c(0, 0), col = 2) > > > > cleanEx(); ..nameEx <- "E4-BesselFunctions" > > ### * E4-BesselFunctions > > flush(stderr()); flush(stdout()) > > ### Name: BesselFunctions > ### Title: Modified Bessel Functions > ### Aliases: BesselFunctions BesselI BesselK BesselDI BesselDK > ### Keywords: math > > ### ** Examples > > ## SOURCE("fBasics.A0-SPlusCompatibility") > ## SOURCE("fOptions.E4-BesselFunctions") > > ## Bessel I0 and K0 - > # Abramowitz-Stegun: Table 9.8, p. 416-422 > x = c(0.0, 0.01, 0.1, 0.2, 0.5, 1, 2, 5, 10, 20, 50) > data.frame(x, I = exp(-x)*BesselI(x, 0), K = exp(x)*BesselK(x, 0)) x I K 1 0.00 1.00000000000 Inf 2 0.01 0.99007458515 4.7686940285 3 0.10 0.90710092578 2.6823261023 4 0.20 0.82693855163 2.1407573234 5 0.50 0.64503527045 1.5241093858 6 1.00 0.46575960759 1.1444630798 7 2.00 0.30850832255 0.8415682151 8 5.00 0.18354081261 0.5478075643 9 10.00 0.12783333716 0.3916319339 10 20.00 0.08978031188 0.2785448767 11 50.00 0.05656162665 0.1768071559 > # Compare with R's internal function: > # data.frame(x, ratio = BesselI(x, 0) / besselI(x, 0)) > # data.frame(x, ratio = BesselK(x, 0) / besselK(x, 0)) > > ## x = 0: > c(BesselI(0, 0), BesselI(0, 1), BesselI(0, 2), BesselI(0, 5)) [1] 1 0 0 0 > # Compare with R's internal function: > # c(besselI(0, 0), besselI(0, 1), besselI(0, 2), besselI(0, 5)) > c(BesselK(0, 0), BesselK(0, 1), BesselK(0, 2), BesselK(0, 5)) [1] Inf Inf Inf Inf > # Compare with R's internal function: > # c(besselK(0, 0), besselK(0, 1), besselK(0, 2), besselK(0, 5)) > > ## Bessel I2 and K2 - > # Abramowitz-Stegun: Table 9.8, p. 416-422 > x = c(0.0, 0.01, 0.1, 0.2, 0.5, 1, 2, 5, 10, 20, 50) > data.frame(x, I = BesselI(x, 2)/x^2, K = BesselK(x, 2)*x^2) x I K 1 0.00 NaN NaN 2 0.01 1.250010417e-01 1.999950007e+00 3 0.10 1.251041992e-01 1.995039646e+00 4 0.20 1.254171878e-01 1.980497172e+00 5 0.50 1.276245967e-01 1.887545888e+00 6 1.00 1.357476698e-01 1.624838899e+00 7 2.00 1.722371119e-01 1.015039018e+00 8 5.00 7.002245987e-01 1.327235928e-01 9 10.00 2.281518968e+01 2.150981699e-03 10 20.00 9.828196305e+04 2.531817445e-07 11 50.00 1.126572256e+17 8.869829597e-20 > # Compare with R's internal function: > # data.frame(x, ratio = BesselI(x, 0) / besselI(x, 0)) > # data.frame(x, ratio = BesselK(x, 0) / besselK(x, 0)) > # data.frame(x, ratio = BesselI(x, 1) / besselI(x, 1)) > # data.frame(x, ratio = BesselK(x, 1) / besselK(x, 1)) > # data.frame(x, ratio = BesselI(x, 5) / besselI(x, 5)) > # data.frame(x, ratio = BesselK(x, 5) / besselK(x, 5)) > # data.frame(x, ratio = BesselI(x,50) / besselI(x,50)) > # data.frame(x, ratio = BesselK(x,50) / besselK(x,50)) > > > > cleanEx(); ..nameEx <- "E5-EBMAsianOptions" > > ### * E5-EBMAsianOptions > > flush(stderr()); flush(stdout()) > > ### Name: EBMAsianOptions > ### Title: Exponential Brownian Motion Distributions > ### Aliases: EBMAsianOptions MomentMatchedAsianOption > ### MomentMatchedAsianDensity GramCharlierAsianOption AsianOptionMoments > ### DufresneAsianOptionMoments AbrahamsonAsianOptionMoments > ### TurnbullWakemanAsianOptionMoments TolmatzAsianOptionMoments > ### ZhangAsianOption VecerAsianOption ZhangApproximateAsianOption > ### gGemanYor GemanYorAsianOption gLinetzky LinetzkyAsianOption > ### BoundsOnAsianOption CurranThompsonAsianOption > ### RogerShiThompsonAsianOption ThompsonAsianOption TolmatzAsianOption > ### CallPutParityAsianOption WithDividendsAsianOption FuMadanWangTable > ### FusaiTaglianiTable GemanTable LinetzkyTable ZhangTable ZhangLongTable > ### ZhangShortTable > ### Keywords: math > > ### ** Examples > > ## SOURCE("fBasics.A0-SPlusCompatibility") > ## SOURCE("fOptions.E4-EBMAsianOptions") > > ## Examples: > # none ... > > > > cleanEx(); ..nameEx <- "Z1-OptionsTools" > > ### * Z1-OptionsTools > > flush(stderr()); flush(stdout()) > > ### Name: OptionsTools > ### Title: fOptions Tools > ### Aliases: OptionsTools xmpOptions xmpfOptions > ### Keywords: programming > > ### ** Examples > > ## SOURCE("fBasics.A0-SPlusCompatibility") > > ## Not run: > ##D ## xmpfOptions - > ##D # Popup the examples menu: > ##D xmpfOptions() > ## End(Not run) > > > ### *