[¡AVISO CERRADO!] Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen. No puedo ir a ningún sitio sin ti. - página 323

 
Vinin писал(а) >>

Por eso se cometen errores a propósito.

Y a propósito, es gracioso... Me encantaría ver ese error, pero no lo encuentro.

 
Daiver2 >> :

Ejecuto algunas funciones como script de prueba para ver si hay algún error de compilación y cuáles son para comprobar si funcionan o no en la terminal. Hoy he cogido la función de pre-cálculo de barras en la ventana:

Naturalmente sale el mensaje *No hay suficientes barras*, pero en un nuevo tick entiendo que este mensaje volverá a aparecer indefinidamente.

Ahora añado una variable y escribo en una sentencia if, y también en el futuro bloque de manejadores de errores Bloc_Error, pongo un operador switch y lo resulto:

La pregunta es qué he hecho mal en el operador de cambio, por qué no se muestra el mensaje *Experto no funciona* y por qué el EA realmente deja de funcionar?????
//+------------------------------------------------------------------+      
    switch()//?????????????? почему в switch не передаёте параметр 
      {
      case 3:          // Неверные параметры:
      Work=false;
      return(0);
      }


 

Hola a todos.

No puedo entender la causa del error cuando el EA se está ejecutando. Estoy probando un EA en 11 pares en un terminal al mismo tiempo (cuenta demo). Compruebo las condiciones de entrada al comienzo de cada hora, es decir, 11 EAs comienzan a trabajar simultáneamente. Se ha utilizado la función IsTradeBusy() (a partir de aquí https://www.mql5.com/ru/articles/1412) para evitar que se molesten entre sí. Recientemente, el Asesor Experto ha estado reportando un error cuando intenta cambiar el valor de la variable global TradeIsBusy en lugar de abrir una posición. Aquí está parte del código:

     // пытаемся менять значение TradeIsBusy с 0 на 1
     // если нам это удаётся, выходим из ф-ции, возвращая 1 - "успешное завершение"
     if(GlobalVariableSetOnCondition( "TradeIsBusy", 1.0, 0.0 )) 
         return(1);
     else
     // если нет, возможны 2 причины: TradeIsBusy = 1 (тогда надо ждать), либо 
     // возникла ошибка (это мы и проверим)
     {
        _GetLastError = GetLastError();
        // если это всё таки ошибка, выводим информацию и пробуем ещё раз
        if(_GetLastError != 0)
        {
           Print("TradeIsBusy()-GlobalVariableSetOnCondition(\" TradeIsBusy\",1.0,0.0 )-Error #",
           _GetLastError );
           continue;
        }
     }

Códigos de error:

#4002 - "índice de matriz - fuera de rango"

#4105 - "No se ha seleccionado ninguna orden".

No entiendo qué condiciones pueden causar estos errores utilizando el comando GlobalVariableSetOnCondition.

Terminal Broco Trader 4.0 build 225.

¿Puede el terminal fallar así?

 
Urain писал(а) >>

>>Gracias, lo haré.

 
OAndrey писал(а) >>

Hola a todos.

No puedo entender la causa del error cuando el EA se está ejecutando. Estoy probando un EA en 11 pares en un terminal al mismo tiempo (cuenta demo). Compruebo las condiciones de entrada al comienzo de cada hora, es decir, 11 EAs comienzan a trabajar simultáneamente. La función IsTradeBusy() (a partir de aquí https://www.mql5.com/ru/articles/1412) se ha utilizado para no molestarse. Recientemente, el Asesor Experto ha estado reportando un error cuando intenta cambiar el valor de la variable global TradeIsBusy en lugar de abrir una posición. Aquí está parte del código:

Códigos de error:

#4002 - "índice de matriz - fuera de rango"

#4105 - "No se ha seleccionado ninguna orden".

No entiendo qué condiciones pueden causar estos errores utilizando el comando GlobalVariableSetOnCondition.

Terminal Broco Trader 4.0 build 225.

¿Puede el terminal fallar así?

No puedo decir nada sobre este trozo de código. Y como consejo. Restablece el estado del último error al inicio de la función. Puede ocurrir en otro lugar.

   GetLastError();  //Сбрасываем состояние 

   // пытаемся менять значение TradeIsBusy с 0 на 1
   // если нам это удаётся, выходим из ф-ции, возвращая 1 - "успешное завершение"
   if(GlobalVariableSetOnCondition( "TradeIsBusy", 1.0, 0.0 )) 
      return(1);
   else
   // если нет, возможны 2 причины: TradeIsBusy = 1 (тогда надо ждать), либо 
   // возникла ошибка (это мы и проверим)
   {
      _GetLastError = GetLastError();
      // если это всё таки ошибка, выводим информацию и пробуем ещё раз
      if(_GetLastError != 0)
      {
         Print("TradeIsBusy()-GlobalVariableSetOnCondition(\" TradeIsBusy\",1.0,0.0 )-Error #",
         _GetLastError );
         continue;
      }
   }
 

¿Cómo hacer un salto de línea en el texto? Por ejemplo, muestro algo en un gráfico, en OBJ_LABEL, y quiero que el texto se escriba en varias líneas.

 
Mathers >> :

¿Cómo hacer un salto de línea en el texto? Por ejemplo, muestro algo en un gráfico, en OBJ_LABEL, y quiero que el texto se escriba en varias líneas.

Visualización en múltiples etiquetas.

 

¿Y si el número de líneas cambia dinámicamente? Y puede ser bastante grande. ¿Tal vez se pueda utilizar otra cosa en lugar de una etiqueta?


Y aquí hay otra pregunta: digamos que tengo un script que hace algo en un bucle infinito con un retraso de, por ejemplo, un segundo. Cuando intento eliminarlo, elijo "eliminar el script", pero no se elimina del gráfico, sino que empieza a embestir sin demora. Cuando vuelvo a pulsar "delete" se elimina el script. ¿Cuál es el problema? ¿Quizás deba añadir algo al código para completarlo correctamente?

 
Mathers >> :

¿Y si el número de líneas cambia dinámicamente? Y puede ser bastante grande. ¿Tal vez se pueda utilizar otra cosa en lugar de una etiqueta?

Alerta, alternativamente. Comentario: eso es bueno.

Y aquí hay otra pregunta: digamos que tengo un script que hace algo en un bucle infinito con un retraso de, por ejemplo, un segundo. Cuando intento eliminarlo, elijo "eliminar el script", pero no se elimina del gráfico, sino que empieza a embestir sin demora. Cuando vuelvo a pulsar "delete" se elimina el script. ¿Cuál es el problema? Tal vez debería añadir algunas palabras adicionales en mi código.

Sustituir while(true) por while(!IsStopped())

 
Mathers >> :

¿Y si el número de líneas cambia dinámicamente? Y puede ser bastante grande. ¿Tal vez se pueda utilizar otra cosa en lugar de una etiqueta?

No. A menos que el comentario no encaje. Escribe una función f donde se generará la salida y escribe lo que necesites a través de ella.

Y aquí hay otra pregunta: digamos que tengo un script que hace algo en un bucle infinito con un retraso de, por ejemplo, un segundo. Cuando intento eliminarlo, elijo "eliminar el script", pero no se elimina del gráfico, sino que empieza a embestir sin demora. Cuando vuelvo a pulsar "delete" se elimina el script. ¿Cuál es el problema? Tal vez debería añadir algunas palabras adicionales en mi código.

Así es como debe ser.