1 votos

Conversión de las volatilidades implícitas en precios de opciones digitales

Tengo calculadas las volatilidades implícitas de Black y Scholes (1973) y me gustaría convertir estos IVs en precios de opciones digitales utilizando una fórmula del tipo de Black y Scholes, no encuentro una fórmula para hacerlo. ¿Cómo puedo convertir los IV en precios de opciones digitales?

4voto

BC. Puntos 9229

En el caso más sencillo, se puede suponer un mundo de vol Black Scholes plano. En este caso, utilizando la notación habitual de BS, el precio justo de la opción de efectivo o nada es e^(rt)*N(d2) que es el probabilidad descontada de que la opción venza en dinero.

Demostrarlo en Julia puede definirlo de la siguiente manera (el precio de compra será necesario más adelante).

using Distributions
function BSM(S,K,t,rf,d,, cp_flag)
    d1 = ( log(S/K) + (rf - d + 1/2*^2)*t ) / (*sqrt(t))
    d2 = d1 - *sqrt(t)
    value  = cp_flag*exp(-d*t)S*N(cp_flag*d1) - exp(-rf*t)*cp_flag*K*N(cp_flag*d2)
  return value, exp(-r*t)*N(cp_flag*d2)
end

Veamos un ejemplo de Bloomberg,

enter image description here

podemos calcular el siguiente resultado

# inputs 
s,k , t, , r, d  = 19280.78, 19280.78, 1, 0.2471, -0.00006, 0.02061
#result 
res = BSM(s,k,t,log(1+r*t)/t,log(1+d*t)/t,, 1)
println("Digital Value per unit = $(round(res[2],digits = 5))")

enter image description here

Bloomberg no parece utilizar un call spread en OVME y por eso está tan cerca. Bloomberg sí utiliza un call spread en OVML (FX) sin embargo. Si lo haces tú mismo, la cosa se complica un poco más. Por ejemplo, establecer huelgas en ± = ±1/2.

El gif lo muestra con diferenciales y desplazamientos poco realistas para dejar clara la distinción. Los valores reales, sin embargo, se calculan con precisión y coincidirían con OVML. Puedes leer algunos detalles aquí .

enter image description here

Tenemos que definir algunas cosas más para configurar esto:

  • calcular el diferencial (a menudo se utiliza el 1%, pero lo ideal es que dependa del vencimiento y del vol)

    function spread(K,shift) lower_K = K(1-shift/2) upper_K = K(1+shift/2) spread = upper_K-lower_K return lower_K, upper_K, spread end spr = spread(k,0.01) val = ("Lower","Upper","Spread") k = Dict(zip(val,spr))

  • Calcule el ajuste nocional necesario para obtener el pago deseado (El diferencial * Nocional es igual a la suma de los pagos en el escenario de diferencial - esto debe ajustarse para obtener el nocional deseado).

    function notional(desiredPayoff,spread)
        scale = desiredPayoff/(spread*desiredPayoff)
        return scale*desiredPayoff
    end
  • Obtenga el IV para los dos strikes (para simplificar, sólo asumo 3 escenarios diferentes: plano, vol más alto para el strike inferior (OTM Put Skew), strike superior más alto (OTM Call Skew).

    = Dict("Lower" => [0.2471,0.2473,0.2470], "Upper" => [0.2471,0.2470,0.2473] )

  • calcular el valor (en porcentaje del subyacente):

    scenario = ["Flat", "OTM Put Skew", "OTM Call Skew"] res = ["Digital Value per unit ($(scenario[i])) = $((BSM(s,k["Lower"],t, log(1+rt)/t,log(1+dt)/t,["Lower"][i],1)[1] - BSM(s,k["Upper"],t, log(1+rt)/t,log(1+dt)/t,["Upper"][i],1)[1])*notional(s,spr[3])/s)" for i in 1:1:3 ]

enter image description here

2voto

Como se señala en el comentario y el enlace de AKdemy, además del nivel también necesitas la pendiente vanilla IV.

El precio de venta digital es $$ \partial_K P(S_t,K) = \partial_K P_{BS}(S_t,K,I(S_t,K)) + \partial_I P_{BS}(S_t,K,I(S_t,K)) \, \partial_K I(S_t,K) $$

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