Wikipedia muestra todas las fórmulas: Griegos (finanzas) .
- FX y Equity es idéntico (los dividendos son el segundo tipo de interés)
- Los futuros utilizan el modelo Black (también en el enlace de Wikipedia)
Las configuraciones reales utilizan con frecuencia un cálculo de la theta de la diferencia finita (FD theta) como se muestra en esta respuesta que reproduce la theta de la herramienta de valoración de opciones FX OVML de Bloomberg, así como la theta analítica de Garman Kohlhagen (Black Scholes para FX). Utilizar FD theta tiene al menos dos ventajas:
- BS theta puede superar el valor real de mercado de una opción si el tiempo hasta el vencimiento es corto (véase ici para ver un ejemplo)
- Los días festivos y los fines de semana pueden incluirse fácilmente en el cómputo (el viernes será un theta de 3 días, siempre que el lunes sea laborable)
Pueden verse algunos detalles interesantes sobre theta para Black Scholes ici .
TL;DR
Por último, si interesan las opciones sobre futuros, con frecuencia también se consideran las opciones a plazo. Dado que los futuros se valoran a precios de mercado, no es necesario tener en cuenta la fecha de entrega del futuro. Sin embargo, en el caso de los contratos a plazo, sí es importante.
Puede verlo muy bien en Sitio web de Matlab (donde incluso se puede ejecutar el código sin tener licencia). Encontrará una explicación intuitiva en Wikipedia . Puede reproducirse rápidamente en cualquier lenguaje de programación. A continuación, utilizaré Julia .
Primero necesitamos importar los paquetes relevantes, definir el CDF y el Black pricer. Tenga en cuenta que T y T son necesarios para la fijación de precios con Black a plazo donde T > T.
using Distributions, DataFrames, Dates
N(x) = cdf(Normal(0,1),x)
# generic Black-76 allowing for futures and forwards
function Black(F,K,T,T,rd,)
d1 = ( log(F/K) + 0.5*^2*T ) / (*sqrt(T))
d2 = d1 - *sqrt(T)
c = exp(-rd*T)*(F*N(d1) - K*N(d2))
p = exp(-rd*T)*(K*N(-d2)-F*N(-d1))
return c, p
end
Para las tasas, tenemos que ser coherentes con la implementación de Matlab, que utiliza 30/360 (SIA) en los ejemplos de la página web. Detalles para los Basis
en el intenvset
estructura de los tipos de interés ici . EndTimes es la fracción de año.
# rates
ValuationDate = Date(2014,1,1);
EndDates = Date(2015,1,1);
Rates = 0.03
# Matlab Basis set to 1 is 30/360 (SIA) https://uk.mathworks.com/help/fininst/intenvset.html#namevaluepairarguments
months = Dates.month(EndDates) - Dates.month(ValuationDate) # compute month difference
years = Dates.year(EndDates) - Dates.year(ValuationDate)
days = (years*12+months)*30
T = days/360
println("Days = $days")
println("Disc $(exp(-Rates*T))" )
println("EndTimes = $(T)")
$Matlab \;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\; Julia$
Ahora sólo queda definir los parámetros de las opciones para que coincidan exactamente con Matlab.
# option
Strike = (200,90) # call / put
AssetPrice = 107
Sigma = 0.28
Settle = Date(2014,1,1)
Maturity = Date(2014,10,1)
months = Dates.month(Maturity) - Dates.month(Settle) # compute month difference
years = Dates.year(Maturity) - Dates.year(Settle)
days = (years*12+months)*30
T = days/360
DataFrame(Call = Black.(AssetPrice,Strike,T,T,Rates,Sigma)[1][1],
Put = Black.(AssetPrice,Strike,T,T,Rates,Sigma)[2][2])
$Matlab \;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\; Julia$
Un poco más interesante es comprobar qué ocurre cuando el vencimiento del plazo se fija en una fecha lejana. En Matlab, si ForwardMaturity
la función calcula los precios de las opciones futuras. Si se pasa ForwardMaturity, la función calcula los precios de las opciones a plazo. Para la misma opción, estableciendo ForwardMaturity a 'Jan-1-2032' (puede probarlo usted mismo en la página web de Matlab) dará los siguientes resultados (tenga en cuenta, que el segundo resultado es una opción sobre un futuro (o donde el forward vence al vencimiento de la opción).
$Matlab \;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\; Julia$