% 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)
© 2012 Netvalue. Todos los derechos reservados.