Errores, fallos, preguntas - página 38

 

Ha surgido un problema, no sé dónde ponerlo.

Aquí está la sección de código que me interesa:

      Print("itogo do=",itogo);
      if(itogo>1000)
        {
         Print("itogo>1000 =",itogo);
         itogo=500;
         Print("vsego_if=",itogo);
        }
      Print("itogo posle=",itogo);
      Print("+-----------------------------------------------------------+");

Dice que primero hay que desimprimir el valor de la variable itogo con el texto "itogo do",

entonces si itogo es más de 1000 entonces imprime itogo con el texto "itogo>1000 "

itogo se asigna 500

Imprime itogo con el texto "vsego_if=" y luego deja la zona protegida

imprimir itogo con el texto "itogo posle="

trazar una línea.

¿Por qué entro en detalles?

debe quedar claro que si no había ninguna condición, habrá dos líneas entre ellas; si había una condición, habrá cuatro líneas.

Sabemos que cuando la condición se dispara el valor de la variable cambiará.

Veo la desimpresión de la que se desprende que la condición no se ha disparado, pero el valor de la variable ha cambiado.

¿Cómo puede ser esto ??????????


Aquí hay una captura de pantalla del código para mostrar que nada entre las líneas, más allá de los límites del campo, está oculto.

El código se bloquea en absoluto, compila sin problemas pero se niega a funcionar como está previsto.

La variable está declarada globalmente int, el código en sí es grande pero las impresiones no están en ninguna otra parte del código.

Y lo más interesante con el depurador funciona bien, pero cuando se ejecuta en modo normal, aquí hay tales cambios

y esto no es el bot de las impresoras en la lógica del programa veo que algo está mal.

 

Todavía no he podido reproducirlo en otros ejemplos, pero esta parece ser la solución

Anteriormente existía DebugBreak(); y el código se ejecutaba a través del depurador, posteriormente se eliminó DebugBreak() y se recompiló todo

pero aparentemente ME recuerda que se utilizó el depurador y se niega a funcionar correctamente sin un depurador después de la compilación.

Si ejecuto el depurador, incluso en el arranque normal el script funciona bien.

 
Urain:

Todavía no he podido reproducirlo en otros ejemplos, pero esta parece ser la solución

Anteriormente existía DebugBreak(); y el código se ejecutaba a través del depurador, posteriormente se eliminó DebugBreak() y se recompiló todo

pero aparentemente ME recuerda que se utilizó el depurador y se niega a funcionar correctamente sin pasar por él después de la compilación.

Si lo ejecutas a través del depurador, el script funciona bien incluso durante el funcionamiento normal.


¿Y lo llaman liberación?

El posible participante del Campeonato 2010 ha escrito un Asesor Experto y lo ha depurado, pero las cosas del depurador permanecen en el código. Sin embargo, el Asesor Experto funciona bien. Sin embargo, sólo funciona con "trucos". No obstante, el participante no lo sabe, ¿cómo podría conocer una característica tan indocumentada?

Así que ese participante envió el código fuente de su EA a MetaQuotes para que participara en el Campeonato 2010 y ellos se limitaron a compilarlo y, por supuesto, el código resultó limpio sin ninguna "cosa de depurador".

El Campeonato 2010 está en marcha, pero el Asesor Experto MetaQuotes de alguna manera no opera de la misma manera que en su ordenador. Un participante está perplejo y tiene todo tipo de pensamientos...

 
Urain:

Ha surgido un problema, no sé ni dónde ponerlo.

He hecho este código como ejemplo (he puesto sus valores):

void Check(int itogo)
  {
   Print("itogo do=",itogo);
   if(itogo>1000)
     {
      Print("itogo>1000 =",itogo);
      itogo=500;
      Print("vsego_if=",itogo);
     }
   Print("itogo posle=",itogo);
   Print("+-----------------------------------------------------------+");  
  }
void OnStart()
  {
   Check(158);
   Check(179);
   Check(202);
   Check(222);
   Check(243);
   Check(261);
   Check(288);
   Check(301);
  }

Ha funcionado bien:

2010.07.08 07:00:22     size (EURUSD,D1)        +-----------------------------------------------------------+
2010.07.08 07:00:22     size (EURUSD,D1)        itogo posle=301
2010.07.08 07:00:22     size (EURUSD,D1)        itogo do=301
2010.07.08 07:00:22     size (EURUSD,D1)        +-----------------------------------------------------------+
2010.07.08 07:00:22     size (EURUSD,D1)        itogo posle=288
2010.07.08 07:00:22     size (EURUSD,D1)        itogo do=288
2010.07.08 07:00:22     size (EURUSD,D1)        +-----------------------------------------------------------+
2010.07.08 07:00:22     size (EURUSD,D1)        itogo posle=261
2010.07.08 07:00:22     size (EURUSD,D1)        itogo do=261
2010.07.08 07:00:22     size (EURUSD,D1)        +-----------------------------------------------------------+
2010.07.08 07:00:22     size (EURUSD,D1)        itogo posle=243
2010.07.08 07:00:22     size (EURUSD,D1)        itogo do=243
2010.07.08 07:00:22     size (EURUSD,D1)        +-----------------------------------------------------------+
2010.07.08 07:00:22     size (EURUSD,D1)        itogo posle=222
2010.07.08 07:00:22     size (EURUSD,D1)        itogo do=222
2010.07.08 07:00:22     size (EURUSD,D1)        +-----------------------------------------------------------+
2010.07.08 07:00:22     size (EURUSD,D1)        itogo posle=202
2010.07.08 07:00:22     size (EURUSD,D1)        itogo do=202
2010.07.08 07:00:22     size (EURUSD,D1)        +-----------------------------------------------------------+
2010.07.08 07:00:22     size (EURUSD,D1)        itogo posle=179
2010.07.08 07:00:22     size (EURUSD,D1)        itogo do=179
2010.07.08 07:00:22     size (EURUSD,D1)        +-----------------------------------------------------------+
2010.07.08 07:00:22     size (EURUSD,D1)        itogo posle=158
2010.07.08 07:00:22     size (EURUSD,D1)        itogo do=158

Como puede ver, no hay errores ni incoherencias en los valores de las variables.

Tal vez se olvidó de recompilar el código después de numerosas reediciones y utilizó una versión antigua.

Lo que tienes que hacer:

  • Copie su código desde cero, reinicie el terminal (para asegurarse) y compruebe
  • Si el error persiste, envíanos el código completo a través de servicedesk (o incluso en el foro) - seguramente lo revisaremos
 
simpleton:

Deja de ponerte histérico de una vez.

Si se confirma este error, se corregirá inmediatamente. El desarrollo de software no puede continuar sin errores.

 
Renat:

Deja de ponerte histérico de una vez.

Si se confirma este error, se corregirá inmediatamente. El desarrollo de software no puede continuar sin errores.

Renat, sugiero abrir el tema "Crítica a MQL5" o algo similar. Y todos los mensajes de este tipo de otros temas (hilos) deben ser borrados como off-top.

De este modo, los críticos tendrán la posibilidad de expresar su punto de vista, y los hilos se comportarán bien.

 

Me gustaría saber el destino de la solicitud#18261 parauna llamada a un indicador desde un EA (el valor no coincide con el indicador).

Sería bueno que respondieran de alguna manera...

Способы вызова индикаторов в MQL5
Способы вызова индикаторов в MQL5
  • 2010.03.09
  • KlimMalgin
  • www.mql5.com
C появлением новой версии языка MQL, не только изменился подход к работе с индикаторами, но и появились новые способы создания индикаторов. Кроме того, появилась дополнительная гибкость при работе с индикаторными буферами - теперь вы можете самостоятельно указать нужное направление индексации и получать ровно столько значений индикатора, сколько вам требуется. В этой статье рассмотрены базовые методы вызова индикаторов и получения данных из индикаторных буферов.
 
ddd06:

Me gustaría saber el destino de la solicitud #18261 para una llamada a un indicador desde un EA (el valor no coincide con el indicador).

Sería bueno que respondieran de alguna manera...

Su solicitud ha sido atendida. Se aconsejó.

Por qué no se ha actualizado en su perfil - lo averiguaremos.

 
Renat:

He hecho este código como ejemplo (pon tus valores):

Ha funcionado bien:

Como puede ver, no hay errores ni incoherencias en los valores de las variables.

Es posible que después de numerosas reediciones se haya olvidado de recompilar el código y haya utilizado una versión antigua.

Qué hacer:

  • Vuelve a copiar tu código desde cero, reinicia el terminal (para estar seguro) y comprueba
  • Si todavía tienes el error, envíanos el código completo a través de servicedesk (o incluso en el foro) - definitivamente lo comprobaremos

Y antes de postear aquí hice lo mismo, y el resultado fue el que tú tienes pero aquí en la hoja donde inicialmente surgió el error todo y se cae.

Repito la razón en el depurador, si en esa hoja de trabajo en particular hizo la recompilación y no se ejecutó a través de la depuración funciona incorrectamente, después de una ejecución en la depuración todo es normal. No sé por qué el depurador se enganchó a esta hoja de trabajo en particular, las copias de código en otras hojas de trabajo funcionan bien, pero esta no.

Por eso escribí arriba que no puedo reproducir el error hasta ahora (o mejor dicho, se reproduce pero sólo dentro del proyecto localizado).

Tal vez hay una característica del depurador o ME para recordar el historial de ediciones, tal vez hubo un error crítico antes del incidente al que no presté atención.

Документация по MQL5: Программы MQL5 / Ошибки выполнения
Документация по MQL5: Программы MQL5 / Ошибки выполнения
  • www.mql5.com
Программы MQL5 / Ошибки выполнения - Документация по MQL5
 
Urain:

Y yo hice lo mismo antes de postearlo aquí, y el resultado fue como el tuyo, pero en la hoja donde se produjo el error originalmente, todo se bloquea.

Repito la razón en el depurador, si recompilé en la hoja específica y no la pasé por el depurador funciona incorrectamente, después de depurar todo es normal. No sé por qué el depurador se enganchó a esta hoja de trabajo en particular, las copias de código en otras hojas de trabajo funcionan bien, pero esta no.

Por eso escribí arriba que no puedo reproducir el error hasta ahora (o mejor dicho, se reproduce pero sólo dentro del proyecto localizado).

Tal vez hay una característica del depurador o ME para recordar la historia de las ediciones, tal vez hubo un error crítico antes del incidente, al que no presté atención.

¿Recuerdas dónde se ha establecido DebugBreak()?

No ha habido suerte en reproducirlo hasta ahora.