# 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){
}
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.