Basado en este tema: ¿Cómo derivar la distribución de probabilidad implícita a partir de las volatilidades de B-S?
Estoy tratando de implementar la fórmula de Breeden-Litzenberger para calcular las densidades de riesgo implícitas del mercado neutral para el S&P 500 para algunas fechas de comilla. Los pasos que sigo son los siguientes:
Paso 1: Extraer las call_strikes c_strikes
para una madurez T dada y los precios de mercado correspondientes css
.
Paso 2: Una vez que tengo las huelgas y los precios de mercado, calculo las volatilidades implícitas a través de la función ImplieVolatilities.m
. Estoy 100% seguro de que esta función funciona.
Paso 3: A continuación, interpolar la curva de volatilidad implícita utilizando el comando Matlab interp1
. Ahora, el vector xq
es la cuadrícula de huelgas y el vector vq
las volatilidades implícitas interp oladas correspondientes.
Paso 4: Dado que tengo la curva de volatilidad, puedo calcular la densidad implícita del mercado: \begin{align} f(K) &= e^{rT} \frac{\partial^2 C(K,T)}{\partial K^2} \\ &\approx e^{rT} \frac{C(K+\Delta_K,T)-2C(K,T)+C(K-\Delta_K, T)}{(\Delta_K)^2} \end{align} donde $\Delta_K = 0.2$ es el tamaño de la cuadrícula de huelga. Solo muestro la parte principal del programa de Matlab:
c_strikes = Call_r_strikes(find(imp_vols > 0));
css = Call_r_prices(find(imp_vols > 0));
impvolss = ImpliedVolatilities(S,c_strikes,r,q,Time,0,css); %volatilidades implícitas
xq = (min(c_strikes):0.2:max(c_strikes)); %cuadrícula de huelgas
vq = interp1(c_strikes,impvolss,xq); %valores interpolados %volatilidades implícitas interpoladas
f = zeros(1,length(xq)); %densidad neutral al riesgo
function [f] = secondDerivativeNonUniformMesh(x, y)
dx = diff(x); %tamaño de la cuadrícula (uniforme)
dxp = dx(2:end);
d2k = dxp.^2; %tamaño de cuadrícula al cuadrado
f = (1./d2k).*(y(1:end-2)-2*y(2:end-1)+y(3:end));
end
figure(2)
plot(xq,f);
Nota: blsprice
es una función interna de Matlab por lo que definitivamente debería funcionar. Esta es la pdf neutral al riesgo para los puntos interiores:
Los datos La siguiente tabla muestra los datos de las opciones (columna izquierda: huelgas, medio: precios de mercado y columna derecha: volatilidades implícitas):
650 387.5 0.337024
700 346.45 0.325662
750 306.8 0.313846
800 268.95 0.302428
850 232.85 0.290759
900 199.15 0.279979
950 168.1 0.270041
975 153.7 0.265506
1000 139.9 0.260885
1025 126.15 0.255063
1050 112.9 0.248928
1075 100.7 0.243514
1100 89.45 0.238585
1125 79.25 0.234326
1150 69.7 0.229944
1175 60.8 0.22543
1200 52.8 0.221322
1225 45.8 0.21791
1250 39.6 0.21486
1275 33.9 0.21154
1300 28.85 0.208372
1325 24.4 0.205328
1350 20.6 0.202698
1375 17.3 0.200198
1400 13.35 0.193611
1450 9.25 0.190194
1500 6.55 0.188604
1550 4.2 0.184105
1600 2.65 0.180255
1650 1.675 0.177356
1700 1.125 0.176491
1800 0.575 0.177828
$T = 1.6329$ es el tiempo hasta el vencimiento, $r = 0.009779$ la tasa de interés libre de riesgo y $q = 0.02208$ el rendimiento por dividendo. El precio spot $S = 1036.2$.
Cálculo de la tasa de interés libre de riesgo y el rendimiento por dividendo a través de la paridad Put-Call $r$ es la tasa de interés libre de riesgo correspondiente al vencimiento $T$ y $q$ es el rendimiento por dividendo. En la implementación numérica, derivamos $r$ y $q$ nuevamente utilizando la paridad Put-Call. Con ese fin, asumimos la siguiente relación lineal: $$f(K) = \alpha K-\beta,$$ donde $\alpha = e^{-rT}$ y $-e^{-qT}S(0) = \beta$, y $f(K) = P(K,T)-C(K,T)$. Las constantes $\alpha$ y $\beta$ se calculan realizando una regresión lineal. En consecuencia, la tasa de interés libre de riesgo $r$ y el rendimiento por dividendos $q$ se obtienen entonces por \begin{align} r &= \frac{1}{T}\ln\left(\frac{1}{\alpha}\right), \nonumber \\ q &= \frac{1}{T} \ln \left(\frac{-S(0)}{\beta}\right). \nonumber \end{align>
0 votos
¿Podrías decirme por favor de dónde obtuviste los datos? Estoy teniendo dificultades para encontrar el precio de mercado de opciones históricas, dado un precio de ejercicio.