No es el hecho de que la volatilidad varíe en el tiempo lo que crea el sesgo per se, sino el hecho de que la volatilidad está correlacionada negativamente con el spot. Es decir, a medida que el precio de la acción/índice disminuye, la volatilidad tenderá a aumentar por término medio, y viceversa. La variación de la volatilidad en el tiempo crearía una "sonrisa" más simétrica.
Editar:
Supongamos que tenemos un caso muy sencillo en el que la volatilidad sólo puede tomar dos valores $(\sigma_L,\sigma_H) = (0.10,0.50)$ con una probabilidad del 50-50. Digamos también que la deriva es nula en ambos regímenes. Este es el caso más sencillo de "volatilidad estocástica", si se quiere.
Entonces, el precio de la opción será simplemente la media ponderada al 50% de los dos precios Black-Scholes $$ C = 0.5\ BS(S,X,r,\sigma_L,T)+0.5\ BS(S,X,r,\sigma_H,T) $$ De forma equivalente, la distribución neutral al riesgo del precio logarítmico será la mezcla 50-50 de dos gaussianos con diferentes volatilidades que presenta colas gordas.
Intuitivamente, cuando se está en el dinero, ambas partes de la suma ponderada contribuyen a la incertidumbre, y el vol implícito es aproximadamente la media de los dos vols, alrededor de 0,30. Una gaussiana con esta volatilidad mostrará una masa de probabilidad prácticamente nula más allá de $\pm 1.8$ que es el punto de evento 6-sigma. Sin embargo, la mezcla 50-50 sigue teniendo una masa considerable, ya que para el régimen de alta volatilidad sólo es un evento de 3,5 sigmas. Para imitar esta masa se requiere una volatilidad implícita más alta. Esto es simétrico, por lo que es una "sonrisa".
Puedes verlo gráficamente a continuación, donde he calculado la volatilidad implícita para este ejemplo.
Ahora supongamos que tenemos una "correlación negativa", es decir, seguimos teniendo una mezcla 50-50 pero ahora cuando vol toma el valor "bajo" 0,10 entonces la deriva es +0,10 positiva, pero cuando vol toma el valor "alto" de 0,50 entonces la deriva es -0,10 negativa.
En ese caso, el evento de +6 sigmas no es simétrico al evento de -6 sigmas. De hecho, el vol implícito de un lado convergerá al vol "alto" de 0,50 mientras que el otro lado convergerá al vol "bajo" de 0,10, siguiendo las derivas. Por lo tanto, nos encontramos con un "sesgo" en lugar de una "sonrisa".
.
Vale, ¡esta foto parece un poco rara! Esto se debe a los valores extremos de los parámetros en el ejemplo, y refleja el "peso" que tiene cada distribución en la mezcla en cada punto. En cualquier caso, aquí está el código Python que creó las imágenes para jugar.
# parameters
sH = 0.50 # High vol regime
mH =-0.10 # Drift in high vol regime
sL = 0.10 # Low vol regime
mL =+0.10 # Drift in low vol regime
wH = 0.50 # Mixing weight
# code
import numpy as np
from scipy.stats import norm
from scipy.optimize import root
import matplotlib.pyplot as plt
N = norm(0,1).cdf
n = norm(0,1).pdf
def bs(S, X, r, sigma, T):
d1 = np.log(S/X)+(r+0.5*sigma*sigma)*T
d1 = d1/sigma/np.sqrt(T+1E-10)
d2 = d1 -sigma*np.sqrt(T)
return S*N(d1) -X*np.exp(r*T)*N(d2)
def iv(S, X, r, T, C):
return root(lambda s: bs(S, X, r, s, T)-C, 0.50*np.ones(C.shape)).x
L = 2.5
X = 100.*np.exp(np.linspace(-L, L, 101))
cH = bs(100., X, mH, sH, 1.)
cL = bs(100., X, mL, sL, 1.)
c = wH*cH+(1-wH)*cL
m =np.log1p(wH*(np.exp(mH)-1)+(1-wH)*(np.exp(mL)-1))
v = iv(100., X, m, 1., c)
fg = plt.figure()
ax = fg.add_subplot(111)
ax.plot(np.log(100./X), v)
ax.set_xlim(-L, L)
ax.set_xlabel('log[spot/strike]')
ax.set_ylabel('implied volatility')
ax.grid()