4 votos

¿Cómo predecir mejor los precios de las opciones utilizando el movimiento browniano y compararlo con el modelo de Black y Scholes?

Estoy tratando de utilizar el movimiento browniano para predecir los precios de las opciones y comparar los resultados con los de Black y Scholes. Para ello, quiero calcular los rendimientos medios (mu) y la volatilidad (sigma) del activo subyacente sobre la base de la composición continua - de ahí que utilice funciones logarítmicas.

Sin embargo, creo que puede haber varios errores en mi planteamiento que no puedo confirmar. Lamentablemente, no encuentro respuestas claras a mis preguntas en la red, en sitios como quantconnect, así como en este foro. Estas son mis dudas:

  1. ¿Pueden utilizarse ambos modelos con mu y sigma basados en cálculos logarítmicos?
  2. ¿Puede introducirse el tiempo de maduración T en la misma unidad para ambos modelos?
  3. Al utilizar el movimiento browniano geométrico para simular los precios de las acciones, hacemos un bucle, digamos, 10.000 veces y tomamos el resultado medio. La mayoría de los modelos GBM para los precios de las opciones que encuentro en la web no parecen hacer un bucle. ¿Por qué?

Mi código de Python está abajo. ¿Alguna sugerencia?

from math import log, e
from pandas_datareader import data
from datetime import date, timedelta
#import datetime
import yfinance as yf
import scipy.stats as si

# Get stock price data
apple = data.DataReader('AAPL', 'yahoo', '2018/1/1')
spot = apple["Adj Close"][-1]
# Calculate log annual returns (mu) and log volatility (sigma)
apple['log_price'] = np.log(apple['Adj Close'])
apple['log_return'] = apple['log_price'].diff()

mu = apple.log_return.sum()/apple.log_return.count()
mu = mu*365 + 0.5*apple.log_return.var()*np.sqrt(365)
sigma = np.std(apple.log_price)   #sigma: volatility of underlying

spot = 463.94    #spot: spot price
K = 460    # strike price
T = 1   # time to maturity
r = 0.135   # risk-free interest rate

# Black and Scholes calculation
s0 = spot
def euro_vanilla_call(S, K, T, r, sigma):    

    d1 = (np.log(S / K) + (r + 0.5 * sigma ** 2) * T) / (sigma * np.sqrt(T))
    d2 = (np.log(S / K) + (r - 0.5 * sigma ** 2) * T) / (sigma * np.sqrt(T))

    call = (S * si.norm.cdf(d1, 0.0, 1.0) - K * np.exp(-r * T) * si.norm.cdf(d2, 0.0, 1.0))

    return call

BSM1 = euro_vanilla_call(spot, K, T, r, sigma)
print(BSM1)

# Monte Carlo simulation
def mc_euro_options(option_type,s0,strike,maturity,r,sigma,num_reps):
    payoff_sum = 0
    for j in range(num_reps):
        st = s0
        st = st*e**((r-0.5*sigma**2)*maturity + sigma*np.sqrt(maturity)*np.random.normal(0, 1))
        if option_type == 'c':
            payoff = max(0,st-strike)
        elif option_type == 'p':
            payoff = max(0,strike-st)
        payoff_sum += payoff
    premium = (payoff_sum/float(num_reps))*e**(-r*maturity)
    return premium

MCP1 = mc_euro_options('c', spot, K, T, r, sigma, 100)
print(MCP1)```

3voto

Amod Gokhale Puntos 26

El modelo GBM puede escribirse como:

$$ \delta S_t= \mu S_t \delta t+\sigma S_t\delta t $$

Lo anterior es una abreviatura de la siguiente SDE:

$$ S(t)=S(0)+\int^{t}_{0}\mu S(h)dh+\int^{t}_{0}\sigma S(h)dW(h) $$

Al resolver la SDE anterior se obtiene una expresión que has implementado en tu código:

$$ S(t)=S_0exp\left((\mu-0.5 \sigma^2)t+\sigma \sqrt{t} Z\right) $$

La fórmula de Black-Scholes puede derivarse directamente aplicando el pago de la opción a la solución anterior de la SDE (a continuación utilizo la medida del mundo real para simplificar*, véase la nota del asterisco más abajo en el texto para más detalles):

$$ Call(t_0)=e^{-rt}\mathbb{E}\left[ (S_t-K)I_{ \left( S_t>K \right) } \right] = \\ = e^{-rt}\mathbb{E}\left[ S_tI_{ \left( S_t>K \right) }-KI_{ \left( S_t>K \right) } \right]=\\=e^{-rt}\mathbb{E}\left[ S_tI_{ \left( S_t>K \right) }\right]-e^{-rt}K\mathbb{E}\left[ I_{ \left( S_t>K \right) }\right]$$

Centrándonos en el segundo término:

$$ e^{-rt}K\mathbb{E}\left[ I_{ \left( S_t>K \right) }\right] = e^{-rt}K\mathbb{P}\left( S_t>K \right) = \\ = e^{-rt}K\mathbb{P}\left( S_0 exp\left((\mu-0.5 \sigma^2)t+\sigma \sqrt{t} Z\right)>K \right) = \\ = e^{-rt}K\mathbb{P}\left( (\mu-0.5 \sigma^2)t+\sigma \sqrt{t} Z>ln \left(\frac{K}{S_0} \right) \right) = \\ = e^{-rt}K\mathbb{P}\left( Z>\frac{ln \left(\frac{K}{S_0} \right) -\mu t + 0.5\sigma^2 t}{\sigma \sqrt{t} } \right) = \\ = e^{-rt}K\mathbb{P}\left( Z> (-1)\frac{ln \left(\frac{S_0}{K} \right) +\mu t - 0.5\sigma^2 t}{\sigma \sqrt{t} } \right) = \\ = e^{-rt}K\mathbb{P}\left( Z \leq \frac{ln \left(\frac{S_0}{K} \right) +\mu t - 0.5\sigma^2 t}{\sigma \sqrt{t} } \right) = \\ = e^{-rt}KN(d_2) $$

El primer término $e^{-rt}\mathbb{E}\left[ S_tI_{ \left( S_t>K \right) }\right]$ requiere un poco más de trabajo para evaluar, pero utilizando una técnica similar este término sale como $S_0N(d_1)$ .

Así que lo que este tedioso uso de fórmulas pretendía demostrar es que la fórmula Black-Scholes puede ser una consecuencia directa del modelo GBM para el precio de las acciones subyacentes: por lo tanto, esto responde a tus primeras y segundas preguntas:

(i) Sí, la mu y la sigma en ambos modelos son idénticas, porque la fórmula de BS se basa en el modelo GBM

(ii) Sí, ambos modelos deben ser coherentes entre sí en términos de unidades de tiempo.

* Advertencia En el caso de las opciones, hay un paso adicional que se debe realizar cuando se utiliza el modelo GBM para la fijación de precios: se debe cambiar de la medida de probabilidad del mundo real a la medida de neutralidad del riesgo. En términos prácticos, esto significa que su deriva $\mu$ debe ser sustituido por la deriva $r$ , donde $r$ debería ser el tipo "sin riesgo" correspondiente al vencimiento de la opción. Si no se tiene acceso a toda la curva OIS para el USD, entonces yo tomaría simplemente el tipo de los fondos de la FED como aproximación a $r$ (ahora mismo, el tipo de los fondos de la FED es del 0,25%).

También debe utilizar la volatilidad implícita para valorar la opción. Pero usar la volatilidad histórica (como haces en tu código) como proxy está bien si sólo quieres experimentar.

Su tercera pregunta Si quiere fijar el precio de la opción mediante el método de Monte-Carlo (es decir, simulando primero el precio de la acción y luego tomando la expectativa del pago de la opción al vencimiento), tendrá que realizar "n" simulaciones (es decir, bucles). Pero como se conoce la solución analítica del modelo GBM, como se ha mostrado anteriormente, se puede introducir directamente en el pago de la opción y analíticamente calcular el precio de la opción de esta manera, no es necesario realizar una simulación MC. Simplemente puede calcular el precio de la opción directamente mediante la fórmula B-S.

Básicamente, depende de usted si quiere evaluar el expectativa en la fórmula de pago de la Opción a través de Monte-Carlo o analíticamente (lo que lleva a la fórmula BS directamente). Obviamente, la evaluación analítica es más precisa que la aproximación numérica. Realizar una simulación numérica sobre un problema que se sabe resolver analíticamente es un poco como esconder los propios huevos de Pascua y luego buscarlos.

P.D.: por último, pero no por ello menos importante, no debería utilizar 365 días, sino 260 días al año (porque sólo hay aproximadamente 260 días de negociación en un año natural).

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