Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 1737

 
Artyom Trishkin #:

Por supuesto, el programa no está esperando que el terminal en un hilo separado para registrar algunos datos.

Gracias, quiero decir

 
Por favor, dígame, ¿después de la pausa en el operador for (i; i>0; i--) se ejecuta la expresión "i--" o simplemente la "expresión 3" (según la documentación)? No pude encontrarlo en el libro de texto.

No entiendo por qué se lanza "-1" de vez en cuando si después de la ruptura el Print(i); antes de la ruptura hay i-- y si (i==0), que es el comando de salida si i ya ha llegado a 0 dentro del operador. Como i se utiliza aún más abajo en el código, en Close[i], produce el error "fuera de rango

 
Ivan Butko operador for (i; i>0; i--) se ejecuta la expresión "i--" o sólo la "expresión 3" (según la documentación)? No pude encontrarlo en el libro de texto.

No entiendo por qué se lanza "-1" de vez en cuando si después de la ruptura el Print(i); antes de la ruptura hay i-- y si (i==0), que es el comando de salida si i ya ha llegado a 0 dentro del operador. Como i se utiliza aún más abajo en el código, en Close[i], produce el error "fuera de rango

No lo entiendo. Muéstrame el código
 
Ivan Butko operador for (i; i>0; i--) se ejecuta la expresión "i--" o sólo la "expresión 3" (según la documentación)? No pude encontrarlo en el libro de texto.

No entiendo por qué se lanza "-1" de vez en cuando si después de la ruptura el Print(i); antes de la ruptura hay i-- y si (i==0), que es el comando de salida si i ya ha llegado a 0 dentro del operador. Como i se utiliza aún más abajo en el código, en Close[i], produce el error "fuera de rango

Después de la ruptura, salir del bucle al siguiente operador después del bucle, después de que el bucle itera hasta el final de la iteración en ese punto y comienza uno nuevo.

 
Valeriy Yastremskiy for (i; i>0; i--)
{
i--;
if (i==0) break;
}

Print(i);
Print(Close[i]);

// En el registro dice (-1), cómo es que... y, por lo tanto, lamatriz de errorfuera de rango, porque Close[-1] no se produce.

Quiero decir, ¿estoy en lo cierto al entender que después de la ruptura en la cabecera(i; i>0; i--) se sigue ejecutando la tercera expresión "i--"?

Документация по MQL5: Основы языка / Операторы / Оператор цикла for
Документация по MQL5: Основы языка / Операторы / Оператор цикла for
  • www.mql5.com
Оператор цикла for - Операторы - Основы языка - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Ivan Butko for (i; i>0; i--)
{
i--;
if (i==0) break;
}

Print(i);
Print(Close[i]);

// El registro dice (-1), cómo así... y, por lo tanto, lamatriz de errorfuera de rango, porque Close[-1] no se produce.

Quiero decir, ¿estoy en lo cierto al entender que después de la ruptura en la cabecera(i; i>0; i--) la tercera expresión "i--" se ejecuta de todos modos?

Escribe correctamente

i=10;
for (i; i>0; i--)
{
i--;
if (i==0) break;
}

Print(i);
Print(Close[i]);
No sólo se quita en la cabecera, sino también en el cuerpo del bucle.
 
Konstantin Nikitin #:

Escribe correctamente.

No preguntes qué clase de tonterías escribo en mi código. Sólo quiero entender los matices de este operador) Parece que en el cuerpo he especificado "es hora de salir de aquí, porque i=0", pero el operador toma y ejecuta de nuevo la expresión, aunque debería pasar el control al siguiente operador

 
Ivan Butko #:

No me preguntes qué clase de tonterías estoy escribiendo. Sólo quiero entender los matices de este operador) Es como si en el cuerpo especificara "es hora de salir de aquí, porque i=0", pero el operador toma y ejecuta de nuevo la expresión, aunque debería pasar el control al siguiente operador

Sí lo hiciste, pero lo quitaste antes de esta comprobación. Escríbelo así

i=10;
for (i; i>0; i--)
{
if (i==0) break;
i--;
}

Print(i);
Print(Close[i]);

habrá un resultado diferente

 
Konstantin Nikitin #:

Sí lo hiciste, pero lo quitaste antes de esta comprobación. Escríbalo así


aah... Lo tengo. Entendido.

Gracias a todos por sus rápidas respuestas.

 
Ivan Butko #:

ahh... Lo tengo. Entendido.

Gracias a todos por sus rápidas respuestas.

Tu código imprime 0, no -1...

void OnStart()
  {
int i=10;
for (i; i>0; i--)
{
i--;
if (i==0) break;
}

Print(i);
  }
//+------------------------------------------------------------------+

Probablemente -1 impreso desde otro lugar, lo más probable es que todo el código esté en las impresoras...

Antes de intentar resolver el problema, hay que identificarlo... Asegúrate de que está ahí y localízalo antes de resolverlo...