3 votos

La convergencia de GBM media después de la simulación?

Como continuación de mi anterior pregunta, ahora estoy simulando el GBM paso por paso para $n$ pasos.

Yo estoy usando la siguiente aplicación para la simulación:

$$S_{t+1} = S_t \exp \left[ \left(\mu-\frac{\sigma^2}{2}\right) \Delta t + \sigma \sqrt{\Delta t} Z_t \derecho], ~ Z_t \sim \mathcal{N}(0,1)$$

Cada paso representa una unidad de tiempo por lo que $\Delta t = 1$.

Yo uso el siguiente código de MATLAB:

function paths = gbm_exp(mu,vol,s0,nbr_steps,nbr_paths)

shocks = randn(nbr_steps,nbr_paths/2);
shocks_ant = [shocks, -shocks];

paths = zeros(nbr_steps+1,nbr_paths);

paths(1,:) = s0;

for i=1:nbr_paths
    for j=1:nbr_steps
        paths( j + 1, i ) = paths( j, i ) * exp( (mu - vol^2/2) + vol * shocks_ant( j, i ) );
    end
end

Como usted puede ver, yo uso antitético camino para tratar de reducir la varianza global.

La cosa es que, de nuevo, debería haber $\mathbb{E}(S_t) = S_0 ~ \forall t$ si me puse $\mu=0$.

Así que hacer lo siguiente:

>> test=gbm_exp(0,.3,100,300,2000);
>> mean(test(end,:))

Esto significa que yo simular 300 pasos, con $\sigma=0.3$, $\mu=0$ y $S_0 = 100$.

La media de yo llegar, sin embargo, es algo bastante pequeño, de alrededor de 20 en promedio. Así que, no en todos los excpected 100.

Así, traté de aumentar mi número de rutas de acceso a 200k y me sale una media de unos 40 en promedio.

Así que estoy sorprendido por este comportamiento, esperaría que converge mucho más rápido, especialmente con antitético caminos.

¿Me olvido de algo obvio de nuevo?

2voto

Usted debe mirar intervalo de confianza. Normalmente, su intervalo de confianza del tamaño es proporcional a la desviación estándar, buscando algo como: con una probabilidad de p $$ su valor estará en el intervalo: $$[\bar{S} - k*StdDev, \bar{S} + k*StdDev]$$

Luego, volviendo a su simulación, podemos decir que el paso de tiempo es muy grande (1 año) y simular 300 puntos, lo que significa que usted simular el resultado en 300 años.

$$\mathbb{E}(S_t) = S_0e^{\mu t} \\ \mathbb{Var}(S_t) = S_0^2e^{2\mu t} e^{\sigma^2}-1)$$

En su caso, por ejemplo, $\{\mu = 0\}$, obtenemos: $$\mathbb{E}(S_t) = S_0 \\ \mathbb{Var}(S_t) = S_0^2 e^{\sigma^2}-1)$$

Conectar en $\{S_0 = 100, \sigma =.3, t = 300\}$, obtenemos: $$\mathbb{E}(S_t) = 100 \\ \mathbb{Var}(S_t) = 100^2 e^{27}-1)$$

He probado el código similar con Mathematica (sin antitético) para 300 pasos de tiempo con 1 año paso y consiguió {Caminos, Significa, StdDev, {Min, Max}} = {10^6, 60.2203, 16363.3, {2.40216*10^-15, 1.2311*10^7}}. Como puedes ver, la desviación estándar es muy importante, significa que el intervalo de confianza será también grande.

Sólo trate de prueba de 1 año, usted debe conseguir una buena media: {Caminos, Significa, StdDev, {Min, Max}} = {10^6, 100.028, 30.6978, {22.5584, 370.411}}

1voto

Andrey Puntos 137

El GBM es un modelo continuo, por lo que el uso de enteros grandes pasos de tiempo, naturalmente, hojas grandes de discretización de error (que se desvanece cuando se incrementa el número de pasos).

Uso de tiempo pequeño paso 0.001:

paths(j + 1,i) = paths(j,i) * exp((mu - vol^2/2)*0.001 + vol * 0.001^0.5*shocks_ant(j,i));

A continuación, la media es casi exactamente 100 como se esperaba.

0voto

scottishwildcat Puntos 146

appearantly su varianza muestral es demasiado grande. He puesto el ejemplo en R. Lo vi por primera vez es, que la media fue peor si me tomó más tiempo de pasos (usted toma $300$). Su volatilidad es de $0.3$, que es de $30\%$ por año y que muestra $300$ años. Lo que usted debe hacer es el siguiente:

  • definir una variable nbr_steps_peryear
  • elija el número de years
  • luego de tomar nbr_steps = years*nbr_steps_peryear
  • definir una variable dt = 1/nbr_steps_peryear

El dt tendrán el control de su varianza. Yo obtener buenos resultados con la siguiente configuración:

nbr_steps_peryear = 20
years = 5
nbr_steps = years*nbr_steps_peryear
dt = 1/nbr_steps_peryear
nbr_paths = 10^3
S0 = 100
mu = 0.0
vol = 0.3

El dt plazo de los saldos entre la deriva plazo $\mu\sigma^2/2$ y la volatilidad plazo.

La principal fuente del problema es el gran número de años - como ya se mencionó anteriormente. Con un número razonable de años intermedios y pasos de tiempo para el balance de th deriva que debe verse bien. nbr_steps_peryear = 20 años = 5 nbr_steps = años*nbr_steps_peryear dt = 1/nbr_steps_peryear nbr_paths = 10^3 S0 = 100 mu = 0.0 vol = 0.3

shocks <- replicate(nbr_paths/2,rnorm(nbr_steps))
shocks_ant = cbind(shocks,-shocks)

paths = matrix(0,nrow=nbr_steps+1,ncol=nbr_paths)
paths[1,]  = S0

for (j in 1:nbr_steps){
    paths[j+1,] = paths[j,]*exp((mu-vol^2/2)*dt + vol*sqrt(dt)*shocks_ant[j,])
}

mean(paths[nbr_steps+1,])
summary(paths[nbr_steps+1,])
hist(paths[nbr_steps+1,])

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