3 votos

Precio de la opción de venta europea con modelo binomial

Este es un ejercicio del libro de Mark Joshi (ejercicio 3.6):

Una acción vale 100. Cada mes su valor aumenta o disminuye por exactamente 10. El bono sin riesgo vale $e^{rt}$ en el momento t años con r igual al 5% El precio de una opción de venta europea a cuatro meses se fijó en 110.

Al final del libro, Joshi proporciona la solución 13.06. Desafortunadamente eso no es lo que encuentro: Yo obtengo 15.22. Como Joshi no muestra su cálculo, me pregunto de dónde viene la diferencia. Utilizo el siguiente Python script para el cálculo:

import math

def get_risk_neutral_prob(S, S1, S2, r, delta_t):
    Sp = max(S1, S2)
    Sm = min(S1,S2)
    if Sm == Sp:
        return 1/2
    return (math.exp(-r*delta_t) * S - Sm)/(Sp-Sm)

def payoff(S):
    return max(110-S, 0)
r = 0.05
delta_t = 1/12

def get_price(S, N):
    if N == 0:
        return payoff(S)
    S1 = S+10
    S2 = S-10
    p = get_risk_neutral_prob(S, S1, S2, r, delta_t)
    return math.exp(-r*delta_t) * (p * get_price(S1, N-1) + (1-p) * get_price(S2,N-1))

print(get_price(100,4))

Como puede ver, mi cálculo es sencillo. Primero calculo la probabilidad de riesgo neutro, y luego el valor esperado descontado del pago, recursivamente.

Durante un mes, lo hice a mano y mi resultado, 10.372, concuerda con lo que el script me dice.

1voto

Alphax Puntos 29

La respuesta fue dada por Chris Taylor: la fórmula para la probabilidad de riesgo neutro estaba desactivada por un signo menos, debería ser $$ p = \frac {e^{r \Delta t} S - S_m}{S_p - S_m} $$

0voto

EOL Puntos 24342

No puedo comentar (baja reputación) así que añado una respuesta. En Python, deberías escribir:

delta_t = 1.0/12

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