2 votos

Determinación del precio de las opciones de venta americanas mediante el árbol binomial en Matlab

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.

1voto

MayahanaMouse Puntos 71

Es es tan simple como tomar el max() . El problema es que te has equivocado.

Debe considerar el máximo entre el valor intrínseco de la opción por un lado, y su valor de continuación descontado (que es una expectativa en el mundo neutral al riesgo) por otro.

Por lo tanto, en su bucle final, debe sustituir la línea

W(j+1,1) = max(K-W(j+2,1),exp(-r*delt)*( p*W(j+2,1) + (1-p)*W(j+1,1) ));

con

W(j+1,1) = max(phi, exp(-r*delt)*( p*W(j+2,1) + (1-p)*W(j+1,1) ));

donde para el nodo del árbol j en la iteración del tiempo n

w = (+1) * (opttype == 0) + (-1) * (opttype ~= 0)    % w = (opttype == 0) ? +1 : -1
S = S0*u^(j)*d^(n-j)
phi = w*(S-K)

Finanhelp.com

FinanHelp es una comunidad para personas con conocimientos de economía y finanzas, o quiere aprender. Puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X