martes, 18 de abril de 2017

Sistema de reversión a la media para el SP500 (el poder de lo simple)

   Aunque mi estilo de trading principal es el de seguidor de tendencias de largo plazo, cada vez estoy más comprometido en buscar ventajas estadísticas en patrones o sistemas de reversión a la media. Confieso que cuando comencé a operar este tipo de sistemas en mi cuenta de trading real, no me sentía del todo cómodo porque la filosofía de entrada es totalmente contraria a lo que yo estoy acostumbrado, es decir, comprar/vender fortaleza/debilidad, mientras que estos sistemas se basan en comprar/vender durante correcciones a la baja/alza del precio en el sentido de la tendencia principal.

   Hasta ahora, la experiencia me ha demostrado que, una vez que se ha interiorizado su forma de operar y siguiendo una estricta gestión del riesgo, los resultados pueden ser muy buenos en aquellos activos en los que el precio tiende a revertir a su media. De todos los subyacentes sobre los que he estado haciendo pruebas, desde mi punto de vista, el rey es el índice SP500.

    Otro de los axiomas de mi operativa es la simplicidad de los conceptos que aplico a la hora de determinar las señales de entrada y salida. En general, todo aquello que se basa en reglas complejas y con muchos parámetros tiende a estar sobre optimizado y lo habitual es que no funcione durante la operativa real.

   En este artículo voy a mostrar un sistema muy simple basado en un indicador clásico: el momentum. Hasta ahora, todos estamos acostumbrados a comprar cuando el momentum de un activo es positivo y a vender cuando pasa a negativo. Pues bien, lo que vamos a hacer en este sistema es todo lo contrario. El único filtro que vamos a exigir al mercado es que su tendencia de largo plazo sea alcista.


   Vayamos con el código del sistema para PRT:

//  Sistema SP500-MRMOM-SL - v01
//  No incluye ningún sistema de gestión monetaria
//  Autor: tradingtendencial.blogspot.com
//  Añadir como variables optimizables los parámetros P y SL con valores 7 y 5 respectivamente

// Declaración de constantes e indicadores

ONCE Contratos = 1
ONCE PL = 252
ONCE PSL = 14

ValorATR = AverageTrueRange[PSL]
SMAPL = Average[PL](close)
Mom = (close - close[P])

// Condiciones para abrir largo

SetupLong = (Mom < 0) AND (close > SMAPL)
CloseLong = (Mom > 0) AND (Mom[1] > 0)

// Abrir largo

IF NOT LONGONMARKET THEN

IF SetupLong THEN

BUY Contratos SHARES AT MARKET
PrecioStop = (close - SL * ValorATR)
SELL Contratos SHARES AT PrecioStop STOP

ENDIF

ENDIF

// Cerrar largo

IF LONGONMARKET THEN

IF CloseLong THEN

SELL Contratos SHARES AT MARKET

ENDIF

ENDIF

// Stop loss

IF LONGONMARKET THEN

SELL Contratos SHARES AT PrecioStop STOP

ENDIF


   Como se puede ver, el sistema sólo opera en el lado largo del mercado e incluye un filtro de tendencia muy sencillo basado en el cierre por encima de la SMA de 252 días, es decir, aproximadamente 1 año de trading. Calculamos el momentum de los 7 últimos días y si éste es negativo, compramos en la apertura del día siguiente. Para cerrar la operación, esperamos a que el momentum sea positivo durante 2 días consecutivos y cerramos en la apertura del día siguiente. En general, los sistemas de reversión a la media no suelen incluir stops pero, yo soy incapaz de poner una orden en el mercado que no incluya instantáneamente su correspondiente stop. El mecanismo de stop que he incluido es que el precio llegue (al tick) a 5 ATR14 del precio de cierre del día en el que se produjo la señal. Eso es todo.

   En la imagen siguiente se puede ver el resultado de la curva total de beneficios sin aplicar ningún sistema de gestión monetaria:


   En la imagen siguiente se pueden ver las estadísticas de todo el periodo:


   Nota:
  • Para el cálculo de la curva de beneficios, he tenido en cuenta un 0,05% de comisiones y deslizamientos por operación.

   En la imagen siguiente se pueden ver las operaciones realizadas por el sistema durante el periodo fuera de muestra desde el 04/01/2016 hasta la fecha:



   Como se puede observar, si los resultados continúan siendo en el futuro igual que hasta ahora, estamos ante un sistema de lo más simple con unos resultados muy prometedores.

Aviso/Disclaimer:

  • Las opiniones registradas en este blog se refieren única y exclusivamente a las operaciones realizadas por mí en los mercados financieros y, por tanto, ni constituyen recomendaciones de compra y/o venta de activos ni me responsabilizo de las posibles consecuencias de su uso. Del mismo modo, tampoco me hago responsable de las opiniones o sugerencias realizadas por terceros en los comentarios.

4 comentarios:

  1. Muy interesante. De hecho estaba buscando un sistema de reversión a la media, para complementar el tendencial semanal y el de momentum mensual que operó actualmente.
    Lo probaré en Amibroker para comparar resultados.
    ¿Utilizas el índice Sp500 o su etf equivalente SPY?
    Saludos

    ResponderEliminar
  2. Gracias por tu comentario. El backtest está hecho sobre el índice de contado SP500 porque dispongo de más histórico. No le he probado sobre el SPY pero entiendo que los resultados deberían ser similares.

    ResponderEliminar
  3. Una duda, a la hora de hacer el backtesting ¿ asignas todo el capital inicial de 500000$ a la compra del Sp500 y vas reinvirtiendo los beneficios?

    ResponderEliminar
  4. No hay ningún mecanismo de gestión monetaria en el backtest ni re inversión de beneficios. Cada operación se hace con una posición de 1 unidad. El capital inicial de 500000 es simplemente una referencia. Ten en cuenta que en realidad el indice de contado SP500 no es un instrumento operable como tal. Por lo que he visto PRT asigna un valor de 100$ a cada punto ganado en SP500, es decir, el resultado de todo el backtest hasta la fecha sería una ganancia de unos 2686 puntos y, por tanto, mayor que el B&H y con menor drawdown. Para mí lo realmente importante son las estadísticas de las opes realizadas y la forma de la curva de beneficios. Lo demás no lo tengo en cuenta.

    ResponderEliminar