Así que estoy tratando de resolver la ecuación de black scholes utilizando un modelo de diferencias finitas, pero estoy obteniendo una respuesta que está fuera y estoy teniendo problemas para entender por qué.
Este es el resultado para una opción con K = 100,0, r = 0,12 y sigma = 0,10
El lado izquierdo está más alto de lo que debería, y debería empezar plano, pero el lado derecho está bastante cerca. Esta es la ecuación que estoy resolviendo:
$$ - \frac{\partial}{\partial t} V(t,s) + r\ s\ \frac{\partial}{\partial s} V(t,s) + \frac{1}{2}\ \sigma^2\ s^2\ \frac{\partial^2}{\partial s^2} V(t,s) - r\ V(t,s) = 0 $$
Aquí hay un gráfico que compara la solución con un gráfico de valores de la fórmula discretizada, la línea azul son los valores correctos, y la línea amarilla es lo que estoy obteniendo. Esto es a la expiración con t=1
def euro_call_sym(S, K, T, r, sigma):
N = Normal('x', 0.0, 1.0)
d1 = (sympy.ln(S / K) + (r + 0.5 * sigma ** 2) * T) / (sigma * sympy.sqrt(T))
d2 = (sympy.ln(S / K) + (r - 0.5 * sigma ** 2) * T) / (sigma * sympy.sqrt(T))
call = (S * cdf(N)(d1) - K * sympy.exp(-r * T) * cdf(N)(d2))
return call
Para generar mi resultado no estoy usando ninguna condición de contorno, con derivadas de un lado de la izquierda en un punto del borde derecho y derivadas centradas en el resto.
¿Alguien sabe qué condiciones de contorno arreglarían el comportamiento de la parte izquierda de la gráfica?