1 votos

Opción: pago si se supera el índice

Una acción tiene una media y una volatilidad. Un índice bursátil tiene otra media y una volatilidad. ¿Cuál es el valor de una opción que en el momento T paga el precio de la acción en el momento T si la acción ha superado al índice en un 3%? En otras palabras, si $S_T/I_T > 1.03$ entonces el pago = $S_T$ de lo contrario, la recompensa es cero.

Un enfoque sería el de Monte Carlo:

  • simular M=10.000 trayectorias para la acción y el índice, cada trayectoria de longitud 250. Utilizar un GBM con media y volatilidad estimadas a partir de datos históricos.
  • guardar el precio final de cada camino, teniendo así una lista de M precios de acciones y precios de índices
  • Pr(payoff) = sumar el número de veces que la acción/índice > 1,03 y dividir por M
  • el resultado esperado = Pr(resultado) * media( $S_T$ )

3voto

Andrew Koester Puntos 260

Supongamos que bajo la medida de riesgo neutro \begin{eqnarray} dS_t/S_t&=&\alpha_1 dt + \sigma_1 dW^1_t \\ dI_t/I_t&=&\alpha_2 dt + \sigma_2 dW^2_t \end{eqnarray} donde $\alpha_1$ y $\alpha_2$ son las derivas neutrales al riesgo (que contienen la información sobre el tipo, los dividendos y el coste de los repos. Por ejemplo $\alpha_1 = \alpha_2 = r$ si hay cero dividendos y cero costes de recompra), $\sigma_1$ y $\sigma_2$ son las respectivas volatilidades de las acciones y del índice, y con la correlación $\rho$ entre $W^1$ y $W^2$ ,

Entonces \begin{eqnarray} \text{option value} &=& e^{-rT} E_P[S_T \times \text{Indicator}(S_T/I_T > 1.03)]\\ &=& e^{-rT} E_P[S_T] E_Q[\text{Indicator}(S_T/I_T > 1.03)] \\ &=& e^{-rT} E_P[S_T] Q(S_T/I_T > 1.03) \\ &=& e^{(\alpha_1-r)T} S_0 Q(S_T/I_T > 1.03) \\ \end{eqnarray}

donde $dQ/dP|_{t=0}=S_T/E_P[S_T]$ .

Del teorema de Girsanov \begin{eqnarray} dS_t/S_t&=&(\alpha_1+\sigma_1^2) dt + \sigma_1 dW'^1_t \\ dI_t/I_t&=&(\alpha_2+\rho\sigma_1\sigma_2) dt + \sigma_2 dW'^2_t \end{eqnarray} con $W'^1$ y $W'^2$ movimientos brownianos estándar bajo $Q$ con correlación $\rho$ .

Después de integrar la SDE para $S_t$ y $I_t$ , \begin{eqnarray} S_T&=&S_0\exp\left((\alpha_1+\frac{1}{2}\sigma_1^2) T+\sigma_1W'^1_T\right) \\ I_T&=&I_0\exp\left((\alpha_2-\frac{1}{2}\sigma_2^2+\rho\sigma_1\sigma_2) T+\sigma_2W'^2_T\right) \end{eqnarray} por lo que \begin{eqnarray} \frac{S_T}{I_T}&=&\frac{S_0}{I_0}\exp\left((\alpha_1+\frac{1}{2}\sigma_1^2) T-(\alpha_2-\frac{1}{2}\sigma_2^2+\rho\sigma_1\sigma_2) T+\sigma_1W'^1_T-\sigma_2W'^2_T\right) \\ &=& \frac{S_0}{I_0}\exp\left((\alpha_1-\alpha_2+\frac{1}{2}(\sigma_1^2+\sigma_2^2-2\rho\sigma_1\sigma_2)) T+\sigma_1W'^1_T-\sigma_2W'^2_T\right) \\ &=& \frac{S_0}{I_0}\exp\left((\alpha_1-\alpha_2+\frac{1}{2}\Sigma^2) T + \Sigma W'_T\right) \end{eqnarray} con $\boxed{\Sigma=\sqrt{\sigma_1^2+\sigma_2^2-2\rho\sigma_1\sigma_2}}$ y $W'$ un movimiento browniano estándar bajo $Q$ .

Finalmente $$ Q(S_T/I_T > 1.03) =N\left(\frac{\ln(\frac{S_0}{1.03 I_0})+(\alpha_1-\alpha_2+\frac{1}{2}\Sigma^2) T}{\Sigma\sqrt{T}}\right) $$ y $$ \boxed{\text{option value} = e^{(\alpha_1-r)T} S_0 N\left(\frac{\ln(\frac{S_0}{1.03 I_0})+(\alpha_1-\alpha_2+\frac{1}{2}\Sigma^2) T}{\Sigma\sqrt{T}}\right) } $$

0voto

haslo Puntos 337

Obtengo (con los parámetros de abajo) que la opción vale el 58% del valor actual de la acción (que me parece alto).

## libraries

library(PerformanceAnalytics)
library(quantmod)
library(TTR)
library(xts)
library(sde) # needs fda.  https://cran.r-project.org/web/packages/sde/sde.pdf
library(dfa)
library(fOptions) 

## params 

y = 1 # year 
rf <- 0 # risk free rate 
M <- 1000 # number of simulations 
S_0 <- 100 # current price 
I_0 <- S_0 
ret_i <- 0.07 # yearly return 
ret_s <- 0.09
vol_i <- 0.10 # yearly vol
vol_s <- 0.22

## get list of retunrs, vols, end of ear stockprices 

path_i <- NULL
path_s <- NULL
vols_i <- NULL
vols_s <- NULL
prices_i <- NULL
prices_s <- NULL
returns_i <- NULL
returns_s <- NULL

for (k in 1:M){
  # an entire path  
  path_i[[k]] <- GBM(x = S_0, r = ret_i, sigma = vol_i, T = y, N = 250*y)
  path_s[[k]] <- GBM(x = I_0, r = ret_s, sigma = vol_s, T = y, N = 250*y)
  # returns of a path 
  returns_i[[k]] <- CalculateReturns(ts(path_i[[k]]))
  returns_s[[k]] <- CalculateReturns(ts(path_s[[k]]))
  # vol of a path, first day is NA 
  vols_i[[k]] <- sqrt(250)*stdev(returns_i[[k]][2:250])
  vols_s[[k]] <- sqrt(250)*stdev(returns_s[[k]][2:250]) 
  # price after 1 year:
  prices_i[[k]] <- path_i[[k]][250]
  prices_s[[k]] <- path_s[[k]][250] 
}

## check 

# check numerically::
length(path_i)
length(vols_i)
length(returns_i)
length(prices_i)

## index vs stock: 

prices_q <- prices_s / prices_i

payoffs <- NULL
# if stock beats index by 1% then payoff = 0
# if stock beats index by >3% then payoff = stock price 
# the payoff grows linearly between 1% and 3%
# so if stock beats index by 2% the payoff = half the stock price 
for (p in 1:M){
  pay <- NULL
  endprice = prices_q[[p]]
  pay <- ifelse(endprice < 1.01, 0, 
           ifelse(endprice > 1.03, prices_s[[p]], 
                  50*(endprice - 1.01) * prices_s[[p]]))
  payoffs[[p]] <- pay
}

(option_value <- mean(payoffs)/(1+rf)^y )
option_value / S_0

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