Crear un backtesting automático (parte 4)

Seguimos con el robot tendencial. Una vez terminada la optimización el PRT nos da estas variables:

11

Aquí siempre hay que ordenar por % de operaciones ganadoras y no por rentabilidad total obtenida. Y siempre elegir la opción que parezca más lógica, es decir siempre antes un cruce de medias entre un 50-100 a un 26-47. En este caso el % ganador es muy parecido en todas (y muy bajo) así que elijo la de 30-170 (Nº redondos) y stop 2xATR y TP 20xATR para que coja toda la tendencia ya que tiene un % win/loss muy pobre.

22

grafico resultado

Que decir del robot: – Rentabilidad buena – DD horrible – % Win/Loss muy malo – Curva de beneficios no muy buena (sube, baja, sube, etc)

Aquí hay que innovar un poco y, al ser un robot tendencial, me gusta añadirle un filtro humano, es decir, mi visión de mercado. Por esto es tan importante hacer uno mismo un robot, para saber cuando funciona mejor y cuando peor, por eso no vale lo de comprar un robot por 300$ y dejarlo funcionando en MT4. Ójala. Entonces, sabiendo que el robot es tendencial, veo que gano mucho más comprando (184%) que vendiendo (-61%) por lo que es obvio que el GBPUSD se encuentra en una tendencia alcista. Por lo menos en el último año. Pongo gráfico diario:

tendencia foto34

Pues sí, es más que obvio que el par está en clara tendencia alcista y, por ahora, no da signos de cambio por lo que voy a modificar mi robot para que sólo entre largo en el mercado. Borramos lo que pone en rojo

55

validamos

66

¡Y voilá! La cosa se empieza a poner interesante. El robot pasa a tener una rentabilidad brutal, si bien casi todos los ratios han mejorado mucho, el DD y el Win/Loss Ratio todavía son lamentables. Así que lo que vamos a hacer es implementar una serie de indicadores clásicos para ver si mejoramos esa parte o como mínimo reducimos el DD que es lo más importante al fin y al cabo. Añadimos el Parabolic-SAR:

77

Pongo así los códigos por si queréis copiarlos y probarlo por vuestra cuenta, ya me diréis que tal. Una vez añadido el Parabolic-Sar

88

subimos un 30% la rentabilidad, mejorado bastante el ratio ganancia/pérdida, pero el DD y el % win/loss siguen siendo inaceptables. Añadimos el RSI (pero lo utilizaré de manera diferente, voy a poner que no compre si el RSI es mayor que 80 que significará que está sobrecomprado, pero si en todo lo demás, es decir de 80 para abajo)

99

Y a ver que sale

111

¡Muy bien! Seguimos mejorando todos los ratios y filtrando las entradas. El robot empieza a tener un % ganador de campeonato para un año y eso que ya están restadas las comisiones y el spread (siempre pongo uno mayor por si acaso). Todo empieza a pintar muy bien, pero hasta que el DD no baje yo ahí no metería ni un euro. Probemos añadiendo un tercer indicador, el estocástico:

222

Como podéis ver me gusta utilizar zonas más alejadas de la sobrecompra tradicional. Se que en el RSI está en 70, pero la he puesto en 80, lo mismo para el estocástico que se que está en 80 pero prefiero ponerlo en 90. Esto ya son gustos y algo de experiencia también de hacer muchas pruebas. Paso de optimizar estas variables, lo dejo tal y como están. Veamos:

333

¡Genial! Por fin el cambio esperado. Acabamos de perder un 220% de rentabilidad pero nuestro DD se ha visto reducido casi 3/4 partes. El robot queda tal que así:

  • Rentabilidad 113%
  • Ganancia media por operación: 1500€
  • Pérdida media por operación: 200€
  • DD 17%
  • 1 orden cada dos días
  • un 20% del tiempo en el mercado

Esto ya empieza a ser un robot a tener en cuenta. Vamos a ver su curva de beneficio:

444

Mucho mejor que la otra, más limpia y con inclinación positiva. Resumimos las características internas del robot:

Sólo largos tras:

  1. Cruce de medias exponenciales 30-170 (la corta cruza la larga por encima)
  2. Parabolic-SAR por debajo del precio
  3. RSI > 80
  4. Estocástico > 90

Stop = ATR del momento x 2  y Take Profit = ATR del momento x 20

Money Management:

  • 1,5% de la cuenta por posición referenciado al stop
  • Reinversión de beneficios

Y con esto doy por concluida la serie de cómo crear un backtesting automático. El proceso suele durar varias horas o un par de días dependiendo de nuestra dedicación. Decir que este código se puede mejorar mucho más, es lo de siempre prueba y error. No hay más que comparar los datos de la primera prueba (que daba pérdidas) con los del robot final. Los siguientes pasos serían probar el código en el resto de pares, luego en demo, luego en walk-forward y finalmente sacarlo a real.

Espero que sirva como introducción y funcione como base para la creación de muchos EAs mejores en el futuro.  Tengo muchas más pruebas hechas, iré subiendo las que vea interesantes.