1 votos

¿Cómo estiman las plataformas de negociación los gráficos de pérdidas y ganancias de los precios de las opciones?

Utilizando la calculadora de pérdidas y ganancias para estrategias de opciones sobre acciones de una plataforma de negociación, muestra las curvas de pérdidas y ganancias estimadas para alguna fecha en el futuro y a través de los precios del subyacente con un cambio de volatilidad actual y opcional. Debe estar utilizando algún algoritmo para estimar el precio de las opciones en el tiempo y el precio del subyacente. Me gustaría tener acceso a este algoritmo en mi propio código (usando Julia si importa). Entiendo cómo agregar múltiples curvas / piernas juntos, pero es la curva de una sola opción a través del tiempo / subyacente que necesito.

Encontré una biblioteca financiera que utiliza algoritmos de modelos de opciones e intenté utilizar su implementación de Longstaff-Schwartz, pero tuve que ajustar mucho los parámetros para que coincidieran con el precio actual real, lo que no da mucha confianza. Además, sería demasiado lento ejecutarlo a través de muchas fechas y precios.

Estoy bastante seguro de que las curvas suaves que se muestran son sólo una función de curva con coeficientes apropiados que estaría bien para lo que necesito. Tomar el precio actual y la información, el precio final y la información, y luego ajustar alguna curva entre ellos. Vi algo sobre el ajuste de una spline en una respuesta a una pregunta aquí (pero no entendí el contexto, soy nuevo en el mundo cuántico).

3voto

BC. Puntos 9229

¿Sólo muestran un gráfico? ¿No hay valores? ¿Cuál es la plataforma?

Si eso es sólo una trama, me inclino a decir que todo lo que hacen es ejecutar Black Scholes, acortar el tiempo (si vas 6m en el futuro, sólo hacer la expiración 6m más corto), y volver a precio con algunos valores spot diferentes. No creo que haya nada de fantasía. Si es un poco más sofisticado, el vol se ajustaría, utilizando el hecho de que el tenor es ahora más corto y se mueve a lo largo de la estructura de plazos. Sin embargo, has descartado eso al escribir que utiliza la corriente (y el vol opcional). Así que también no se mueve a lo largo de la sonrisa.

En Julia, usted podría hacer esto en unas pocas líneas de código para obtener Black Scholes en un DataFrame:

using Plots, Distributions,DataFrames, PlotThemes
theme(:juno)

N(x) = cdf(Normal(0,1),x)

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

S = 6:0.1:15 # spot range
t = 1        # start tenor (1 year)
shift = 6    # months shift
t_new = t - shift/12 
df = DataFrame(Call = BSM.(S,10,t_new,0.0,0.0,0.2))

Se puede trazar el valor actual (suponiendo que todo lo demás es igual, pero el spot cambia) frente a algún día en el futuro (todo lo que cambia es el plazo de vencimiento; y el spot).

plot(S,df.Call , label = "Call Option Price in 6 Months")
plot!(S,BSM.(S,10,t,0.0,0.0,0.2), 
                label = "Call Option Price Today",
                legendposition = :topleft)

enter image description here

Añadiendo unas líneas se calcula el PnL (se resta el coste inicial), se hace dinámico (con el deslizador para el plazo y el vol) y también permite jugar con diferentes valores nocionales.

original_cost = BSM.(10,10,t,0.0,0.0,0.2)

function call(N, t_new, vega)
    payoff_call = N.*(BSM.(S,10,t-t_new/365.0,0.0,0.0,vega) .- original_cost)
end

function start_val(N, vega)
    payoff = N.*(BSM.(S,10,t,0.0,0.0,vega) .- original_cost)
end

S = 7:0.1:13
using Interact
call_gui = @manipulate for t_new = 1:1:364, vega = 0.01:0.01:0.41,
           Notional = spinbox(label="Notional"; value=1);

        plot(S,call(Notional, t_new, vega), 
                label = "Call Option PnL in $t_new days ($(t*365-t_new) days left to expiry)", 
                legendposition = :topleft)

        plot!(S, start_val(Notional, vega), 
                label = "Call Option Payoff Today with K = 10",
                xlabel = "Spot",
                ylabel = "Pnl",
                size = (700,500),
                title = "Option PnL for K = 10, t = 1 year, 0 divs and rates and 20% vol at initiation",
                titlefontsize=10)
end
@layout! call_gui vbox(hbox(:t_new, :vega, :Notional),observe(_))

enter image description here

Y cambiando algunos parámetros: enter image description here

Ahora bien, la mayoría de los mercados de renta variable son americanos, pero en mi ejemplo, los resultados serían idénticos para una opción americana de todos modos. En casos más generales, tendría que implementar esto con un modelo que valore las opciones americanas (PDE solver por ejemplo). También podría mostrar los valores reales en un DataFrame en lugar de sólo el gráfico.

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