Errores, fallos, preguntas - página 239

 

El gráfico acaba de ser "actualizado". Y vuelve a ser lo mismo:

 
Yedelkin:

El gráfico acaba de ser "actualizado". Y vuelve a ser lo mismo:

Escriba urgentemente a servicedesk y no cierre el terminal
 
AlexSTAL:
Escriba a servicedesk con urgencia y mantenga el terminal abierto
Bien, voy a copiar sin rodeos el enlace a este hilo.
 

Acabo de comprobarlo en el terminal - el gráfico EURUSD M1 está completamente presente en el lugar especificado, sin huecos.

Pruebe a dar el comando "Actualizar" del menú contextual del gráfico.

 
Renat:

Acabo de comprobarlo en el terminal - el gráfico EURUSD M1 está completamente presente en el lugar especificado, sin huecos.

Pruebe a dar el comando "Actualizar" del menú contextual del gráfico.

Refrescado manualmente, gracias. Como prácticamente no trabajo con gráficos, tengo una pregunta: ¿Cómo puedo actualizar la base de las minitables a nivel de Asesor Experto en una situación así? El terminal sólo funciona con la base de datos que tiene. ¿Debo integrar la función para comprobar la sincronización?
 
Renat:

Acabo de comprobarlo en el terminal - el gráfico EURUSD M1 está completamente presente en el lugar especificado, sin huecos.

Pruebe a dar el comando "Actualizar" del menú contextual del gráfico.


Creo que hay un error flotante en alguna parte.... Ya que no soy el único que tiene más o menos la misma situación en marcha....
 
Yedelkin:
Se ha actualizado manualmente, gracias. Como prácticamente no trabajo con gráficos, tengo una pregunta: ¿cómo actualizar la base de minutos en una situación así? El terminal sólo funciona con la base que tiene. ¿Es necesario integrar la función de comprobación de la sincronización?

He memorizado la hora de la pérdida y la reanudación de la comunicación en el cronómetro.

Teniendo esta información, puedes intentar descargar el historial del periodo (también puedes comprobar la sincronización con el servidor, si tiene sentido).

 

Señores promotores, estoy sin palabras. Me he encontrado con un problema de "borrado" de variables locales en el método del objeto tras la llamada interna del mismo método desde otro objeto. Puede que esté relacionado con alguna optimización en las llamadas a funciones anidadas de objetos, pero al menos no hay errores en el registro ni fugas de memoria. No puedo citar un código grande, pero el significado quedará claro en los ejemplos en principio:

variante 1

bool operate(CAlgoBlockLogic* s1, CAlgoBlockLogic* s2) {
 bool d1 = s1.process();
 bool d2 = s2.process();
 return (d2 && d1);
}

variante 2

bool operate(CAlgoBlockLogic* s1, CAlgoBlockLogic* s2) {
 return (s2.process() && s1.process());
}

Enteoría, el código debería funcionar exactamente igual. Pero... las variantes funcionan de forma diferente.

Así. La variante 1 no funciona correctamente. He realizado un registro en el archivo de depuración y he descubierto que la variable d1 definida en la función operate se sobrescribe con el valor de la variable d1 en una llamada interna de la misma función operate pero en otro objeto del mismo tipo. Es decir, en pocas palabras, después de llamar a
 bool d2 = s2.process();

La variable d1 cambia su valor al que se produjo en la llamada de operación interna dentro de s2.process. Este comportamiento es el mismo que cuando se cambia el valor de una variable estática para objetos del mismo tipo. Pero aquí la variable tiene claramente un ámbito local.

El tema de las variables estáticas se planteó en este hilo y todo está claro. Pero, ¿qué hacer con la incertidumbre de los valores de las variables locales?

Документация по MQL5: Основы языка / Переменные / Область видимости и время жизни переменных
Документация по MQL5: Основы языка / Переменные / Область видимости и время жизни переменных
  • www.mql5.com
Основы языка / Переменные / Область видимости и время жизни переменных - Документация по MQL5
 

"...la variable d1 definida en la función operate es sobrescrita por el valor de la variable d1 en la llamada interna de la misma función operate, pero en otro objeto del mismo tipo. Es decir, en pocas palabras. después de llamar a
bool d2 = s2.process();
la variable d1 cambia su valor al que se produjo en la llamada de operación interna dentro de s2.process".

Suena como una recursión oculta, con el conjunto habitual de efectos secundarios, o ...

 
Vigor:

En teoría, el código debería funcionar exactamente igual. Pero... las variantes funcionan de forma diferente.


No. No es idéntico.

En el primer caso s1.process y s2.process son llamados incondicionalmente

En la segunda variante, s1.process sólo será llamado si s2.process devuelve true. Esto se denomina "evaluación abreviada de la condición".