Actualmente estoy completando una asignación de Finanzas Computacionales, y estoy tratando de averiguar cómo alterar este código de Matlab que los precios de una opción de compra o venta europea, con el fin de precio de una opción de venta americana. Honestamente pensé que sería tan simple como colocar un max()
en el paso de recursión hacia atrás. No quiero que me proporcione el código alterado, ya que prefiero aprender, pero he estado pensando en esto durante un tiempo y estoy en una encrucijada. He dejado mi código alterado hasta ahora con la esperanza de que puedas indicarme la dirección correcta.
function price = tree_slow(S0, K, T, r, sigma, opttype, Nsteps)
%
% S0 - current stock price
% K - strike
% T - expiry time
% r - interest rate
% sigma - volatility
% opttype - 0 for a call, otherwise a put
% Nsteps - number of timesteps
%Output
% price : option price
%Practical 1: compute the timestep size (Delta t) and tree parameters
delt = T/Nsteps;
u = exp(sigma * sqrt(delt) );
d = 1./u;
a = exp( r*delt );
p = (a - d)/(u - d);
%vector of payoff and option price in the tree
W = zeros(Nsteps+1,1);
%Practical 1: compute the S value at time T and store it in W
for j=0:Nsteps
W(j+1,1) = S0*u^(j)*d^(Nsteps -j);
end
%Practical 1: compute the payoff
if(opttype == 0)
W = max(W-K,0);
else
W = max(K-W,0);
end
%Practical 2: fill in the backward recursion
for n=Nsteps-1:-1:0%timeloop
%loop over all possible S levels at time t_n
for j=0:n
%instruction: complete the expectation formula
W(j+1,1) = max(K-W(j+2,1),exp(-r*delt)*( p*W(j+2,1) + (1-p)*W(j+1,1) ));
end
end
%instruction: fill in with the right index
price = W(1);
0 votos
Salvo los dividendos y el interés sin riesgo, las puts americanas y europeas deberían tener el mismo valor. Poner un max() implicaría que tienes una opción "lookback" que te permite elegir retroactivamente cuándo ejercer la opción. El tipo de interés puede suponer una diferencia, aunque pequeña.