binomialCost_Call.R

nate — Jul 2, 2014, 11:29 AM

binomialCost <- function(S, K, sigma, r, delta, h, T=1) {
  if(T!=1) {  r = r*T; h = h*T; delta = delta*T; sigma = sigma*sqrt(T) }

  u = exp((r-delta)/h + sigma*sqrt(1/h)); d = exp((r-delta)/h - sigma*sqrt(1/h))
  p = (exp((r-delta)/h) - d)/(u-d)

  cost <- function(node) {
    if(length(node)==h) return(max(0,Sundn(node) - K))
    else return(max(exp(-(r-delta)/h)*(p*cost(c(node,1)) + (1-p)*cost(c(node,0))),0))
  }

  Sundn <- function(node) {
    un = sum(node); dn = length(node) - un
    S*u^un*d^dn
  }

  cost(numeric(0))
}

costs <- numeric(0)

for(i in 1:18) { costs = c(costs,binomialCost(S=41,K=40,sigma=0.3,r=0.08,delta=0,h=i,T=1)) }
plot(costs,col="blue", type='l')

plot of chunk unnamed-chunk-1