viernes, 27 de enero de 2017

Sistema de swing trading para el SP500

   En este artículo voy a mostrar la lógica de un sistema de swing trading para el índice SP500. Ya he comentado en más de una ocasión que soy partidario de aplicar criterios lo más simples posibles a la hora de desarrollar los sistemas con los que opero porque la experiencia me ha demostrado que suelen ser los sistemas más robustos y con menor probabilidad de sobre optimización.

   El sistema en cuestión sólo opera en el lado largo del mercado sobre gráficos diarios y aprovecha una corrección de corto plazo en la tendencia alcista principal, para entrar largo buscando que el precio supere de nuevo el máximo previo. En la imagen siguiente se puede ver una representación de lo expuesto anteriormente:




  1. El índice viene  con una tendencia alcista de largo plazo.
  2. Se produce un pullback de corto plazo que aprovechamos para abrir posición larga.
  3. Situamos nuestro stop y objetivo esperando que el precio vuelva a rebasar el máximo previo al pullback para cerrar la posición.

   Con el fin de armar la lógica del sistema, tendremos en cuenta los siguientes aspectos:
  • Consideraremos que la tendencia es alcista cuando el precio de cierre sea superior a una media simple de 252 días, es decir, 1 año de trading aproximadamente:
           TrendUP = (close > SMA252)
  • Para medir el pullback del mercado, y, por tanto el punto de entrada, utilizaremos  TB unidades ATR de 14 días desde el máximo de los últimos P días, es decir:
           Si (low <= (highest[P](high[1]) - TB * ATR14)) --> Comprar a mercado en la apertura siguiente
  • Para ubicar el stop, utilizaremos también SL unidades ATR de 14 días, es decir:
             PrecioStop = (close - SL * ATR14) (donde close es el cierre de la vela anterior a la entrada)
  • Para ubicar el objetivo utilizaremos (SL - TB) unidades ATR de 14 días desde el máximo de los últimos P días, es decir:

              PrecioObjetivo = (highest[P](high[1]) + (SL-TB) * ATR14)


   En las siguientes líneas se puede ver el detalle de las definiciones necesarias para el lenguaje de programación de PRT:

      TB = 3
      SL = 3.5
      P = 45
      PUL = 252
      PS = 14

      SMA = Average[PUL](close)
      ValorATR = AverageTrueRange[PS]
      MaxRel = highest[P](high[1])

       SetupLong = (close > SMA) AND (low <= (MaxRel - TB * ValorATR))
       PrecioStop = (close - SL * ValorATR)
       PrecioOB = (MaxRel + (SL - TB) * ValorATR)

 Notas:
  • Los precios tanto de stop como objetivo se evaluarán al cierre de la vela correspondiente.
  • Los valores de las variables TB, SL y P serán los parámetros optimizables del sistema. Las pruebas que yo he realizado con el índice de contado SP500 me dan los valores 3, 3.5 y 45 respectivamente como óptimos después de haber realizado optimizaciones walk forward hasta 31/12/2015.
  • Esto es una idea simple que seguramente pueda ser mejorada cambiando parámetros, criterios a la hora de establecer la tendencia, profundidad del pullback, stop y objetivo y, por tanto, lo dejo al criterio de cada uno las pruebas necesarias para mejorar el sistema.
 
   En la imagen siguiente se puede ver las operaciones realizadas por el sistema en todo el periodo de operativa no optimizada desde el 01/01/2016, aplicado al índice de contado SP500 hasta el día de hoy:



   En la imagen siguiente se puede ver lo mismo pero aplicado al ETF SPY que es un instrumento sobre el que se podría operar el sistema en el mercado real:


Notas:

  • En ambos casos, no se aplica ningún mecanismo de gestión monetaria.
  • En ambos casos se ha tenido en cuenta unos gastos de 0,05% por operación.


   Por último, en las siguientes imágenes se puede ver la curva de resultados en todo el histórico hasta el 31/12/2015 junto con las estadísticas correspondientes:




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.

No hay comentarios:

Publicar un comentario