R/functions.R

Defines functions d1 d2 call.price put.price call.delta put.delta vega call.theta put.theta call.rho put.rho gamma vanna call.payoff call.price.time put.price.time call.theta.time call.delta.stock call.delta.time gamma.stock gamma.time call.payoff.stock.time put.payoff.stock.time call.gamma.stock.time put.gamma.stock.time call.delta.stock.time put.delta.stock.time call.theta.stock.time put.theta.stock.time call.rho.stock.time put.rho.stock.time call.vega.stock.time put.vega.stock.time call.delta.vega.stock

# Hello, world!
#
# This is an example function named 'hello'
# which prints 'Hello, world!'.
#
# You can learn more about package authoring with RStudio at:
#
#   http://r-pkgs.had.co.nz/
#
# Some useful keyboard shortcuts for package authoring:
#
#   Build and Reload Package:  'Ctrl + Shift + B'
#   Check Package:             'Ctrl + Shift + E'
#   Test Package:              'Ctrl + Shift + T'

d1 <- function(stock, strike, sigma, t, rf, div.yield)
{
  (log(stock / strike) + (rf - div.yield + sigma^2/2) * t) / (sigma * sqrt(t))
}

d2 <- function(stock, strike, sigma, t, rf, div.yield)
{
  d1(stock, strike, sigma, t, rf, div.yield) - sigma*sqrt(t)
}

call.price <- function(stock, strike, sigma, t, rf, div.yield)
{

  stock * exp(-div.yield * t) * pnorm(d1(stock, strike, sigma, t, rf, div.yield)) - strike*exp(-rf*t)*pnorm(d2(stock, strike, sigma, t, rf, div.yield))

}

put.price <- function(stock, strike, sigma, t, rf, div.yield)
{

  strike*exp(-rf*t)*pnorm(-d2(stock, strike, sigma, t, rf, div.yield)) - stock*exp(-div.yield*t)*pnorm(-d1(stock, strike, sigma, t, rf, div.yield))

}

############# Options Greeks functions #############
call.delta <- function(stock, strike, sigma, t, rf, div.yield){
  exp(-div.yield*t)*pnorm(d1(stock, strike, sigma, t, rf, div.yield))
}

put.delta <- function(stock, strike, sigma, t, rf, div.yield){
  -exp(-div.yield*t)*pnorm(-d1(stock, strike, sigma, t, rf, div.yield))
}

vega <- function(stock, strike, sigma, t, rf, div.yield){
  stock*exp(-div.yield*t)*dnorm(d1(stock, strike, sigma, t, rf, div.yield))*sqrt(t)
}

call.theta <- function(stock, strike, sigma, t, rf, div.yield){
  -exp(-div.yield*t)*(stock*dnorm(d1(stock, strike, sigma, t, rf, div.yield))*sigma)/
    (2*sqrt(t))-rf*strike*exp(-rf*t)*pnorm(d2(stock, strike, sigma, t, rf, div.yield))+div.yield*stock*exp(-div.yield*t)*pnorm(d1(stock, strike, sigma, t, rf, div.yield))
}

put.theta <- function(stock, strike, sigma, t, rf, div.yield){
  -exp(-div.yield*t)*(stock*dnorm(d1(stock, strike, sigma, t, rf, div.yield))*sigma)/
    (2*sqrt(t))+rf*strike*exp(-rf*t)*pnorm(-d2(stock, strike, sigma, t, rf, div.yield))-div.yield*stock*exp(-div.yield*t)*pnorm(-d1(stock, strike, sigma, t, rf, div.yield))
}

call.rho <- function(stock, strike, sigma, t, rf, div.yield){
  strike*t*exp(-rf*t)*pnorm(d2(stock, strike, sigma, t, rf, div.yield))
}

put.rho <- function(stock, strike, sigma, t, rf, div.yield){
  -strike*t*exp(-rf*t)*pnorm(-d2(stock, strike, sigma, t, rf, div.yield))
}

gamma <- function(stock, strike, sigma, t, rf, div.yield){
  exp(-div.yield*t)*dnorm(d1(stock, strike, sigma, t, rf, div.yield))/(stock*sigma*sqrt(t))
}

vanna <- function(stock, strike, sigma, t, rf, div.yield){
  -exp(div.yield*t)*dnorm(d1(stock, strike, sigma, t, rf, div.yield))*d2(stock, strike, sigma, t, rf, div.yield)/sigma
}


######## analysis functions ########
call.payoff <- function(stock, strike, sigma, t, rf, div.yield){
  call.price(stock, strike, sigma, t, rf, div.yield)
}

call.price.time <- function(stock, strike, sigma, t, rf, div.yield){
  ifelse(!is.na(call.price(stock, strike, sigma, t, rf, div.yield)),
         call.price(stock, strike, sigma, t, rf, div.yield),
         0)
}

put.price.time <- function(stock, strike, sigma, t, rf, div.yield){
  ifelse(!is.na(put.price(stock, strike, sigma, t, rf, div.yield)),
         put.price(stock, strike, sigma, t, rf, div.yield),
         0)
}

call.theta.time <- function(stock, strike, sigma, t, rf, div.yield){
  call.theta(stock, strike, sigma, t, rf, div.yield)
}

call.delta.stock <- function(stock, strike, sigma, t, rf, div.yield){
  call.delta(stock, strike, sigma, t, rf, div.yield)
}

call.delta.time <- function(stock, strike, sigma, t, rf, div.yield){
  call.delta(stock, strike, sigma, t, rf, div.yield)
}

gamma.stock <- function(stock, strike, sigma, t, rf, div.yield){
  gamma(stock, strike, sigma, t, rf, div.yield)
}

gamma.time <- function(stock, strike, sigma, t, rf, div.yield){
  gamma(stock, strike, sigma, t, rf, div.yield)
}

call.payoff.stock.time <- function(stock, strike, sigma, t, rf, div.yield){
  call.price(stock, strike, sigma, t, rf, div.yield)
}

put.payoff.stock.time <- function(stock, strike, sigma, t, rf, div.yield){
  put.price(stock, strike, sigma, t, rf, div.yield)
}

call.gamma.stock.time <- function(stock, strike, sigma, t, rf, div.yield){
  gamma(stock, strike, sigma, t, rf, div.yield)
}

put.gamma.stock.time <- function(stock, strike, sigma, t, rf, div.yield){
  gamma(stock, strike, sigma, t, rf, div.yield)
}

call.delta.stock.time <- function(stock, strike, sigma, t, rf, div.yield){
  call.delta(stock, strike, sigma, t, rf, div.yield)
}

put.delta.stock.time <- function(stock, strike, sigma, t, rf, div.yield){
  put.delta(stock, strike, sigma, t, rf, div.yield)
}

call.theta.stock.time <- function(stock, strike, sigma, t, rf, div.yield){
  call.theta(stock, strike, sigma, t, rf, div.yield)
}

put.theta.stock.time <- function(stock, strike, sigma, t, rf, div.yield){
  put.theta(stock, strike, sigma, t, rf, div.yield)
}

call.rho.stock.time <- function(stock, strike, sigma, t, rf, div.yield){
  call.rho(stock, strike, sigma, t, rf, div.yield)
}

put.rho.stock.time <- function(stock, strike, sigma, t, rf, div.yield){
  put.rho(stock, strike, sigma, t, rf, div.yield)
}

call.vega.stock.time <- function(stock, strike, sigma, t, rf, div.yield){
  vega(stock, strike, sigma, t, rf, div.yield)
}

put.vega.stock.time <- function(stock, strike, sigma, t, rf, div.yield){
  vega(stock, strike, sigma, t, rf, div.yield)
}

call.delta.vega.stock <- function(stock, strike, sigma, t, rf, div.yield){

}
wumingyue123/optionfunctions documentation built on May 5, 2019, 5:59 p.m.