Venta anula compra en backtesting Metatrader 5

 

Buenos días,

Llevo poco tiempo programando en MQL5 y estoy teniendo un problema a la hora de hacer backtest. Os cuento:

Estoy creando un sistema de grid que abre una compra y una venta en cada nivel, en el oro (XAUUSD). El problema está en que no puedo tener una compra y una venta ejecutadas a mercado a la vez, porque una cierra a la otra. Esto solo me ocurre a la hora de hacer backtest, porque si lo pongo en cuenta demo sí me funciona: se me queda abierta la compra y la venta, que es juto lo que quiero. Por ello, no puedo hacer simulaciones de cómo se habría comportado el bot en fechas pasadas, solo en tiempo real. Esto no me pasaba cuando programaba en MQL4, por eso me extraña bastante.

¿Significa esto que no se pueden hacer simulaciones de sistemas grid en Metatrader 5?

En esta imagen podéis ver cómo al ejecutar una venta, se cierra la compra (la transacción 3 cierra la transacción 2):

Venta cierra la compra

Este es el código que estoy usando:

#include <Trade\Trade.mqh>

//Variables externas:
input double GridSize = 1.00;

//Variables internas:
bool on = true;

//Instanciar objetos:
CTrade trade;

void OnTick(){

     double Ask = NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_ASK), Digits());
     double Bid = NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_BID), Digits());
     
     datetime time = TimeLocal();
     string hoursAndMinutes = TimeToString(time,TIME_MINUTES);
     
     if((PositionsTotal()==0) && (StringSubstr(hoursAndMinutes,0,5)=="02:00") && (on==true)){
        trade.Buy(0.01,_Symbol,Ask,0,0,"Compra");
        trade.Sell(0.01,_Symbol,Bid,0,0,"Venta");
        on = false;
     }

     Comment("Posiciones: ", PositionsTotal(), "\n", "Hora: ", hoursAndMinutes);
}

Ojalá alguien pueda ayudarme... Muchas gracias de antemano.

Saludos!

 
Miguel Angel Santos Garcia:

Buenos días,

Llevo poco tiempo programando en MQL5 y estoy teniendo un problema a la hora de hacer backtest. Os cuento:

Estoy creando un sistema de grid que abre una compra y una venta en cada nivel, en el oro (XAUUSD). El problema está en que no puedo tener una compra y una venta ejecutadas a mercado a la vez, porque una cierra a la otra. Esto solo me ocurre a la hora de hacer backtest, porque si lo pongo en cuenta demo sí me funciona: se me queda abierta la compra y la venta, que es juto lo que quiero. Por ello, no puedo hacer simulaciones de cómo se habría comportado el bot en fechas pasadas, solo en tiempo real. Esto no me pasaba cuando programaba en MQL4, por eso me extraña bastante.

¿Significa esto que no se pueden hacer simulaciones de sistemas grid en Metatrader 5?

En esta imagen podéis ver cómo al ejecutar una venta, se cierra la compra (la transacción 3 cierra la transacción 2):

Este es el código que estoy usando:

Ojalá alguien pueda ayudarme... Muchas gracias de antemano.

Saludos!

Hola,

El problema que describes podría estar relacionado con la configuración del backtest en MetaTrader 5 (MT5). En MT5, a diferencia de MT4, hay diferencias en la forma en que se gestionan las posiciones y las órdenes, especialmente para estrategias como el grid trading que implican mantener múltiples posiciones opuestas simultáneamente.

Aquí hay algunas cosas que podrías revisar y ajustar para resolver el problema:

  1. Revisa la Configuración del Backtest: Asegúrate de que la opción "Permitir órdenes múltiples" esté habilitada en la configuración del backtest. En MT5, esta opción se encuentra en las configuraciones del probador de estrategias y permite que el sistema mantenga múltiples posiciones en el mismo instrumento.

  2. Modo de Modelado: Asegúrate de que el modo de modelado en el probador de estrategias esté configurado adecuadamente. Usar los datos "tick-by-tick" en lugar de "cada barra" puede ayudar a obtener resultados más precisos, especialmente en estrategias que dependen de movimientos más pequeños del mercado.

 

Muchas gracias por tu respuesta, Nicola!

No he encontrado esa opción como tal que se llama "Permitir órdenes múltiples", pero he conseguido resolverlo.

A continuación explico cómo lo he hecho por si hay alguien en mi misma situación:

Primero, me he conectado a una cuenta comercial (cuenta DEMO). Después he ido al Probador de Estrategias y he hecho lo siguiente:

En la pestaña "Margen" de Ajustes comerciales, hay que seleccionar "para Retail Forex, CFD, Futures con posiciones con cobertura".

En caso de que el botón de Aceptar no funcione, id a la pestaña "Comisiones" y haced click en "Utilizar ajustes de usuario":

Haciendo eso he conseguido tener una compra y una venta abiertas simultáneamente en MT5, sin que una posición cierre la otra.

Saludos!