Erreurs, bugs, questions - page 239

 

Le graphique vient d'être "mis à jour". Et c'est encore la même chose :

 
Yedelkin:

Le graphique vient d'être "mis à jour". Et c'est encore la même chose :

Écrire d'urgence à servicedesk et ne pas fermer le terminal
 
AlexSTAL:
Écrivez à Servicedesk de toute urgence et gardez le terminal ouvert.
OK, je vais copier le lien vers ce fil de discussion.
 

Je viens de vérifier dans le terminal - le graphique EURUSD M1 est complètement présent à l'emplacement spécifié, sans aucune discontinuité.

Essayez de donner la commande "Rafraîchir" dans le menu contextuel du graphique.

 
Renat:

Je viens de vérifier dans le terminal - le graphique EURUSD M1 est entièrement présent à l'emplacement spécifié, sans aucune discontinuité.

Essayez de donner la commande "Rafraîchir" dans le menu contextuel du graphique.

Rafraîchie manuellement, merci. Comme je ne travaille pratiquement pas avec des graphiques, j'ai une question : comment puis-je mettre à jour la base des minitables au niveau du Conseiller Expert dans une telle situation ? Le terminal ne fonctionne qu'avec la base de données dont il dispose. Dois-je intégrer la fonction de vérification de la synchronisation ?
 
Renat:

Je viens de vérifier dans le terminal - le graphique EURUSD M1 est complètement présent à l'emplacement spécifié, sans aucune discontinuité.

Essayez de donner la commande "Rafraîchir" dans le menu contextuel du graphique.


Je pense qu'il y a un bug flottant quelque part..... Puisque je ne suis pas le seul à avoir la même situation que moi.....
 
Yedelkin:
Il a été mis à jour manuellement, merci. Comme je ne travaille pratiquement pas avec des graphiques, j'ai une question : comment mettre à jour la base des minutes dans une telle situation ? Le terminal ne fonctionne qu'avec la base qu'il possède. Dois-je intégrer la fonction de contrôle de la synchronisation ?

J'ai mémorisé le temps de perte et de reprise de la communication dans un minuteur.

En disposant de ces informations, vous pouvez essayer de télécharger l'historique de la période (vous pouvez également vérifier la synchronisation avec le serveur, si cela a un sens).

 

Messieurs les développeurs, je suis sans voix. J'ai été confronté à un problème d'"effacement" des variables locales dans la méthode de l'objet après un appel interne de la même méthode à partir d'un autre objet. Il se peut que ce soit lié à une optimisation des appels de fonctions imbriquées d'objets, mais au moins il n'y a pas d'erreurs dans le journal et pas de fuites de mémoire. Je ne peux pas citer un grand code, mais le sens sera clair à partir des exemples de principe :

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());
}

Enthéorie, le code devrait fonctionner exactement dela même manière. Mais... les variantes fonctionnent différemment.

Ainsi. La variante 1 ne fonctionne pas correctement. J'ai effectué un enregistrement dans le fichier de débogage et j'ai découvert que la variable d1 définie dans la fonction operate est écrasée par la valeur de la variable d1 dans un appel interne de la même fonction operate mais dans un autre objet du même type. C'est-à-dire en bref. après avoir appelé
 bool d2 = s2.process();

La variable d1 change de valeur pour prendre celle qui s'est produite lors de l'appel interne operate dans s2.process. Ce comportement est le même que lors de la modification de la valeur d'une variable statique pour les objets du même type. Mais ici la variable a clairement une portée locale.

La question des variables statiques a été soulevée dans ce fil de discussion et tout est clair. Mais que faire en cas d'incertitude sur les valeurs des variables locales ?

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

"...la variable d1 définie dans la fonction operate est écrasée par la valeur de la variable d1 dans l'appel interne de la même fonction operate, mais dans un autre objet du même type. C'est-à-dire, en résumé, après avoir appelé
bool d2 = s2.process() ;
lavariable d1 change sa valeur pour celle qui s'est produite dans l'appel interne operate à l'intérieur de s2.process".

On dirait soit une récursion cachée, avec les effets secondaires habituels, soit...

 
Vigor:

En théorie, le code devrait fonctionner exactement dela même manière. Mais... les variantes fonctionnent différemment.


Non. Ce n'est pas identique.

Dans le premier cas, s1.process et s2.process sont appelés sans condition.

Dans la deuxième variante, s1.process ne sera appelé que si s2.process renvoie true. C'est ce qu'on appelle "l'évaluation abrégée des conditions".