Pricing Equity Derivatives with Extensions of Black-Scholes

Algorithms to price American and European equity options, convertible bonds and a variety of other financial derivatives. It uses an extension of the usual Black-Scholes model in which jump to default may occur at a probability specified by a power-law link between stock price and hazard rate as found in the paper by Takahashi, Kobayashi, and Nakagawa (2001) . We use ideas and techniques from Andersen and Buffum (2002) and Linetsky (2006) .

ragtop prices equity derivatives using variants of the famous Black-Scholes model, with special attention paid to the case of American and European exercise options and to convertible bonds. To install the development version, use the command



Basic Usage

You can price american and european exercise options, either individually, or in groups. In the simplest case that looks like this for European exercise

blackscholes(c(CALL, PUT), S0=100, K=c(100,110), time=0.77, r = 0.06, vola=0.20)
#> [1] 9.326839 9.963285
#> $Delta
#> [1]  0.6372053 -0.5761608
#> $Vega
#> [1] 32.91568 34.36717

and like this for American exercise

american(PUT, S0=100, K=c(100,110), time=0.77, const_short_rate = 0.06, const_volatility=0.20)
#> A100_281_0 A110_281_0 
#>    5.24386   11.27715

Including Term Structures

There are zillions of implementations of the Black-Scholes formula out there, and quite a few simple trees as well. One thing that makes ragtop a bit more useful than most other packages is that it treats dividends and term structures without too much pain. Assume we have some nontrivial term structures and dividends

## Dividends
divs = data.frame(time=seq(from=0.11, to=2, by=0.25),
                  fixed=seq(1.5, 1, length.out=8),
                  proportional = seq(1, 1.5, length.out=8))
## Interest rates
disct_fcn = ragtop::spot_to_df_fcn(data.frame(time=c(1, 5, 10), 
                                              rate=c(0.01, 0.02, 0.035)))
## Default intensity
disc_factor_fcn = function(T, t, ...) {
  exp(-0.03 * (T - t)) }
surv_prob_fcn = function(T, t, ...) {
  exp(-0.07 * (T - t)) }
## Variance cumulation / volatility term structure
vc = variance_cumulation_from_vols(
paste0("Cumulated variance to 18 months is ", vc(1.5, 0))
[1] "Cumulated variance to 18 months is 0.369473684210526"

then we can price vanilla options

[1] 62.55998
[1] 0.7977684
[1] 52.21925

American exercise options

    callput = TSLAMarket$options[400,'callput'], 
    S0 = TSLAMarket$S0, 
    time = TSLAMarket$options[400,'time'],

We can also find volatilities of European exercise options

    option_price=19, callput = PUT, 
    S0 = 185.17,K=182.50, 
    time = 1.12,
[1] 0.1133976

as well as American exercise options

    option_price=19, callput = PUT, 
    S0 = 185.17,K=182.50, 
    time = 1.12,
[1] 0.113407

More Sophisticated Calibration

You can also find more complete calibration routines in ragtop. See the vignette or the documentation for fit_variance_cumulation and fit_to_option_market.

Technical Documentation

The source for the technical paper is in this repository. You can also find the pdf here

Travis-CI BuildStatus


ragtop 1.0.0 (CRAN)

After 2 stable years, ragtop is advancing to version 1.0. The following minor changes were made since the 0.5 release:

  • Added a recovery_fcn to the bond objects that reads the previously unused recovery_rate variable. The implicit finite difference solver is able to use recovery_fcn to set default-conditional values on the grid.
  • Documentation now includes more hyperlinks.
  • Added a file to track changes to the package.

ragtop 0.5 (CRAN)

The initial version of the package, released in 2016.

Reference manual

It appears you don't have a PDF plugin for this browser. You can click here to download the reference manual.


1.1.1 by Brian K. Boonstra, a year ago

Browse source code at

Authors: Brian K. Boonstra

Documentation:   PDF Manual  

Task views: Empirical Finance

GPL (>= 2) license

Depends on limSolve, futile.logger, methods

Suggests testthat, roxygen2, knitr, rmarkdown, reshape2, stringr, ggplot2, MASS, RColorBrewer, BondValuation, R.cache, Quandl

See at CRAN