martes, 22 de mayo de 2018

La distribución LOGNORMAL de los precios

Supongamos una acción muy volátil, del mercado americano, cuyo precio es de 20 dólares y cuya desviación estándar anual es de 30 dólares.


En un año si va bien podríamos esperar que tuviera un precio de 50 dólares (20 + 30) con una probabilidad del 68%; que es la probabilidad asociada a una desviación estándar.

Pero la distribución normal (gaussiana) es simétrica, así que según ese modelo con la misma probabilidad si la acción va mal se pondría a un precio de -10 (20 - 30). 




Pero el precio de una acción no puede ser negativo. Es evidente que el modelo normal (gaussiano) no es correcto para los precios de los activos.


En realidad los precios siguen una distribución LOGNORMAL, que quiere decir que es normal cuando se expresan en logaritmo. Este modelo lognormal no admite números negativos (no existe el logaritmo de un número negativo salvo en el campo de los número imaginarios, pero eso es otra historia...). Además el logaritmo de cero es -infinito, así que se admite que un precio se pueda ir a cero pero con una probabilidad cercana a cero. En la realidad sabemos que sí que hay empresas que terminan a cero, pero bueno, son pocas...

Para qué es útil esta información?

Cuando analizamos unos datos y calculamos la desviación estándar estamos asumiendo que los datos siguen una distribución normal (gaussiana). Pero si los datos son precios estamos cometiendo un error que es mayor cuanto mayor sea la desviación estándar.


Si queremos calcular la volatilidad de una curva de capital sacaríamos los retornos diarios así:

precio_hoy/precio_ayer - 1

Pero esa no es la forma correcta. La forma correcta sería así:

ln(precio_hoy/precio_ayer)

Donde "ln" significa logaritmo neperiano. Esta forma es la correcta ya que asume que los logaritmos de los precios siguen una distribución normal.

Para retornos pequeños no hay mucha diferencia. Pero si los retornos son elevados (alta desviación) el error es muy grande.

Veamos un ejemplo. Supongamos que hay una subida del 1%. Así:


  • precio_hoy/precio_ayer  - 1= 0.01  --> 1%
  • ln ( 1.01 ) = 0.00995  --> 0.995%

Como vemos no es lo mismo. Es parecido. 

Si la subida fuera de un 10% entonces el error sería casi del 0.5%!

  • 10% 
  • ln (1.1) = 9.53% La diferencia es del 0.47%

Cuando queramos calcular desviaciones estándar de precios tenemos que usar logaritmos!

Comprobando con el SP500

Para completar esta información he exportado con Amibroker los precios del SP500 desde el año 2000 hasta hoy 22 de mayo de 2018. Luego he calculado los retornos porcentuales (sin logaritmos) y he asignado un rango de clases entre el -7% y el 7%.

Los retornos tienen una media del 0.0274423% con una desviación del 1.3847%. Estos dos parámetros definen una distribución normal que es con la que podemos comparar. Como se ve debajo, los retornos del SP500 no siguen una distribución normal:






El siguiente código muestra la volatilidad histórica de un activo como indicador (Amibroker)

//------------------------------
// VOLATILIDAD HISTÓRICA 
//------------------------------
// 16 MAYO 2018
// OSCAR G. CAGIGAS
//------------------------------

period=Param("Period",20,1,50,1);
ind = 16*StDev(ln(C/Ref(C,-1)),period)*100;
Plot(ind,"Volat("+period+",100)",colorBlue,styleThick);

//------filtro-----
Filter = 1;
AddColumn(ind,"HISTV%");




3 comentarios:

  1. Oscar, y cómo podría buscar acciones con volatilidad alta y un mínimo de Capitalización?
    Saludos y genial por la idea del blog para compartir cosas.
    Luis

    ResponderEliminar
    Respuestas
    1. Gracias. El código incluye un scanner de volatilidad. Solo habría que añadir uno de volumen y ordenar los resultados.

      Eliminar
  2. Gracias , voy a ver si soy capaz de hacerlo. Saludos

    ResponderEliminar

ENTRADAS POPULARES