Estoy de acuerdo con @Brian B. Con BS, no puedes tener el problema en (1). Tree, grid, Monte Carlo podrían resultar en errores aunque.
(2) es una razón probable. Acabo de intentar en Julia para ATM, 0 división y tasas más 0.2 vol y tenor de 1 año. Los desplazamientos más pequeños que ~ 0.00008 resultan en un error para Gamma. Delta parece ser menos sensible a esto, y está bien para al menos 1e-7 y se desvía para 1e-8. Así que en cualquier punto intermedio.
No creo que haya un problema serio que requiera mucho pensamiento en el punto exacto en que se desvía. Al menos no si preguntas sobre Black Scholes. En el caso del precio de Monte Carlo, por ejemplo, eso será bastante importante ya que no quieres terminar desplazándote en un área dentro de tu error estándar que solo será ruido.
Personalmente, prefiero desplazarme hacia arriba y hacia abajo (diferencia central) para la mayoría de los griegos. Basado en mi experiencia, esto parece ser también el consenso (o al menos la implementación más usada con más frecuencia). A continuación se muestra una explicación intuitiva de por qué creo que es mejor (en comparación con tu diferencia hacia adelante -> solo desplazamiento hacia arriba).
Considera este ejemplo en el que BSM es una función personalizada para Black Scholes genérico donde el primer $[1]$ índice proporciona el valor de la opción de compra y $[2]$ el delta:
K=10 # precio de ejercicio
t = 1 # 1 año
d = 0 # cero dividendos
rf = 0 # tasas cero
= 0.2 # 20% IVOL
function deltaBumpReprice(S,bump)
up = BSM(S+bump/2,K, t, rf, d, )[1]
down = BSM(S-bump/2,K, t, rf, d, )[1]
delta = BSM(S,K, t, rf, d, )[2]
approx = (up-down)/bump
difference = delta-approx
return approx, delta, difference
end
vs tu único desplazamiento hacia arriba
function deltaBumpRepriceqse(S,bump)
up = BSM(S+bump,K, t, rf, d, )[1]
down = BSM(S,K, t, rf, d, )[1]
delta = BSM(S,K, t, rf, d, )[2]
approx = (up-down)/bump
difference = delta-approx
return approx, delta, difference
end
Ahora asumamos que estamos ATMS (S=K=10) y desplazamos en enteros (1, 2, 3,..., 20) que es obviamente extremo. La tabla muestra el delta aproximado con arriba/abajo, delta, la diferencia entre los dos, una sola aproximación de desplazamiento hacia arriba y la diferencia al delta.
Puedes ver que incluso con desplazamientos locos, el delta con desplazamiento hacia arriba y hacia abajo sigue siendo algo "razonable". ¿Cómo es eso?
Este desplazamiento corresponde a un spot de 4.7 y 14.7 respectivamente, a diferencia de un spot de 9.7 donde se calcula el delta analítico. Ignora el número de desplazamiento, eso es una simplificación ya que utilicé directamente el índice del DataFrame. Sin embargo, la aproximación no es tan mala. El gráfico también muestra qué sucede para un desplazamiento tan grande en tu implementación.
Obviamente, esto es poco realista, pero el desplazamiento hacia arriba y hacia abajo siempre será mejor que desplazarse en una dirección. A continuación se muestra un ejemplo para una opción call OTM.
Por último, repite el mismo ejercicio que arriba para desplazamientos muy pequeños de 0.0000001 hasta 0.001, en desplazamientos de 0.00005.