u<-0.1 d<--0.1 S0<-100 T<-2 K<-80 VE<-matrix(rep(0,(T+1)*(T+1)),nrow=T+1, ncol=T+1) #VE[i,k] = VE_{k-1}[S_(k-1)= S0(1+u)^(i-1)(1+d)^(k-i)], k in {1,...,T+1}, i in {1,...,k} phiE<-matrix(rep(0,T*T),nrow=T, ncol=T) #phiE[i,k] = phi_k[S_(k-1) = S0(1+u)^(i-1)(1+d)^(k-i)], k in {1,...,T}, i in {1,...,k} thetaE<-matrix(rep(0,T*T),nrow=T, ncol=T) #thetaE[i,k] = theta_k[S_(k-1) = S0(1+u)^(i-1)(1+d)^(k-i)], k in {1,...,T}, i in {1,...,k} VA<-matrix(rep(0,(T+1)*(T+1)),nrow=T+1, ncol=T+1) #VA[i,k] = VA_{k-1}[S_(k-1)= S0(1+u)^(i-1)(1+d)^(k-i)], k in {1,...,T+1}, i in {1,...,k} phiA<-matrix(rep(0,T*T),nrow=T, ncol=T) #phiA[i,k] = phi_k[S_(k-1) = S0(1+u)^(i-1)(1+d)^(k-i)], k in {1,...,T}, i in {1,...,k} thetaA<-matrix(rep(0,T*T),nrow=T, ncol=T) #thetaE[i,k] = theta_k[S_(k-1) = S0(1+u)^(i-1)(1+d)^(k-i)], k in {1,...,T}, i in {1,...,k} for (k in 0:T){ VE[k+1,T+1]<-max(S0*(1+u)^k*(1+d)^(T-k)-K,0) #Payoff at time T of the European call option VA[k+1,T+1]<-max(S0*(1+u)^k*(1+d)^(T-k)-K,0) #Payoff at time T of the American call option } for(j in 1:T){ for(i in 1:(T+1-j)){ thetaE[i,T+1-j]<-(VE[i+1,T+2-j]-VE[i,T+2-j])/(S0*(1+u)^(i-1)*(1+d)^(T+1-j-i)*(u-d)) thetaA[i,T+1-j]<-(VA[i+1,T+2-j]-VA[i,T+2-j])/(S0*(1+u)^(i-1)*(1+d)^(T+1-j-i)*(u-d)) phiE[i,T+1-j]<-VE[i+1,T+2-j]-((VE[i+1,T+2-j]-VE[i,T+2-j])*(1+u)/(u-d)) phiA[i,T+1-j]<-VA[i+1,T+2-j]-((VA[i+1,T+2-j]-VA[i,T+2-j])*(1+u)/(u-d)) VE[i,T+1-j]<-phiE[i,T+1-j]+thetaE[i,T+1-j]*S0*(1+u)^(i-1)*(1+d)^(T+1-j-i) VA[i,T+1-j]<-max(phiE[i,T+1-j]+thetaE[i,T+1-j]*S0*(1+u)^(i-1)*(1+d)^(T+1-j-i),max(S0*(1+u)^(i-1)*(1+d)^(T+1-j-i)-K,0)) } } print(thetaE) print(phiE) print(VE) print(VA)