Acceder

Backtesting automático con Prorealtime

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

Backtesting automático con Prorealtime

Hola a todos!!

Voy a intentar explicar los conceptos básicos a la hora de hacer un backtesting automático en Prorealtime (a partir de ahora PRT) y así probar múltiples estrategias, mejorando unas y descartando otras.

Para los que no me conozcáis mi operativa está basada en la condición de mercado (parecido a la tendencia) y el Price Action en diferentes tfs. Mi mercado favorita es sin duda el Forex, así que sólo voy a tratar en este hilo las diferentes divisas. Sentíos libres de aportar cualquier activo que queráis, de hecho espero vuestro feedback y vuestras ideas para así mejorar estrategias y códigos ;)

Tengo abierto un hilo que se llama "análisis pares forex" donde más/menos se ve mi manera de afrontar el mercado. Pero eso es mi operativa discrecional, en este hilo me voy a centrar en la parte automática, la entrada y salida me la van a dar una serie de parámetros que siempre se repetirán.

Los backtestings automáticos, una vez hechos y si son buenos, se pasará al walk-forward, luego se probarán en demo y, si después de todo eso aun funcionan bien, hay dos opciones:

a) Crear un robot con ese código en una plataforma que acepte el trading automático o
b) Crear un indicador en PRT con ese código para que te avise de las señales de entrada/salida y replicarlas uno mismo en la cuenta real (éste ejemplo es el que yo hago, pues interdin no me acepta tener un robot funcionando)

Antes de empezar decir que el código de PRT es muy muy básico; MT4 o ninjatrader son plataformas mucho más atractivas a la hora de hacer un backtesting automático o un EA, pero creo que el PRT aunque muy básico y fácil la gente no le saca el jugo suficiente y es suficiente para hacer pruebas muy válidas. Quien quiera backtesting discrecional le tocará comprar/descargar el forextester, este hilo no va por ahí, las pruebas van a ser puramente automáticas.

PRT se compone de tres partes a la hora de automatizar estrategias:

1. Probacktest: Para backtesting. Controlando este que es el más completo, se aprenderán los otros dos con suma facilidad.
2. Probuilder: Para crear indicadores
3. Proscreener: Para buscar acciones/divisas/futuros que cumplan los requisitos que programemos. Muy útil para ahorra tiempo y tener más activos a nuestra disposición.

Las instrucciones de cada uno son estas:

1. https://www.prorealtime.com/es/pdf/probacktest.pdf
2. https://www.prorealtime.com/es/pdf/probuilder.pdf
3. https://www.prorealtime.com/es/pdf/proscreener.pdf

Por si alguien se lo quiere leer, aunque explicaré las partes más importantes, aunque nunca viene mal tenerlos a mano ;)

Como primer mensaje creo que ya esta bien. En el siguiente pondré el método que utilizo(paso por paso) para hacer las primeras pruebas.

Un saludo!!

#2

Re: Backtesting automático con Prorealtime

Voy a relatar paso por paso mi manera de empezar. No dudeis en preguntar, criticar o aportar lo que querais ;) Pasos: 1. Abro Proreal 2. Abro EUR/USD o GBP/USD (suelen ser mis dos primeras pruebas) 3. Le doy a mostrar (x) unidades y escribo el núm 100000 (es el máx que admite proreal) Para que coja el máximo de backtesting posible. 4. Utilizo TF 15' o inferiores porque el prorealtime no tiene comportamiento intrabarra y en tfs superiores se come los stops y no es real. Se puede hacer pruebas en 1h pero poniendo stops amplios, en 4h o diario no lo recomiendo. 5. Abro indicadores, probacktest y pruebo la idea (al principio con la ayuda, luego sin ella)

Aquí definiremos los parámetros de entrada clickando en el gráfico. Por ejemplo comprar "click" en el precio y se seleccionará precio y pones cuando cruce por encima y "click" a media movil simple de 50 por ejemplo y se seleccionará. La comprá quedará establecida en que comprará x contratos cuando el precio cruce por encima de la MM50. 6. Parametros que pongo: a) Capital inicial:10.000$ b) Comisión por orden: 1$ c) Margen: 1% (Lo típico de un broker) d) Tamaño lote: 10.000 (Para un mejor MM) e) Spread: 0,2-0,5 pips (Depende del activo, pero en eur/usd y gbp/usd suele ser 0 o muy poco, salvo en noticias o en el overnight que sube)* d) Fecha inicio y final: las máximas (100.000 velas por activo, lo que hemos puesto en el punto 3)

7. Genero código: Voy a poner ya de primeras un sistema ganador basado en bandas de bollinger y RSI: A modo resumen compra cuando precio sale y vuelve a entrar en la banda de bollinger de abajo y el RSI marca sobreventa. Y al revés para la venta. Iré explicando en los siguientes posts más sobre los códigos, pero esto es sólo para que veais los pasos que hago para probar e ir desechando pruebas. Código: "DEFPARAM CumulateOrders=False ONCE RSIPeriod = 14 ONCE UpperBand = 70 ONCE LowerBand = 30 ONCE BBPeriod = 25 //variables capital = 10000 + STRATEGYPROFIT posicion = (0.015 * capital)/ stopus IF RSI[RSIPeriod](close) < LowerBand AND Close <= BollingerDown[BBPeriod](close) THEN BUY posicion SHARES AT MARKET ELSE IF RSI[RSIPeriod](close) > UpperBand AND Close >= BollingerUp[BBPeriod](close) THEN SELLSHORT posicion SHARES AT MARKET ENDIF ENDIF atr = AverageTrueRange[14](close) stopus = atr*15000 TP = atr*30000 SET STOP PLOSS stopus SET TARGET PPROFIT TP" Fin código. a) No acumula órdenes --> DEFPARAM CumulateOrders=False (Si no demasiado drawdown) b) MM = 1,5% por posición arriesgado (recomiendo entre 1-1,5%) c) Parámetros de compraventa d) Stop y Take Profit según ATR con una RR 2:1 8. Pruebo el robot: a) Todos los parámetros de la prueba (Fijarse en drawdown, % ganador y tiempo en el mercado)

b) Como va evolucionando la cuenta, abajo las órdenes abiertas y abajo las entradas con sus Stops y TPs)

9. Lo pruebo en varios activos sin optimizar: GBPUSD (-28,2%), NZDUSD (1,7%), AUDUSD (-57,8). Veo que no va muy bien en otros pero en EURUSD se comporta muy bien al ser muy volatil. 10. Veo que va bien, pues lo optimizo (Si no da positivo no vale la pena optimizar, a la basura) 11. Optimizo estas variables (a, b y c): --> Optimizo MM, el Stop Loss y el TP y le doy a validar programa

12. Resultados optimización:

13. Elijo por lógica y no por números la opción más sensata y menos arriesgada. No vale la pena tener un robot sobreoptimizado pues se comportará mucho peor en el futuro. 14. Parámetros finales: -->

Elijo la opción MoneyManagement (1,5%), Stop (2 veces el ATR) y un TP (2,5 veces el ATR) a) Pasamos de una ganancia del 70% a un 51%, de un drawdown del 26% a uno del 19%, menos operaciones y lo mejor de todo una % ganador del 49% en vez de un 38% b) Se trata de un robot antitendencial, muy poco optimizado y que debería funcionar ahora mejor en otros activos. Con un resultado anual del 51% restando comisiones y posibles pérdidas. NADA MAL ;) 15. Se prueba en otros activos 16. Se prueba en walk forward y despúes en demo 17. Se saca a real Así a modo introducción creo que vale y sobre todo porque me tengo que ir ya corriendo y no puedo seguir escribiendo jajajja , mañana seguiré subiendo tutoriales y códigos y sobre todo explicaré varias pruebas que he ido haciendo. Menudo tocho os he contado eh jajajaja Un saludo!!

#3

BACKTESTING automático con Prorealtime

Esto es por así decirlo lo que exijo en cada prueba para seguir adelante:

CRITERIOS GLOBALES QUE BUSCO EN LOS ROBOTS:

1. Drawdown máximo del 20%

2. Tendencial o no tendencial (Tener esto muy claro!!!!)

3. En base a lo segundo si es tendencial busco una RR mínima de 2:1 o programo un trailing stop (la pena es que sólo son fiables los tfs cortos), si es contratendencial busco una RR de 1:1 o 2:1.

4. Lo que más busco es que mínimo tenga un % ganador del 20% si es tendencial y de un 30% si no lo es (Si no, ni lo optimizo)

5. Luego lo pruebo en diferentes activos (tiene que funcionar bien en varios) --> Simplemente abres Listas (Forex) y vas clickando en las diferentes divisas (es instantáneo)

6. La optimización tiene que ir dirigida a buscar un % ganador mayor, no el que te la rentabilidad más bestia porque no es válido, es trampa. Suelo optimizar sobre todo el TP y el MM lo bajo si hay mucho drawdown.

7. El stop yo lo programo siempre en base a la volatilidad (Lo más efectivo que he encontrado hasta ahora sin duda) a 1,5 veces el ATR del momento, pero si no lo hago así mínimo ha de estar a 10 puntos.

8. Éste es el código del MM (1,5% por stop/posición) y del STOP ATR con una RR 2:1:

//variables
capital = 10000 + STRATEGYPROFIT
posicion = (0.015 * capital)/ stopus

atr = AverageTrueRange[14](close)
stopus = atr*15000
TP = atr*30000

SET STOP PLOSS stopus
SET TARGET PPROFIT TP

Estos dos códigos los copio en todas mis pruebas, después de mucho probar es sin duda lo que mejor me ha funcionado.

9. Esto es cada robot en particular en tfs cortos, luego habría que conformar una cartera balanceada de todos ellos partiendo de criterios de estacionalidad, volatilidad, tendencia, intermercados, spreads, correlaciones...

10. Un mínimo de 200 operaciones para que el backtest sea fiable

11. Probarlo luego en "walk forward" o demo

12. Lanzarlo ;)

Mañana seguiré compañeros!! Un saludo a todos ;)

#4

Re: BACKTESTING automático con Prorealtime

Veo que esto no interesa a nadie jajajajja

Es una pena, porque es un tema muy interesante y útil.

Saludos!!

#5

Re: BACKTESTING automático con Prorealtime

Hola Victor! Me ha costado encontrar tu hilo! Pero sí que me parece muy interesante y me parece una muy buena idea la opción del proscreener, es algo que le falta a metatrader.

Unas preguntillas ¿Cómo optimiza PRT? ¿Utiliza el algoritmo genético o el Hill climbing? 

Voy a explicar un poco los pasos que sigo yo en MT4:

  1. Creo el sistema en base a algunas ideas: aquí hay que ticar código, que yo no tengo ni idea, pero tengo dos amiguetes que pilotan, así que no me centraré en este paso.
  2. Hago un backtest en los activos que creo que vaya a ir mejor. Normalmente pares de forex también, aunque he probado algún sistema en DAX y SP500 y me han gustado.
  3. Empiezo a optimizar. A ser posible toco el menor número de parámetros, no quiero caer en la sobreoptimización. Aquí utilizo el algoritmo de Hill Climbing y voy variable por variable. La variable por la que empiezo la selecciono dependiendo del tipo de sistema, por ejemplo, si es un sistema tendencial empiezo a optimizar el método de salida, y si es un antitendencial o un scalper, el método de entrada.
  4. Hago un backtest después de la optimización y miro sus estadísticas, que en metatrader vienen muy detalladas. Suelo mirar que tenga un profit factor mayor que 1.3 pero que haga un número de operaciones considerables en el periodo de tiempo seleccionado (obviamente con un profit factor mayor que 1 el sistema obtiene beneficios), también intento que el DD sea muy reducido, no acepto ninguno por encima del 20% del capital inicial(aquí coincidimos), después también estudio el recovery factor y las rachas.
  5. Intento pensar cómo mejoraría el sistema si añadiendo filtros o quitándoselos.
  6. Veo como encaja en la cartera de sistemas.

Estos son principalmente los pasos que sigo (o seguía, hace un mes y algo que no he vuelto a trabajar en ello por falta de tiempo, pero volveré).

Un saludo!!

#6

Re: BACKTESTING automático con Prorealtime

vaya currada. me parece muy interesante la metodologia que utilizas solo me surgen unas dudas. en que time frame es mejor hacer el backtesting si mi operativa no es intradia, de m15 o m30? cada cuando haces el backtesting?

por cierto, conoces la herramienta forextester? yo no tengo el nivel avanzado que teneis david y tu, hago un backtesting simple. pero gracias

#7

Re: BACKTESTING automático con Prorealtime

Claro que interesa pero como decía no se qué político, los elefantes hay que masticarlos en bocados pequeños... Es muchísima información en tres mensajes. A ver si el finde le puedo echar un ojo

#8

Re: BACKTESTING automático con Prorealtime

operas tu tmb en forex?

Te puede interesar...
  1. Inflación y tipos en el punto de mira, la historia no se repite pero rima
  2. La Euforia Post-Trump: ¿Calma o Tormenta en el Mercado?