The optionstrat package provides full functionality for
analyzing option greeks and option strategies. All option analytics are
calculated using the Black-Scholes-Merton option pricing model.
##1. Option Greek Calculations
The following functions may be used to calculate all of the option
greeks as well as the option premium and provide the information in a
data.frame format:
opteval(s, x, sigma, t, r, d = 0)calleval(s, x, sigma, t, r, d = 0)puteval(s, x, sigma, t, r, d = 0)Alternatively, these functions will return a specific option greek:
calldelta(s, x, sigma, t, r, d = 0)putdelta(s, x, sigma, t, r, d = 0)callgamma(s, x, sigma, t, r, d = 0)putgamma(s, x, sigma, t, r, d = 0)calltheta(s, x, sigma, t, r, d = 0)puttheta(s, x, sigma, t, r, d = 0)callrho(s, x, sigma, t, r, d = 0)putrho(s, x, sigma, t, r, d = 0)optiongamma(s, x, sigma, t, r, d = 0)optionrho(s, x, sigma, t, r, d = 0)lambda(type = "call", s, x, sigma, t, r, d = 0)Arguments:
s Spot price of the underlying assetx Strike price of the optionsigma Annualized standard deviation of the underlying
asset returnst Time to expiration in years, use
tdiff(date1, date2, "years")r Continuously compounded risk-free rate, use
r.cont(r, n)d Continuously compounded dividend yield, use
r.cont(r, n)Additionally:
callgreek(greek = c("delta", "gamma", "theta", "vega", "rho", "premium"), s, x, sigma, t, r, d = 0))putgreek(greek = c("delta", "gamma", "theta", "vega", "rho", "premium"), s, x, sigma, t, r, d = 0))Arguments:
greek Character string. Specific option greek to be
calculateds Spot price of the underlying assetx Strike price of the optionsigma Annualized standard deviation of the underlying
asset returnst Time to expiration in years, use
tdiff(date1, date2, "years")r Continuously compounded risk-free rate, use
r.cont(r, n)d Continuously compounded dividend yield, use
r.cont(r, n)##2. Plot Option Strategies
The following functions may be used to plot specific option strategies:
plotbullcall(s, x1, x2, t, r, sigma, sigma2 = sigma, d = 0, ll = 0.75, ul=1.25, xlab = "spot", ylab = "profit/loss", main = "Bull Call Spread")plotbearcall(s, x1, x2, t, r, sigma, sigma2 = sigma, d = 0, ll = 0.75, ul=1.25, xlab = "spot", ylab = "profit/loss", main = "Bear Call Spread")plotbullput(s, x1, x2, t, r, sigma, sigma2 = sigma, d = 0, ll = 0.75, ul=1.25, xlab = "spot", ylab = "profit/loss", main = "Bull Put Spread")plotbearput(s, x1, x2, t, r, sigma, sigma2 = sigma, d = 0, ll = 0.75, ul=1.25, xlab = "spot", ylab = "profit/loss", main = "Bear Put Spread")Arguments:
s Spot price of the underlying assetx1 Lower option strike pricex2 Higher option strike pricet Years until expirationr Annual continuously compounded risk-free ratesigma Implied volatility of the lower optionsigma2 Implied volatility of the higher optiond Annual continuously compounded dividend yieldll lower limit of the plot, set in terms of percent of
the spot (price/spot)ul upper limit 0f the plot, set in terms of percent of
the spot (price/spot)Additional plotting function:
plotvertical(options = c("call", "put"), s, x1, x2, t, r, sigma, sigma2 = sigma, d = 0, ll = 0.75, ul = 1.25, xlab = "spot", ylab = "profit/loss", main = "Vertical Spread")Arguments:
options Character string. Designate the type of both
optionss Spot price of the underlying assetx1 Strike price of the short option in the vertical
spreadx2 Strike price of the long option in the vertical
spreadt Years until expirationr Annual continuously compounded risk-free ratesigma Implied volatility of the short optionsigma2 Implied volatility of the long optiond Annual continuously compounded dividend yieldll lower limit of the plot, set in terms of percent of
the spot (price/spot)ul upper limit 0f the plot, set in terms of percent of
the spot (price/spot)Additional plotting function:
plotdv(s, x1, x2, x3, x4, t, r, sigma, sigma2 = sigma, sigma3 = sigma, sigma4 =sigma, d = 0, ll = 0.75, ul = 1.25, xlab = "spot", ylab = "Profit/Loss", main = "Double Vertical Spread")Arguments:
s Spot price of the underlying assetx1 Strike price of the lower strike (long) put
optionx2 Strike price of the higher strike (short) put
optionx3 Strike price of the lower strike (short) call
optionx4 Strike price of the higher strike (long) call
optiont Years until expirationr Annual continuously compounded risk-free ratesigma Implied volatility of the lower strike (long) put
option (annualized)sigma2 Implied volatility of the higher strike (short)
put option (annualized)sigma3 Implied volatility of the lower strike (short)
call option (annualized)sigma4 Implied volatility of the higher strike (long)
call option (annualized)d Annual continuously compounded dividend yieldll lower limit of the plot, set in terms of percent of
the spot (price/spot)ul upper limit 0f the plot, set in terms of percent of
the spot (price/spot)##3. Vertical Spread Analytics
Vertical Spread Analytics
This function calculates the key analytics of a vertical spread and returns the ouput as a data.frame:
vertical(options = c("call", "put"), s, x1, x2, t, r, sigma, sigma2 = sigma, vol = sigma, d = 0)Arguments:
options Character string, specify whether the spread is
a call spread or put spreads Spot price of the underlying assetx1 Strike price of the short optionx2 Strike price of the long optiont Time to expiration in yearsr Annual continuously compounded risk-free ratesigma Implied volatility of the short optionsigma2 Implied volatility of the long option, default =
sigmavol Input for the volatility of the underlying asset,
default = sigmad Annual continuously compounded dividend yieldDetails:
options = “call” , (x1 < x2) : Bear
Call Credit Spreadoptions = “call” , (x1 > x2) : Bull
Call Debit Spreadoptions = “put” , (x1 < x2) : Bear Put
Debit Spreadoptions = “put” , (x1 > x2) : Bull Put
Credit SpreadDouble Vertical Credit Spread Analytics
This function calculates the key analytics of a double vertical credit spread and returns the output as a data.frame:
dv(s, x1, x2, x3, x4, t, r, sigma, sigma2 = sigma, sigma3 = sigma, sigma4 = sigma, vol = sigma, d = 0)Arguments:
s Spot price of the underlying assetx1 Strike price of the lower strike (long) put
optionx2 Strike price of the higher strike (short) put
optionx3 Strike price of the lower strike (short) call
optionx4 Strike price of the higher strike (long) call
optiont Years until expirationr Annual continuously compounded risk-free ratesigma Implied volatility of the lower strike (long) put
option (annualized)sigma2 Implied volatility of the higher strike (short)
put option (annualized)sigma3 Implied volatility of the lower strike (short)
call option (annualized)sigma4 Implied volatility of the higher strike (long)
call option (annualized)vol Input for the volatility of the underlying asset,
default = sigmad Annual continuously compounded dividend yield##4. Probability Functions
The “Probability Below” function has two separate possible operations:
prob.below(spot, upper, mean = 0, asd = 0, dsd = 0, dte = 0, p, quantile = FALSE)Arguments:
spot Current price of the underlying assetlower Lower price of the price rangemean The average daily price movement, default = 0asd Annualized standard deviationdsd Daily standard deviation of the underlying returns
(Annual vol/sqrt(256)), used in conjunction with the dte
parameter as an alternative to the asd parameterdte Days until expiration, designated time framep Designated probabilityquantile Logical. If True, calculates the price the
asset will remain below, given the designated probabilityThe “Probability Above” function has two separate possible operations:
prob.above(spot, lower, mean = 0, asd = 0 ,dsd = 0, dte = 0, p, quantile = FALSE)Arguments:
spot Current price of the underlying assetlower Lower price of the rangemean The average daily price movement, default = 0asd Annualized standard deviationdsd Daily standard deviation of the underlying returns
(Annual vol/sqrt(256)), used in conjunction with the dte
parameter as an alternative to the asd parameterdte Days until expiration, designated time framep Designated probabilityquantile Logical. If True, calculates the price the
asset will remain above, given the designated probabilityThe “Probability Between”
This function has two separate possible operations:
prob.btwn(spot, lower, upper, mean = 0, asd = 0, dsd = 0, dte = 0, p, quantile = FALSE)Arguments:
spot Current price of the underlying assetlower Lower price of the price rangeupper Upper price of the price rangemean The average daily price movement, default = 0asd Annualized standard deviationdsd Daily standard deviation of the underlying returns
(Annual vol/sqrt(256)), used in conjunction with the dte
parameter as an alternative to the asd parameterdte Days until expiration, designated time framep Designated probabilityquantile Logical. If True, calculates the price the
asset will remain above, given the designated probability##5. Auxiliary Functions
The optionstrat package provides additional functions for calculating the implied volatility of either a call or put option, numerical time differences, and converting a nominal rate into a continuously compounded rate.
Implied Volatility:
iv.calc(type, price, s, x, t, r, d=0)
When applying this function over the rows of a dataframe, run it iteratively:
for(i in 1:nrow(dataframe)){ dataframe$iv[i] <- iv.calc(type = "put", price = dataframe$putprice[i], s = atm, x = dataframe$strike[i], t = ttm, r = rate) }
Arguments:
type The type of option, either “call” or “put”price The option premiums The spot price of the underlying assetx The strike price of the optiont Time to expiration (in years)r The continuously-compounded risk-free rated The dividend yield of the underlying assetNumerical Time Difference:
tdiff(date1, date2, period = c("days", "years"))Continuously Compounded Rate Conversion:
r.cont(r, n)Arguments:
r The nominal rate of interestn The number of compounding periods in a yearThe optionstrat package is provided free of charge to
the general public. The indicators, strategies, calculations, functions
and all other features are for educational purposes only and should not
be construed as investment advice.