6 votos

¿Bakshi, Kapadia y Madan (2003) VIX enfoque de construcción de subestimar la volatilidad?

A partir de un documento que en breve se aborda un enfoque alternativo para la VIX-como el índice de construcción:

enter image description here

enter image description here

Para probar este enfoque, he construido un falso libro de B&S opciones con la constante volatilidad igual a $\sigma=20\%$, $0\%$ tasa libre de riesgo y $0\%$ de costo de llevar. Me he centrado mi atención en $T=15$ días a la madurez (aproximadamente $0.0411$ años $365$ base).

enter image description here

A partir de la suposición de que Bakshi, Kapadia y Madan (2003) el enfoque es correcto, se debe obtener como resultado un VIX-como objeto cuyo valor es igual a $20\%$ si se aplica la fórmula para el libro anterior.

De lo parcial momentos para VIX-como valor falso $\sigma=20\%$ opciones:

H1  =   0,001647398
H2  =   -4,6183E-06
H3  =   7,30375E-06
mu  =   -0,000823234
VAR =   0,040070196
VIX =   sqrt(VAR) = 20%

Mi código de VBA así que usted puede fácilmente reproducir mis resultados:

Public Function VAR_T(F As Double, K_C As Range, K_P As Range, C As Range, P As Range, rf As Double, t As Double) As Double

    ' F         Underlying forward value
    ' K_C       Range of Call options' strike prices
    ' K_P       Range of Put options' strike prices
    ' C         Range of Call options' prices (same extent of K_C is mandatory)
    ' P         Range of Put options' prices (same extent of K_P is mandatory)
    ' rf        Risk free rate (as instance of EUR, EONIA spot is suggested)
    ' t         Time to expiry in years on 365 basis

    Dim kH1 As Double
    Dim kmu_t As Double

    kH1 = H1_T(F, K_C, K_P, C, P)
    kmu_t = mu_T(F, K_C, K_P, C, P, rf, t)
    VAR_T = (Exp(rf * t) * kH1 - (kmu_t) ^ 2) / t

    ' Squared root of VAR_T is the underlying volatility on expiry date equal to today + t

End Function

Public Function mu_T(F As Double, K_C As Range, K_P As Range, C As Range, P As Range, rf As Double, t As Double) As Double

    Dim kH1 As Double
    Dim kH2 As Double
    Dim kH3 As Double

    kH1 = H1_T(F, K_C, K_P, C, P)
    kH2 = H2_T(F, K_C, K_P, C, P)
    kH3 = H3_T(F, K_C, K_P, C, P)

    mu_T = Exp(rf * t) - 1 - Exp(rf * t) / 2 * kH1 - Exp(rf * t) / 6 * kH2 - Exp(rf * t) / 24 * kH3

End Function

Public Function H1_T(F As Double, K_C As Range, K_P As Range, C As Range, P As Range) As Double

    Dim n_C As Integer
    Dim n_P As Integer
    Dim partial_moment_C()
    Dim partial_moment_P()

    n_C = K_C.Count
    n_P = K_P.Count

    ReDim partial_moment_C(n_C)
    ReDim partial_moment_P(n_P)

    For i = 1 To n_C
        partial_moment_C(i) = 2 * (1 - Log(K_C(i) / F)) / (K_C(i) ^ 2) * C(i)
    Next

    For i = 1 To n_P
        partial_moment_P(i) = 2 * (1 + Log(F / K_P(i))) / (K_P(i) ^ 2) * P(i)
    Next

    H1_T = Application.Sum(partial_moment_C) + Application.Sum(partial_moment_P)

End Function

Public Function H2_T(F As Double, K_C As Range, K_P As Range, C As Range, P As Range) As Double

    Dim n_C As Integer
    Dim n_P As Integer
    Dim partial_moment_C()
    Dim partial_moment_P()

    n_C = K_C.Count
    n_P = K_P.Count

    ReDim partial_moment_C(n_C)
    ReDim partial_moment_P(n_P)

    For i = 1 To n_C
        partial_moment_C(i) = (6 * Log(K_C(i) / F) - 3 * (Log(K_C(i) / F)) ^ 2) / (K_C(i) ^ 2) * C(i)
    Next

    For i = 1 To n_P
        partial_moment_P(i) = (6 * Log(F / K_P(i)) + 3 * (Log(F / K_P(i))) ^ 2) / (K_P(i) ^ 2) * P(i)
    Next

    H2_T = Application.Sum(partial_moment_C) - Application.Sum(partial_moment_P)

End Function

Public Function H3_T(F As Double, K_C As Range, K_P As Range, C As Range, P As Range) As Double

    Dim n_C As Integer
    Dim n_P As Integer
    Dim partial_moment_C()
    Dim partial_moment_P()

    n_C = K_C.Count
    n_P = K_P.Count

    ReDim partial_moment_C(n_C)
    ReDim partial_moment_P(n_P)

    For i = 1 To n_C
        partial_moment_C(i) = (12 * (Log(K_C(i) / F)) ^ 2 - 4 * (Log(K_C(i) / F)) ^ 3) / (K_C(i) ^ 2) * C(i)
    Next

    For i = 1 To n_P
        partial_moment_P(i) = (12 * (Log(F / K_P(i))) ^ 2 + 4 * (Log(F / K_P(i))) ^ 3) / (K_P(i) ^ 2) * P(i)
    Next

    H3_T = Application.Sum(partial_moment_C) + Application.Sum(partial_moment_P)

End Function

Si utiliza las funciones anteriores para calcular el índice VIX-como el valor de las falsas opciones, usted recibirá $20\%$ como se esperaba; pero, si se genera falsas opciones con un enorme volatilidad implícita, algo así como $\sigma=80\%$, mi código devuelve un implícita del modelo de libre volatilidad de... $62\%$!

Posibilidades:

  1. Estoy mal con mi comprensión de las citadas fórmulas;
  2. Me he equivocado con la aplicación de las citadas fórmulas en el código de VBA;
  3. Bakshi, Kapadia y Madan (2003) el enfoque de subestimar la volatilidad, lo cual suena raro... lo que no estoy teniendo en cuenta?

5voto

MayahanaMouse Puntos 71

En su aplicación, son la aproximación continua integrales sobre la huelga de dominio por las sumas de Riemann. Esto introduce un error.

Más específicamente, durante un tiempo fijo a vencimiento $\tau$, que está integrando (a escala) de OTM curvas de precios (véanse las ecuaciones $(3)-(4)-(5)$). Como aumenta la volatilidad, estas curvas se extienden sobre más y más dominios espaciales.

Cuando se utiliza un fijo de la huelga de rango para aproximar las integrales, el error de truncamiento será, por tanto, mecánicamente aumentar a medida que usted va a menos y menos ser capaz de capturar lo que sucede en las "colas".

enter image description here

Finanhelp.com

FinanHelp es una comunidad para personas con conocimientos de economía y finanzas, o quiere aprender. Puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X