Tietokoneharjoitus 4

Tehtävä 5


bs.binomial<-function(S,K,sigma,r,dt,n,type="call")
{
# S stock price
# K strike
# sigma annualized volatility
# r interest rate (annual)
# dt time to expiration (fractions of year)

q<-1/2+r*sqrt(dt/n)/(2*sigma)
u<-1+sigma*sqrt(dt/n)
C<-0
for (j in 0:n){
  snj<-u^j*(2-u)^(n-j)*S
  if (type=="call") Hn<-max(snj-K,0) else Hn<-max(K-snj,0)
  C<-C+choose(n,j)*q^j*(1-q)^(n-j)*Hn 
}
C<-(1+r*dt/n)^(-n)*C

return(C)
}


bs<-function(S,K,sigma,r,dt,type="call")
{
# S stock price
# K strike
# sigma annualized volatility
# r interest rate (annual)
# dt time to expiration (fractions of year)

if (K==0) C<-S
else{
  zplus<-(log(S/K)+(r+sigma^2/2)*dt)/(sigma*sqrt(dt))
  zminus<-zplus-sigma*sqrt(dt)
  C<-S*pnorm(zplus)-K*exp(-r*dt)*pnorm(zminus)
}

if (type=="put") C<-C-S+K*exp(-r*dt)

return(C)
}


moneyness<-seq(0.9,0.95,1)
S<-100
sigma<-0.1
r<-0
dt<-1/12

neet<-seq(100,1000,10)
ratios<-matrix(0,length(neet),length(moneyness))
for (i in 1:length(neet)){
   for (j in 1:length(moneyness)){
        n<-neet[i]
        K<-S/moneyness[j]
        a<-bs.binomial(S,K,sigma,r,dt,n,type="call")
        b<-bs(S,K,sigma,r,dt,type="call")
        ratios[i,j]<-a/b
   }
}
matplot(neet,ratios,type="l")
text(900,0.974,"0.9")
text(850,0.994,"0.95")
text(800,1,"1")