Supongamos que tienes una serie de precios históricos $P_t$, indexados por tiempo, y el precio actual $P_\mathrm{now}$, y queremos ver qué precio se convertiría si el precio actual hubiera cambiado similmente a como cambió para cada observación en el pasado. Para obtener el VaR/ES histórico básico, clasificas las ganancias y pérdidas de todos estos precios simulados, y lees el VaR o el ES. No estoy seguro si estadísticas más complicadas seguirían funcionando con los trucos a continuación.
Pero, ¿qué significa "similar"? Por ejemplo, si el precio es 10 hoy, y hace unos meses el precio cambió de 2 a 4, ¿"similar" significa que el precio aumentaría en 2 o que se duplicaría?
Para implementar lo primero, simplemente definimos la diferencia de precios $D_t=P_t- P_{t-1}$ y simulamos $P_\mathrm{new}=P_\mathrm{now}+D_t$. Por ejemplo, si el precio es 3 ahora, y si el precio cayó de 14 a 10 en el pasado, entonces el precio simulado sería $P_\mathrm{new}=3+10-14=-1$. Esta metodología seguramente admite precios negativos y precios cero, pero probablemente no es exactamente lo que la mayoría de la gente quiere.
Para la otra metodología, asumimos que los precios son no nulos, y definimos el cambio porcentual $R_t=\frac{P_t}{P_{t-1}}-1$, y simulamos, $P_\mathrm{new}=P_\mathrm{now}\times(R_t+1)=P_\mathrm{now}+P_\mathrm{now}\times R_t=P_\mathrm{now}\times\frac{P_t}{P_{t-1}}$.
Nótese que para no dividir por 0, necesitamos asumir solo que los precios son distintos de cero, es decir, que aún no puedes regalar o recibir el activo de forma gratuita, pero no hay problema si a veces, en lugar de cobrar, tienes que pagar a alguien para que se deshaga del activo. Si el precio cambia de signo, entonces el cociente $\frac{P_t}{P_{t-1}}<0$, pero está bien. Por ejemplo, supongamos que el precio actual es 10, y estamos tratando de simular un día en que cambió de 1 a -5. Luego $R_t=\frac{-5}{1}-1=-6$, en otras palabras, el precio cayó un 600%, y simulamos $P_\mathrm{new}=10\times (-6+1) = 10\times -5 = -500$, un cambio "similar".
En lugar de cambios porcentuales, también puedes tomar logaritmos de los cocientes: define $L_t=\log\left(\frac{P_t}{P_{t-1}}\right)$ y simula $P_\mathrm{new}=P_\mathrm{now}\times \exp(L_t)$. Si el cociente $\frac{P_t}{P_{t-1}}<0$, el logaritmo de un número negativo es un número complejo: para $l<0$, $\log(l)=\log(-l)\pm i \pi$. $P_\mathrm{new}$ cambia de signo de $P_\mathrm{now}$ cada vez que $P_t$ cambia de signo de $P_{t-1}$. Con suerte, tus implementaciones de $\log$ y $\exp$ pueden manejar automáticamente este "cableado", pero de lo contrario, el siguiente pseudocódigo muestra cómo puedes programar alrededor de que $\log$ no acepte entradas negativas, por ejemplo, almacenando una bandera booleana que indique que el signo del precio ha cambiado en un array separado signFlip
.
if ((ratio[t] = price[t] / price[t-1] < 0)
signFlip[t] = -1
ratio[t] = -ratio[t] // render the ratio positive
else
signFlip[t] = 1
L[t] = log(ratio[t])
...
PriceNew = PriceNow * exp(L[t]) * signFlip[t]
Matemáticamente, hemos utilizado el logaritmo complejo del cociente negativo, pero log/exp no lo saben.
Observa que puedes combinar los $R$'s de los días $i$ y $j$ como $R_{ij}=(R_i+1)\times(R_j+1)-1$, mientras que los logaritmos son aditivos: $L_{ij}=L_i+L_j$, $\mathrm{signFlip}_{ij}=\mathrm{signFlip}_i \times \mathrm{signFlip}_j$. Puedes usar combinaciones de 2 o más movimientos de precios para construir más escenarios históricos.