miércoles, 28 de noviembre de 2018

EL SISTEMA MERSI PARA COMMODITIES

Las entradas anteriores del Blog han preparado el terreno para los sistemas de trading. Nos han permitido cargar Amibroker con la lista de los mercados más líquidos de materias primas y que este lea correctamente los multiplicadores. Adicionalmente hemos definido el número de contratos para un objetivo de volatilidad determinada (modelo de Robert Carver).

Pues bien...

Ha llegado el momento de presentar los sistemas de Trading!

El primero va a ser el sistema de reversión a la media con RSI también denominado "MERSI COMMODITIES". Las reglas son bien simples:


·      Estamos alcistas si el cierre está por encima de una media móvil simple
·      Si estamos alcistas y un RSI cae por debajo de 30 entonces compramos
·      Una vez comprados si el RSI sube por encima de 70 cerramos los largos
·      El sistema es simétrico para las posiciones cortas
·      Hay un stop loss de 6 desviaciones estándar

Qué hacer con este sistema, qué estadísticas tiene, qué ratio de optimización le viene bien... todas estas preguntas han sido contestadas en los informes de Onda4.



lunes, 24 de septiembre de 2018

Los multiplicadores de los futuros

Cómo decirle a Amibroker que si el ticker que está revisando actualmente es el Oro debe multiplicar por 100 pero si es el mini SP500 debería hacerlo por 50?

El siguiente código extrae los primeros 3 caracteres del nombre del ticker  empezando por la izquierda, y así le asigna el PointValue correspondiente. Lo mejor es tenerlo en un #include y llamarlo al principio de cada código que hagamos.

Es formato IQFeed así que si p.e. se trata del futuro continuo del mini SP500 entonces el ticker es @ES#C y los tres primeros caracteres son @ES. Igualmente si se tratara del vencimiento de diciembre de 2018 el ticker sería @ESZ18 pero los tres primeros caracteres serán @ES.

Este código funciona tanto para el futuro continuo como para los diferentes vencimientos. Es formato IQFeed pero no cuesta mucho adaptarlo a otros formatos para aquel que utilice eSignal o cualquier otro proveedor de datos.

En IQFeed existen tres mercados que en lugar de tener tres caracteres iniciales tienen solo dos: El trigo (@W), la Soja (@S) y el maíz (@C). Afortunadamente da la casualidad de que los tres tienen el mismo multiplicador, 50, así que lo he incluido en la última parte, valor por defecto. Si no fuera así el código sería algo más complicado.




sábado, 1 de septiembre de 2018

Entender el Forex

El FOREX es un mercado muy especial. Es el único donde el tamaño de la posición depende del mercado. Me explico: si abres una compra en el mini del SP500 entonces tu posición tiene un valor nominal que es el resultado de multiplicar el precio por el tamaño del contrato. Así, si el SP500 está a 2000 puntos y compramos un mini (mult = 50) pues tenemos un nominal de:

2000*50  = 100.000 dólares

Esto es nuestra “inversión”, aunque lo pongo entre comillas porque no necesitamos ese capital sino que con unas garantías de unos 5.000 dólares pues nos dejan abrir la posición. Ese valor, el nominal, es el equivalente a que tuviéramos una acción del mercado SP500; y así si el SP500 sube un 10% hasta 2200 entonces nosotros ganamos un 10% de nuestra “inversión”; es decir, 10.000 dólares. Fíjese:

(2200-2000)*50 = 10.000 dólares

El nominal no tiene nada que ver con el capital en nuestra cuenta sino con el instrumento que operamos. Y tampoco tiene en cuenta la volatilidad del mercado subyacente. A través de las preguntas que me hacen al email he notado que el concepto de nominal no queda muy claro y se piensa que dos posiciones con el mismo nominal tienen el mismo riesgo, y no es el caso. Ojo con estas cosas porque es en los Spreads donde más se nota que no podemos igualar nominales sino volatilidades diarias en dólares.



martes, 17 de julio de 2018

CALENDAR SPREADS en Amibroker. Y el modelo de Carver.

Un calendar Spread es comprar y abrir cortos en el mismo mercado pero distintos vencimientos. En la imagen más abajo vemos un calendar spread entre el maíz de Diciembre (comprado) y el maíz de septiembre (en corto).

El código que se anexa pinta el spread. Pero hay que tener cargados los tickers que en este ejemplo serían @CZ18 para el maíz de diciembre y @CU18 para el de septiembre.

Cuántos contratos operar? Se ha incluido una gestión de capital según el modelo de Robert Carver (del libro "Systematic Trading") en que operamos el número exacto de contratos que produce una volatilidad objetivo. En el código se ha establecido una volatilidad anualizada objetivo del 5% para toda la cartera, lo que significan 313 dólares diarios en una cuenta de 100.000 dólares.

Se asume que esto se opera con más posiciones, así que hemos establecido un ajuste por diversificación (IDM en el modelo de Robert Carver) de 2.0. Se han asumido cinco posiciones así que el peso del Calendar spread sería del 20%. Cuando todo esto se tiene en cuenta (además de la desviación estándar de los cierres y de que el multiplicador del maíz es 50) resulta que el número de contratos de spread que se operarían son 7.

Operar 7 contratos del Spread produce una volatilidad anualizada del 5% en una cuenta de 100.000 dólares. 

sábado, 23 de junio de 2018

El modelo de volatilidad de Robert Carver

El modelo de volatilidad de Robert Carver está explicado en su libro "Systematic Trading" y es una forma sencilla pero eficaz de dimensionar una cartera para cumplir un objetivo de volatilidad anual. Los resultados reales obtenidos con esta técnica son muy exactos. 

El método es el siguiente:

Supongamos que tenemos intención de operar una cuenta de 100.000 euros con 5 posiciones y un objetivo de volatilidad anual del 30%. Aparece la primera compra en Crudo Mini (QM), un mercado que tiene una volatilidad diaria de 340 dólares.

-Cuántos contratos hay que comprar? 


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.

viernes, 11 de mayo de 2018

El ratio de Sharpe pero de la curva de capital, no de las operaciones

Amibroker calcula el ratio de Sharpe. Pero de las operaciones, no de la curva de capital. 


Esta métrica es muy utilizada en la industria del trading. Los mejores gestores superan el nivel 1.0 pero no todos los años. En realidad es difícil conseguir rentabilidades por encima de la volatilidad.




Sharpe = rentabilidad_anualizada / volatilidad_anualizada

La fórmula original incluye la tasa libre de riesgo en el numerador, pero eso hoy en día es prácticamente nulo. Dicho de otra forma: sin riesgo, no dan nada por el dinero. A mí me gusta obviar esta parte (tasa libre de riesgo = 0) y así puedo comparar mejor los sistemas independientemente de cómo esté la renta fija ese año.

Para calcular el Sharpe simplificado hay que sacar los retornos diarios y sobre ellos calcular la desviación estándar. Anualizamos multiplicando por 16 ( más o menos la raíz de los días de trading que tiene un año). Calculamos la media de los retornos diarios y anualizamos, multiplicando por 252 días de trading. El cociente es el ratio de Sharpe.

Lo de hacer la raíz cuadrada con la volatilidad pero no con los rendimientos es porque la volatilidad crece como la raíz cuadrada del tiempo mientras que los rendimientos crecen proporcionalmente al tiempo. Por ejemplo, si alguien consigue un 0.1% diario de ganancia media, con una desviación de los retornos del 1% entonces su ratio de sharpe es:

Sh = 0.1*252 / (1*16) = 1.57

He trabajado sobre el código que puse en el post sobre la volatilidad anualizada de la curva de capital y he incluido la media y el cociente de ambos para llegar al ratio de sharpe. 


sábado, 5 de mayo de 2018

5 del 5, se inaugura oficialmente el Blog de Notas Técnicas de Onda4



Este Blog está pensado para que sea un sitio muy técnico donde no habrá sitio para opiniones de mercado, noticias, etc. Solo código y pantallazos de lo que hace ese código. Y hojas Excel con simulaciones de Montecarlo, algoritmos de Gestión de Capital… etc.

En el blog habrá mucho código amibroker, que es la plataforma que más utilizo y con la que me siento más a gusto ya que es muy potente. Cuando salió era la única que permitía simular una cartera de mercados. Con el tiempo ha ido mejorando incluso más y ahora hace maravillas como Walk Forward automático, análisis de Montecarlo en el backtest, y muchas otras cosas que a los raritos de la programación de sistemas nos encantan.

Lo que se hace con el código: resultados, conclusiones, etc seguirá en la parte de los INFORMES de Onda4.

LA IDEA ES QUE EL BLOG SEA EL SITIO DONDE ENCONTRAR EL CÓDIGO NECESARIO PARA CREAR SISTEMAS DE TRADING, INDICADORES, ALGORITMOS O CUALQUIER COSA RELACIONADA CON TRADING CUANTITATIVO.

Oscar G. Cagigas

jueves, 3 de mayo de 2018

Calcular correlaciones para muchos mercados

Cómo calcular correlaciones



A la hora de ver las correlaciones entre los distintos mercados es importante darse cuenta que deben ser calculadas con los retornos diarios y no con el precio de los activos. El cálculo de correlaciones es muy tedioso si son muchos mercados ya que debe hacerse "todos con todos" y por tanto se necesita la potencia de un lenguaje de programación orientado a manejar gran volumen de datos, como es Python y en especial la librería Pandas.

Haremos lo siguiente:

1. Desde amibroker exportamos los datos a una carpeta "Quotes" de nuestro disco duro. Podemos usar el siguiente código:

Estadísticas de la curva de capital

A continuación se muestra el código Python que lee una curva de capital (exportada de Amibroker y almacenada como CSV en la carpeta "Quotes") y genera las estadísticas de media, desviación estándar y ratio Sharpe de la curva de capital.

En la imagen se ve la curva que tiene una volatilidad anualizada del 20.52% y una ganancia media del 19.54%. Eso resulta en un Sharpe de 0.95.

En el código he puesto que pinte el letrero en marzo de 2008 porque la curva de capital empieza en el año 2008. Pero eso refleja mi poca experiencia en Python. Quizás alguien quiera corregirlo y decirme como ajustar el letrero de forma relativa a la esquina superior izquierda :)




Volatilidad anualizada de la curva de capital

El siguiente código Amibroker añade una métrica nueva con la volatilidad anualizada de la curva de capital. Muy útil para el tema de riesgos.

Esta es una métrica que Amibroker no incluye y que es un estándar en los fondos y en el ambiente de brokers, etc para saber si una cartera es tranquila o arriesgada. Por encima del 20% de volatilidad anual se considera que la cartera es arriesgada.

Aquí se ha utilizado el modelo LogNormal de los precios. Es la línea que empieza por "volat" en la que se hace el logaritmo neperiano del cierre de hoy dividido por el de ayer.


ENTRADAS POPULARES