Página 1 de 1

Condición en MQL4 que a veces se ejecuta y a veces no

Publicado: 12 Oct 2022 21:31
por Aquistoy
Hola a todos:

Estoy empezando en esto de la programación con MQL4, y me ocurre que le pongo una orden para que los viernes noche cierre todas las operaciones abiertas, y mientras está tradeando en el probador de estrategias, se cumple, pero cuando el robot deja de crear nuevas operaciones, por haber llegado al límite que le he puesto, o por superar cierto Drawdown, deja de ejecutar los cierres, y no lo comprendo.

Es la primera orden de todas, y está fuera de cualquier otro condicionante:
void OnTick() {
if( (DayOfWeek()==5 && Hour()==23 && Minute()==58)) closeAll();

Si podéis observar el adjunto, el 24 de febrero deja de hacer operaciones, y no es hasta el 27 de abril que el probador de estrategias cierra todo, habiendo pasado por alto varios viernes, sin cerrar las operaciones que había abiertas. ¿Esto es normal, o como supongo, estoy haciendo algo mal?. Gracias.

Re: Condición en MQL4 que a veces se ejecuta y a veces no

Publicado: 12 Oct 2022 21:54
por X-Trader
Hola Aquistoy, bienvenido al Foro (bonito nick jeje). Posiblemente el problema esté en alguna de estas causas:

1. Un error en la función CloseAll (puedes compartir el código para poder analizarlo?).

2. Un festivo que no tuviera negociación a esa hora por el motivo que fuera (revisa fechas, a ver si puede ser esa la razón).

Cuando puedas dime y lo veo.

Saludos,
X-Trader

Saludos

Re: Condición en MQL4 que a veces se ejecuta y a veces no

Publicado: 12 Oct 2022 22:26
por Aquistoy
Gracias por la pronta respuesta, la función es todo simplona, y mientras está haciendo operaciones funciona:

void closeAll(){
for( int i = 0; i < OrdersTotal(); i++ ) {
if( OrderSelect( i, SELECT_BY_POS, MODE_TRADES ) == false ) break;
if( OrderSymbol() == Symbol() ){
RefreshRates(); //(no sé si es necesario)
if( OrderType() == OP_BUY ) OrderClose( OrderTicket(), OrderLots(), Bid, 3 );
if( OrderType() == OP_SELL ) OrderClose( OrderTicket(), OrderLots(), Ask, 3 );
}
}
}

Re: Condición en MQL4 que a veces se ejecuta y a veces no

Publicado: 12 Oct 2022 22:29
por sfriendsm2
DayOfWeek no vale para el probador de estrategias, porque no evalúa la fecha por la que vas probando, sino la fecha del servidor al que te has conectado.

DayOfWeek Returns the current zero-based day of the week (0-Sunday,1,2,3,4,5,6) of the last known server time.

De hecho esa hora tan concreta no la puedes reproducir en tu probador de estrategias, a no ser que uses un timeframe de 1 minuto y uses la siguiente función pasándole la hora de la vela 0.

TimeDayOfWeek Returns the zero-based day of week (0 means Sunday,1,2,3,4,5,6) of the specified date.

Espero que se resuelva así el problema.

Re: Condición en MQL4 que a veces se ejecuta y a veces no

Publicado: 12 Oct 2022 22:41
por X-Trader
sfriendsm2 escribió: 12 Oct 2022 22:29 DayOfWeek no vale para el probador de estrategias, porque no evalúa la fecha por la que vas probando, sino la fecha del servidor al que te has conectado.

DayOfWeek Returns the current zero-based day of the week (0-Sunday,1,2,3,4,5,6) of the last known server time.

De hecho esa hora tan concreta no la puedes reproducir en tu probador de estrategias, a no ser que uses un timeframe de 1 minuto y uses la siguiente función pasándole la hora de la vela 0.

TimeDayOfWeek Returns the zero-based day of week (0 means Sunday,1,2,3,4,5,6) of the specified date.

Espero que se resuelva así el problema.
Esa no me la sabía yo, mil gracias sfriendsm2! :smt023


Saludos,
X-Trader

Re: Condición en MQL4 que a veces se ejecuta y a veces no

Publicado: 13 Oct 2022 17:17
por sfriendsm2
X-Trader escribió: 12 Oct 2022 22:41
sfriendsm2 escribió: 12 Oct 2022 22:29 DayOfWeek no vale para el probador de estrategias, porque no evalúa la fecha por la que vas probando, sino la fecha del servidor al que te has conectado.

DayOfWeek Returns the current zero-based day of the week (0-Sunday,1,2,3,4,5,6) of the last known server time.

De hecho esa hora tan concreta no la puedes reproducir en tu probador de estrategias, a no ser que uses un timeframe de 1 minuto y uses la siguiente función pasándole la hora de la vela 0.

TimeDayOfWeek Returns the zero-based day of week (0 means Sunday,1,2,3,4,5,6) of the specified date.

Espero que se resuelva así el problema.
Esa no me la sabía yo, mil gracias sfriendsm2! :smt023


Saludos,
X-Trader
Pocas se te escapan, y es que es muy sutil esta ñoñada, jjjj

Re: Condición en MQL4 que a veces se ejecuta y a veces no

Publicado: 27 Oct 2022 09:44
por Aquistoy
Disculpad, al final era la cosa más tonta del mundo: el bróker no admite operaciones después de las 23:55, aunque el mercado siga operando.

Re: Condición en MQL4 que a veces se ejecuta y a veces no

Publicado: 27 Oct 2022 10:10
por X-Trader
Aquistoy escribió: 27 Oct 2022 09:44 Disculpad, al final era la cosa más tonta del mundo: el bróker no admite operaciones después de las 23:55, aunque el mercado siga operando.
Anda que... :lol: :D. Gracias por aclararlo Aquistoy ;).


Saludos,
X-Trader