1 votos

Cálculo del valor de la opción sobre la cesta

Estoy leyendo el artículo donde se presentan diferentes aproximaciones para la fijación de precios de las opciones sobre cestas. He intentado reproducir en Python el resultado obtenido por el método de Gentle.

Definimos el precio de una cesta de valores como la media ponderada de los precios de $n$ existencias al vencimiento $T$ $$ B(T) =\sum^n_{i=1} w_iS_i(T). $$

Nuestra tarea consiste en determinar el precio de una llamada ( $\theta = 1$ ) o un put ( $\theta = -1$ ) con huelga $K$ y madurez $T$ en la cesta, es decir, valorar la retribución $$ P_{Basket} (B(T), K, \theta) = [\theta (B(T) - K)]^+. $$

Del artículo he utilizado la aproximación de Gentle por media geométrica y los datos de entrada.

El método.

El hecho de que una media geométrica de variables aleatorias log-normales sea log-normal permite una forma de valoración tipo Black-Scholes. para valorar el pago aproximado. En concreto tras reescribir el resultado de la opción cesta como $$ P_{basket}=\left(\theta\left( \sum_{i=1}^n w_i S_i(T) - K \right)\right)^+ = \left(\theta\left( \left( \sum_{i=1}^n w_i F_i^T \right) \sum_{i=1}^n a_i S^*_i(T) - K \right)\right)^+, $$ donde el $T$ -precio a plazo de las acciones $i$ $$ F_i^T = S_i(0) \exp\left( \int_0^T (r(s) - d_i(s))ds \right), $$ $r(\cdot)$ y $d_i(\cdot)$ son los tipos de interés deterministas y la rentabilidad de los dividendos, $$ a_i=\frac{w_i F_i^T}{\sum_{i=1}^n w_i F_i^T}, \quad S_i^*=\frac{S_i(T)}{F_i^T}. $$ Aproximamos $\sum_{i=1}^n a_i S^*_i(T)$ por la media geométrica: $$ \overset{\sim}{B}(T) = \left( \sum_{i=1}^n w_i F^T_i \right) \prod_{i=1}^n (S_i^*(T))^{a_i}. $$

Para corregir la media, $$ K^* = K - (E(B(T)) - E(\overset{\sim}B(T))) $$ se introduce. Como aproximación para $(B(T) - K)^+$ , $(\overset{\sim}B(T) - K^*)^+$ que, como $\overset{\sim}B(T)$ tiene una distribución log-normal -- puede valorarse mediante la fórmula Black-Scholes que da como resultado $$ V_{Basket} (T) = e^{-rT}\theta\left( e^{\overset{\sim}m + \frac{1}{2} \overset{\sim}v^2} N(\theta d_1) - K^*N(\theta d_2)\right) , $$

$$V_{basket}^{call}(T) = e^{-r \cdot T} \cdot (e^{\tilde{m} + 0.5 \cdot \tilde{v}^2} \cdot N(d_1) - K^* \cdot N(d_2)) $$ y $$ V_{basket}^{put}(T) = e^{-r \cdot T} \cdot (K^* \cdot N(-d_2) - e^{\tilde{m} + 0.5 \cdot \tilde{v}^2} \cdot N(-d_1)), $$ $N(\cdot)$ la función de distribución de una variable aleatoria normal estándar y $$d_1 = \frac{\overset{\sim}m - \ln K^* + \overset{\sim}v^2}{\overset{\sim}v}, \quad d_2 = d_1 - \overset{\sim}v, $$ $$ \overset{\sim}m = E(\ln \overset{\sim}B(T)) = \ln \left(\sum^n_{i=1} w_i F^T_i \right) - \frac{1}{2} \sum^n_{i=1} a_i \sigma^2_i T$$ y $$ \overset{\sim}v^2 = Var(\ln \overset{\sim} B(T)) = \sum^{n}_{i=1}\sum^{n}_{j=1} a_ia_j \sigma_i \sigma_j \rho_{ij}T. $$

Los datos de entrada del artículo . El marco Black-Scholes es válido. Calcule los precios de la opción de compra sobre una cesta, con cuatro acciones y parámetros dados por $T = 5.0$ , $r = 0.0$ , $\rho_{ij} = 0.5, \forall i \neq j$ , $K = 100$ , $F^T_i = 100$ , $\sigma_i = 40\%$ y $w_i = 0.25$ , $i, j = 1,2,3,4$ .

Del artículo se desprende que el resultado es $23.78$ :

enter image description here

El código Python se encuentra a continuación.

import numpy as np
from scipy.stats import norm

exp = np.exp
log = np.log
sqrt = np.sqrt
N = norm.cdf

T = 5
r = 0
rho = np.ones((4, 4)) * 0.5 + np.eye(4) * 0.5
K = 100
F = np.array([100., 100., 100., 100.])
sigma = np.array([0.4, 0.4, 0.4, 0.4])
w = np.array([0.25, 0.25, 0.25, 0.25])

a = w * F / np.sum(w * F)
K_star = K
m_tilde = log(np.sum(w * F)) - 0.5 * np.sum(a * sigma ** 2 * T)
v_tilde = sqrt((a * sigma).T @ rho @ (a * sigma) * T)

d1 = (m_tilde - log(K_star) + v_tilde ** 2) / v_tilde
d2 = d1 - v_tilde

basket_call = exp(-r * T) * (exp(m_tilde + 0.5 * v_tilde ** 2) * N(d1) - K_star * N(d2))
print('Basket call price:', basket_call)

Precio de compra de la cesta: 19,294903017034283. Lamentablemente, no puedo reproducir el resultado del artículo.

Pregunta. ¿Podría alguien verificar el código Python? Creo que el lugar débil en el código es el comando: K_star = K . ¿Cómo se especifica el K_star ¿correctamente?

2voto

umop Puntos 123

Esencialmente, aproximando la media algebraica en $B(T)$ con la media geométrica como $\tilde B(T)$ El función de retribución debe permanecer invariante con respecto a esta transformación

$$ (B(T) - K)^+ = (\tilde B(T) - K^*)^+$$

Como se sugiere en el método, el ajuste tiene la forma

$$ K^* = K - \mathrm{E}[B(T)] + E[\tilde B(T)]$$

donde

$$ \mathrm{E}[B(T)] = \Sigma_i w_i F_i(T) $$

y

$$\mathrm{E}[\tilde B(T)] = e^{ \tilde{m} + 0.5 \tilde\nu^2 } $$

Al final esto es lo que me funciona

K_star = K - (w @ F) + exp(m_tilde + 0.5 * v_tilde ** 2)

para reproducir los precios en los 4 cuadros.

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