% Binomial model – Equity Derivatives % Antonio Rivela 2009 1; %calculates option based on FFT clear all; global r; global v; global N; global T; %———- r=0.05; %annualized risk free rate T=1; %no of years K=100; %strike S=100; %current price v=0.28; %annual volatility CallPutFlag=’c'; N=25; %time steps %———- Rf=(1+r)^(T/N); %risk free rate for the time step %compute Ru and Rd function [ret]=RuRdEqn(x) tmpvec=zeros(2,1); Ru=x(1); Rd=x(2); global r; global v; global N; global T; dt=T/N; rdt=r*dt; vdt=v*(dt^0.5); tmpvec(1)=0.5*Ru+0.5*Rd-(1+rdt); tmpvec(2)=0.5*Ru*Ru+0.5*Rd*Rd-vdt*vdt-(1+rdt)^2; ret=tmpvec; endfunction res=fsolve(‘RuRdEqn’,[.05 .05]); res=sort(res); Rd=res(1); Ru=res(2); qu=(Rf-Rd)/(Ru-Rd); qd=(Ru-Rf)/(Ru-Rd); Cmat=zeros(N+1,N+1); Cmat(1,1)=S; for i=1:N, for j=1:i, parentprice=Cmat(j,i); Cmat(j,i+1)=Ru*parentprice; Cmat(j+1,i+1)=Rd*parentprice; end end Cmat; if CallPutFlag==’c', CN=max(Cmat(:,N+1)-K,0); else CN=max(K-Cmat(:,N+1),0); endif q=CN*0; q(1)=qu; q(2)=qd; q=q/Rf; C0 = ifft( fft(CN).*(((N+1)*ifft(q)).^N) ); option_price=real(C0(1)) %bsanalyticprice=BlackScholesPrice(CallPutFlag,S,K,T,r,v)
