Acceder

Backtesting automático con Prorealtime

89 respuestas
Backtesting automático con Prorealtime
4 suscriptores
Backtesting automático con Prorealtime
Página
5 / 12
#33

Backtesting automático con Prorealtime

Hola a todos!! Vamos a ver como crear un sistema tendencial ganador rápidamente y de la manera más sencilla. Se aceptan críticas y todo tipo de ideas. Voy a ir creando el "robot" a medida que vaya escribiendo el hilo, así que lo siento si los resultados no son muy espectaculares o son malos directamente pero es para que se vea como se va haciendo desde cero. Voy a añadir una imagen a cada paso para que quede todo más claro ;) Primero de todo escogemos un par tendencial y líquido, el GBPUSD mismo y le damos a crear backtest.

 

Acto seguido rellenamos la parte de la derecha con los datos de nuestro broker, yo lo tengo así:

 

El siguiente paso es definir cuando comprar y cuando vender. Va a ser un sistema tipiquísimo de cruce de medias. Lo de siempre, cuando la corta cruza la larga compramos y al revés vendemos. Añadimos las medias en el gráfico (He escogido las exponenciales de 20 y 50 pero pueden ser cualquier otras) y definimos los parámetros. Simplemente hay que hacer click en el propio gráfico para escogerlas en el backtest. Y quedaría algo como esto: Compra:

 

Venta:

 

Una vez tenemos todo configurado

 

le damos a validar y nos saldrá un código como este:

 

Ahora que ya tenemos el código base hacemos la primera prueba para ver como va sin hacer nada más. Es un sistema muy sencillo y que no tiene más secreto, este es el resultado:

 

Pérdidas pequeñas, drawdown alto, 99% de tiempo dentro del mercado.... Un sistema muy primitivo vamos Ahora es cuando empieza lo bueno y hay que empezar a mejorar el código y darle cuerpo. Empezamos quitando las órdenes de salida de mercado (tanto de largos como de cortos) para añadir un stop de pérdidas y un Take Profit ambos basados en la volatilidad (voy a utilizar el ATR). También eliminamos el 1 (de un contrato) por la variable posición y así le añadimos un Money Management del 1,5% por posición referenciado al stop.

 

Eliminamos lo que está en rojo y añadimos lo que pongo ahora en verde:

 

Ahora vamos a ver como funciona y ver si ha mejorado algo, aunque poco algo seguro que mejora ;) Al ser tendencial pongo de primer ejemplo un Stop x10 ATR y un TP x20 ATR. Validamos cambios y:

 

Prácticamente igual, rentabilidad y DD casi igual y menor tiempo de exposición al mercado, el resto de datos ni fu ni fa. Seguimos que aun no podemos tirar la toalla. Ahora empezamos con la optimización. Sustituimos los valores de las medias, el stop y el Take Profit por variables a, b, c y d

 

y definimos los valores a calcular

 

Valido y veo que me da error porque son muchas variables a tener en cuenta por lo que debo reducir el número de posibilidades. Error:

 

Reducimos posibilidades

 

y validamos

 

Tarda un rato en calcular, así que luego sigo ;) Ya va por un 20% Ahora un 37%

#34

Finalmente el PRT ha dado estos datos tras optimizar las variables

Ya estoy por aquí, que estaba viendo el partido de holanda mientras que el backtesting hacia su trabajo!! Finalmente el PRT ha dado estos datos tras optimizar las variables:

 

Aquí siempre lo ordeno por % de operaciones ganadoras y no por rentabilidad total obtenida. Y siempre elijo la opción que me parezca más lógica, es decir siempre elegiré 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.

 

 

Que decir del robot: - Rentabilidad buena - DD horrible - % Win/Loss muy malo - Curva de beneficios no muy buena (sube, baja, sube, etc) Que hacer ahora. Al ser un robot tendencial a mi 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 jajajjaa. Entonces, sabiendo que mi 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 no?? Por lo menos en el último año. Pongo gráfico diario:

 

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

 

validamos

 

Y VOILÁ!!!! La cosa se empieza a poner interesante jajajjaja El robot pasa a tener una rentabilidad brutal!! Si bien casi todos los ratios han mejorado brutalmente, el DD y el Win/Loss Ratio siguen siendo 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 el DD que es importantísimo. Añadimos el Parabolic-SAR:

 

Os lo pongo así para que luego vosotros sepais poner los códigos y probarlo por vuestra cuenta ;) Y de pronto:

 

Hemos subido 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)

 

Y a ver que sale

 

Increible!! jajajjaa. 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á restadas las comisiones y el spread (siempre pongo uno mayor por si las moscas) Todo empieza a pintar muy bien, pero hasta que el DD no baje yo ahí no meto ni un euro. Probamos añadiendo un tercer indicador, el estocástico:

 

Tengo curiosidad de ver que sale jajajja, por cierto como podeis 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 ponerla 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. A ver que sale:

 

Bueno, bueno, bueno!!! 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:

 

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 - Take Profit = ATR del momento x 20 - Money Management: 1) 1,5% de la cuenta por posición referenciado al stop 2) Reinversión de beneficios Y con esto doy por concluida la demostración. De normal esto suele tardar poco, aunque subiendo fotos y con el lio de dibujar con el paint los códigos he perdido toda la tarde jajjajaja. 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 os haya servido, al menos para hacer vuestras propias pruebas ;) yo la verdad es que ya estoy agotado jajjaajaja Saludos!!!

#35

Re: BACKTESTING automático con Prorealtime

Buenas tardes Víctor,

En primer lugar felicitarte por la entrada. Muy buena!!. Particularmente todavía estoy digiriendola ya q hay muchos conceptos e ideas y por supuesto las aportaciones de los compañeros del foro.

Te quería preguntar exactamente cómo haces un screener para medir la fortaleza de los sectores.. bancos, constructoras, etc. ¿Puedes indicarme los pasos o copiar algún codigo?.

Muchas gracias.... en los próximo días seguiré preguntando ya q no pillo todo.

Saludos,

Suomi

#36

Re: BACKTESTING automático con Prorealtime

Hola Suomi!!

Muchas gracias por tus comentarios ;)

El Screener que comentas me lo copie de aquí:

http://losmercadosfinancieros.es/como-crear-un-screener-para-detectar-sectores-europeos-y-americanos-en-subida-libre.html

Te explica paso a paso como hacerlo. Una vez tengas seleccionados todos los sectores se te quedarán guardados en una lista. En el link que te paso, el screener está configurado para buscar sectores que estén haciendo máximos históricos (lo que viene siendo subida libre) que va bastante bien para ver de un pantallazo que sectores son los más fuertes, pero puedes cambiar el código como tu quieras, es decir, que te los busque por volumen mayor, por tendencia de algún indicador, por distancia de una media movil de largo plazo, etc. Hay tantas posibilidades como ideas se te ocurran, aunque la que está en las instrucciones es bastante completa.

Espero que te sea de utilidad, cualquier cosa no dudes en preguntar ;) Y no te olvides de guardar, que el PRT es muy cabrón en eso y se te borra todo enseguida jajajja

Un saludo Suomi!!

#37

Re: BACKTESTING automático con Prorealtime

Muchas gracias Victor,

Cuando llegue a casa intento probarlo.

suomi

#38

Re: Backtesting automático con Prorealtime

Hola Victor! Muy currado el hilo que estás montando! felicidades!!

En cuanto al sistema voy a decir lo que haría yo (que no quiere decir que sea ni mejor ni peor, simplemente es mi punto de vista).

Primero haría el backtest sin gestión monetaria, más que nada para tener un drawdown absoluto real, ya que si pones que sea un X% del capital la cantidad a arriesgar irá variando, de la forma que yo digo tienes una idea de cuanto puede perder el sistema si lo pones de 0 en real y entrando desde ese momento en su peor racha. Cosa que no quiere decir que la gestión monetaria no sea importante, es lo más importante, pero es un tema que hay que tratar más a fondo después de tener el sistema.

Después, al ser un sistema tendencial echo de menos algún filtro de tendencia (los osciladores para este tipo de sistema no me acaban, aunque si que he visto sistemas tendenciales con un RSI, como el bunny girl), quizás una ADX que marque tendencia alcista, un MACD que esté cruzado al alza por encima de la línea de cero, o una media móvil más lenta y solo coger cruces al alza de las otras dos medias por encima de ésta. Quizás algún filtro de volatilidad también para evitar periodos laterales con volatilidad baja... todo es estudiarlo.

Bueno esto solo son unas ideas por si puede ayudar en algo!!

Un saludo!!!

#39

Re: Backtesting automático con Prorealtime

Hola David!!

Muchas gracias por tus palabras ;)

He hecho el backtest sin gestión monetaria al principio (Daba un DD del 17% con el cruce de medias sin nada más [foto 7]), sólo que luego añado los stops/TPs por ATR y el MM a la vez, quiza debería implementar primero los stops/TPs y ver el resultado sin MM y luego ya el MM, no se si te refieres a eso. Me lo apunto para la próxima prueba ;)

Para mi gusto, el MM es lo más importante, de nada sirve tener la estrategia del siglo y una cabeza fría y calculadora si luego te vuelves loco apalancándote. Me he leido el artículo, muy interesante, ya me leí en su día varios libros y estudios sobre el MM con nombres y fórmulas muy raras jajjaja (Vince, Jones, Tharp, etc) y al final en mi día a día sólo utilizo un % de mi cuenta por posición referenciado a mi stop y au :D

La verdad es que los indicadores los utilizo de manera muy especial y muy personal por como entiendo el mercado, los indicadores para tendencia mucho mejor como dices y los osciladores para laterales, pero como ves los he empleado sobre todo para filtrar las entradas e intentar eliminar DD (RSI < 80 y Estocástico < 90) no como método de entrada en sí. De todas formas el sistema lo fui haciendo a medida que escribía el post y metía lo que se me ocurría. Para coger una tendencia buena en tfs superiores un cruce de medias + ADX va fenomenal ;)

Lo de una tercera Media Móvil más larga ya lo he probado en otros sistemas y me gusta. Te copio la idea de poner un filtro de volatilidad para evitar los laterales, lo haré en las siguientes pruebas ;)

Como dices todo es tener la idea, estudiarla y prueba y error.

Y, por supuesto que ayudan tus ideas, son muy bienvenidas ;)

Un saludo!!

#40

Re: Backtesting automático con Prorealtime

has hecho el backtest en alguno otro par diferente al GBPUSD? gracias

Te puede interesar...