Erreurs, bugs, questions - page 2491

 
Alexey Navoykov:
J'ai remarqué depuis longtemps que la mise en évidence des noms de macros personnalisées dans un grand projet ne fonctionne pas toujours. De nombreuses macros définies dans d'autres fichiers ne sont pas mises en évidence pour une raison quelconque. Je n'arrive pas encore à trouver le modèle. Tout ce que je vois, c'est que toutes les macros définies dans un certain fichier cessent d'être mises en évidence dans d'autres fichiers après une certaine ligne. Quelqu'un d'autre a vu ce phénomène se produire ?

J'ai remarqué quelque chose de similaire. Je ne peux pas garantir l'exactitude de la situation.

 
Alexey Navoykov:
Depuis longtemps, j'ai remarqué que les noms des macros personnalisées dans un grand projet ne sont pas toujours mis en évidence. De nombreuses macros définies dans d'autres fichiers ne sont pas mises en évidence pour une raison quelconque. Je n'arrive pas encore à comprendre le raisonnement, mais je constate que toutes les macros définies dans un certain fichier cessent d'être mises en évidence dans d'autres fichiers après une certaine ligne. Quelqu'un d'autre constate-t-il ce phénomène dans son environnement ?

Oui, et parfois l'autofixation ne fonctionne pas pour les nouvelles variables ou les champs de classe, généralement cela peut être corrigé en recompilant le projet.

D'après ce que j'ai compris, dans ME, en arrière-plan, tourne un processus qui s'occupe de la mise en évidence et de l'autofixation, à un moment donné, il n'a pas le temps (ou ne veut pas) mettre à jour toutes les informations...

 
Maintenant que nous parlons de rates_total, laissez-moi demander à la communauté quelle construction dans OnCalculate est plus intelligente et plus optimale ?
J'avais l'habitude d'utiliser une construction comme celle-ci dans OnCalculate :
.
if (rates_total==prev_calculated) {}        // новый тик, перерисовываем последний бар, все бары на своих местах
else if (rates_total-prev_calculated==1) {} // момент формирования нового бара 
else {}                                     // пересчитываем последние(rates_total-prev_calculated) бар


Mais après avoir réalisé qu'il pouvait y avoir des situations où prev_calculated>rates_total, j'ai compris que je ne comprenais rien, j'ai abandonné et, si le recalcul de toutes les barres ne prend pas plus de quelques secondes, j'ai commencé à utiliser une telle construction :

if (rates_total==prev_calculated) {}        // новый тик, перерисовываем последний бар, все бары на своих местах
else if (rates_total-prev_calculated==1) {} // момент формирования нового бара 
else {}                                     // пересчитываем все бары

Comment le faire et comment le faire correctement ?

 
Nikolai Semko:
Puisque nous parlons de rates_total, laissez-moi demander à la communauté quelle construction dans OnCalculate est plus élégante et optimale ?
J'avais l'habitude d'utiliser une construction comme celle-ci dans OnCalculate :


Mais après avoir réalisé qu'il pouvait y avoir des situations où prev_calculated>rates_total, j'ai compris que je ne comprenais rien, j'ai abandonné et, si le recalcul de toutes les barres ne prend pas plus de quelques secondes, j'ai commencé à utiliser une telle construction :

comment fait-on pour le faire et comment, en général, est-il compétent ?

C'est instruit parce que vous comprenez ce qui se passe. Remarque sur votre construction : Au lieu de ==1, j'écrirais >=1 ou juste if(rates_total > prev_calculated) de sorte que si les barres manquées sont gonflées, elles sont recalculées.

De plus, dans mql5 et avec une directive stricte dans mql4, afin de ne pas dépasser le tableau, nous devons considérer combien de barres peuvent être impliquées dans le calcul à partir de la barre la plus à gauche. Il s'avère donc que, personnellement, je n'ai pas de modèle pour toutes les occasions.

 
Nikolai Semko:
Maintenant que nous parlons de rates_total, je veux demander à la communauté quelle construction dans OnCalculate est plus élégante et optimale ?
J'avais l'habitude d'utiliser une construction comme celle-ci dans OnCalculate :


Mais quand j'ai compris qu'il pouvait y avoir des situations où prev_calculated>rates_total, j'ai réalisé que je ne comprenais rien, j'ai secoué la tête et, si le recalcul de toutes les barres ne prend pas plus de quelques secondes, j'ai décidé d'utiliser cette construction :

comment fait-on pour le faire et comment le fait-on correctement en général ?

Je calcule la limite = taux_total - prev_calculé.
Ensuite, si la limite > 1, alors limite = taux_total - 1 (ou le nombre de barres-1 requis pour le premier calcul) et initialisation.
Et ensuite une boucle de la limite à >=0.
Je ne peux pas faire le code depuis mon portable ...
 
Nikolai Semko:
Puisque nous parlons de rates_total, laissez-moi demander à la communauté quelle construction dans OnCalculate est plus élégante et optimale ?
J'avais l'habitude d'utiliser une construction comme celle-ci dans OnCalculate :


Lorsque j'ai compris qu'il pouvait y avoir des situations où prev_calculated>rates_total, j'ai réalisé que je ne comprenais rien, alors j'ai abandonné et utilisé cette construction, si le recalcul de toutes les barres ne prend pas plus de quelques secondes :

comment fait-on et comment, en général, avec compétence ?

En principe, la question est pertinente, dans les exemples des développeurs (livraison de MT) différentes façons de calculer, même BarsCalculated() est utilisé dans Bears.mql5

J'ai récemment discuté sous MT4, jusqu'à présent je me suis fixé sur le modèle suivant: https://www.mql5.com/ru/forum/314931/page2#comment_11946579.

je dois encore le vérifier sur MT5, mais les graphiques se comportent différemment (MT4 / MT5), dans MT5 si vous faites défiler avec la molette de la souris jusqu'au début de l'historique, il semble que prev_calculated sera remis à zéro - l'année dernière j'ai écrit un indicateur sur MT5 et j'ai été surpris de voir un tel comportement

ZZY : créez un graphique personnalisé et faites défiler l'historique à l'aide d'une minuterie - un banc d'essai est nécessaire pour déterminer le comportement de rates_total et prev_calculated - j'ai écrit ici il y a quelques pages au sujet de rates_total et de l'inadéquation de iBars() - cela devrait également être pris en compte.

J'ai aimé sa façon d'écrire les indicateurs - tout est fait avec soin. Le seul problème avec ses codes est un style très particulier de formatage du code source.

 
Igor Makanu:

...........................

un style très particulier de mise en forme de la source


 
Сергей Таболин:


Je sais comment utiliser le styler, mais le styler ne fonctionne pas si on met plusieurs opérateurs dans une ligne

;)

exemplehttps://www.mql5.com/ru/code/22766
 

Juste une question.

ulong a une valeur maximale de 18.........

J'ai obtenu une valeur de 61........

EtIntegerToString() de cette valeur donne 90............. du tout

Ça m'a pris du temps pour trouver le problème.

Existe-t-il un moyen de le localiser ?

 

Est-il normal que les agents ne libèrent pas de RAM après avoir accompli une tâche dans le nuage ?



Version 2085, 13 juin 2019.

Tient la RAM pendant au moins une heure.

Raison: