Crear un backtesting automático (parte 2)

Voy a relatar paso por paso mi manera de empezar haciendo un backtest. No dudeis en preguntar, criticar o aportar lo que querais. La prueba va a tratar sobre un robot antitendencial de movimientos pequeños y rápidos.

Paso a paso:

1. Abro Proreal

2. Abro un producto que suela operar: EUR/USD, GBP/USD o el FDAX. Se puede elegir cualquiera.

3. Le doy a mostrar (x) unidades y escribo el número 100000 (es el máximo que admite proreal) para que coja las máximas barras de backtesting posible.

4. Utilizo un TF de 15 minutos o inferiores porque el prorealtime no tiene comportamiento intrabarra y en tfs superiores no llega a tener tanta precisión. Se puede hacer pruebas en 1H, 4H o en diario, pero poniendo stops muy amplios.

5. Abro indicadores, probacktest y pruebo la idea (al principio con la ayuda, luego sin ella)

Crear nuevo

Parámetros

Los recuadros en rojo son los pasos a seguir.

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. Parámetros que pongo:

a) Capital inicial:10.000$
b) Comisión por orden: 4$
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 un sistema ganador basado en bandas de bollinger y RSI:

A modo resumen compra cuando el 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 se vean los pasos que hago para probar e ir desechando pruebas.

Éste es el código en cuestión:

«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 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.

Estos son los parámetros programados:

a) No acumula órdenes –> DEFPARAM CumulateOrders=False (Si no, existe 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) Estos son los parámetros que aparecen al validar la prueba (hay que fijarse sobretodo en el drawdown, el % ganador y el tiempo en el mercado)

dejofoto4

b) También nos dice cómo va evolucionando la cuenta,  las órdenes abiertas y debajo del todo las entradas con sus Stops y TPs)

dejofoto3

9. Luego vienen las pruebas 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 volátil.

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

dejofoto5

12. Resultados optimización:

optimizacion2222

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: –>

pruebafinalfinal

Elijo la opción MoneyManagement (1,5%), Stop (2 veces el ATR) y un TP (2,5 veces el ATR)  y nuestro robot cambia a :

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 para empezar.

15. Se prueba en otros activos

16. Se prueba en walk forward y despúes en demo

17. Se saca a real