El decaimiento theta clásico de los libros de texto muestra que se acelera hasta el vencimiento. Se muestra con frecuencia con respecto al valor de la opción como se muestra a continuación.
Sin embargo, esto sólo es válido para las opciones ATM, porque una opción ITM no valdrá cero al vencimiento, y una opción OTM ya no valdrá nada algún tiempo antes del vencimiento. Por lo tanto, habrá un punto de inflexión y un giro en algún momento tras el cual theta se dirigirá hacia cero.
(FD) La diferencia finita theta (un bump de 1 día y reprice theta) es simple de implementar con el propósito de averiguar theta y su cambio en el tiempo. Se puede mirar aquí para más detalles. En Julia En el caso de que el precio de la divisa sea inferior al precio de mercado, puede utilizar el siguiente código para obtener un marco de datos de theta y su cambio para varios días hasta el vencimiento, manteniendo todo lo demás igual. Este código incluye el modelo theta (libro de texto Black Scholes theta), pero el precio de Black Scholes en sí es suficiente si sólo utiliza FD theta.
#import packages
using Plots, Distributions,DataFrames, PlotThemes, PrettyTables, Interact
# define PDF and CDF
N(x) = cdf(Normal(0,1),x)
n(x) = pdf(Normal(0,1),x)
#define Black Scholes with theta (cp = 1 is call, -1 is put)
function BSM(S,K,t,r,d,, cp)
d1 = ( log(S/K) + (r - d + 1/2*^2)*t ) / (*sqrt(t))
d2 = d1 - *sqrt(t)
opt = cp*exp(-d*t)S*N(cp*d1) - cp*exp(-r*t)*K*N(cp*d2)
theta = (-(S * exp(-d*t)*n(d1)* )/ (2 * sqrt(t)) - r * cp * K * exp(-r*t) * N(cp *d2) +cp*d * S * exp(-d*t)*N(cp *d1))/365
return opt, theta
end
# define inputs
S,K,r,d,,cp_flag = 100,100,0.0,0.02,0.38,1
# compute results
t = 1/365:1/365:42/365
days = 1:1:42
collect(days)
res = BSM.(S,K,reverse(t),r,d,,cp_flag)
val = [x[1] for x in res]
theta_bump = append!([val[i+1]-val[i] for i in 1:1:length(val)-1],(cp_flag==1 ? max(S-K,0) : max(K-S,0))+(-val[end]))
theta_change = append!([theta_bump[i+1]-theta_bump[i] for i in 1:1:length(theta_bump)-1], 0)
# output in dataframe
df= DataFrame("Days"=> reverse(days), "TV" => [x[1] for x in res], "Theta" => [x[2] for x in res], "Theta Bumped" => theta_bump, "Theta Acc" => theta_change)
PrettyTables.pretty_table(df, border_crayon = Crayons.crayon"blue", header_crayon = Crayons.crayon"bold green", formatters = ft_printf("%.4f", [2,3,4,5]))
En el siguiente marco de datos, TV es el valor teórico de una opción de compra, theta es la theta del modelo Black Scholes, theta bumped es la theta de diferencia finita, y theta acc es la aceleración de theta, que se hace cada vez mayor cuanto más se acerca el vencimiento en este ejemplo de ATM (S=K=100).
Como ya tenemos un marco de datos completo, podemos hacer un gráfico interactivo utilizando una sintaxis similar a la utilizada aquí . Puede ver claramente que la forma de la figura del libro de texto anterior sólo es válida para aproximadamente opciones ATM.
Incluyendo la aceleración, se ve lo siguiente para una Llamada OTM:
Llamada ITM
Put OTM (por qué theta puede ser positiva aquí se explica en esta respuesta )
y así sucesivamente...
Otra observación que puede ser interesante: Theta cruza la relación del precio sobre el número de días que quedan hasta el vencimiento (P/N) desde arriba en el nivel más bajo de P/N cuando se traza con el tiempo que queda hasta el vencimiento. Este punto corresponde gráficamente al punto de inflexión descendente de theta.
Para conseguirlo en los diferenciales de calendario, basta con combinar dos posiciones.