Toute question des nouveaux arrivants sur MQL4 et MQL5, aide et discussion sur les algorithmes et les codes. - page 361

 
ijonhson:

La question est de savoir si je dois calculer le code de l'indicateur 900 fois par tick (3 timeframes avec 300 barres par exemple), ou 3 fois. Il est clair que icustom est moins embêtant, je le mets dans la boucle et c'est fait. Comme option, j'ai vu une adresse du tableau des valeurs de l'indicateur passé à un EA utilisant la dll, mais je ne veux pas prendre l'indicateur dans un ensemble


Encore une fois, il y a une erreur dans l'énoncé du problème. Pourquoi avez-vous besoin de 900 barres dans votre conseiller expert ? Si vous avez vraiment besoin de tant de données dans l'indicateur, 900 barres, puis de les travailler dans l'indicateur lui-même, pourquoi les faire glisser dans le conseiller expert ? La bonne tâche représente 50 % du succès

 
Nikolay Ivanov:

L'énoncé du problème est encore faux... Pourquoi avez-vous besoin de 900 barres dans votre EA ? Si vous avez vraiment besoin de tant de données dans l'indicateur, de 900 d'entre elles, puis de les travailler dans l'indicateur lui-même, pourquoi les faire glisser dans le conseiller expert ? La tâche correcte représente 50 % du succès


J'ai besoin de comparer les pics minimum et maximum de l'indicateur à 3 timeframes par exemple 5min 15min et 30min, pour déterminer les tendances, je ne pourrai pas deviner les pics, c'est à dire devoir prendre des tours sur l'historique entier. J'ai pris 300 barres d'histoire comme exemple.

L'utilisation d'icustom est encore trop gourmande en ressources.

 
ijonhson:

J'ai besoin de comparer l'indicateur des pics minimum et maximum pour 3 timeframes par exemple 5min 15min et 30min, pour déterminer les tendances, je ne pourrai pas deviner les pics, c'est à dire devoir regarder l'historique entier. J'ai pris 300 barres d'histoire comme exemple.

L'utilisation d'icustom est encore trop gourmande en ressources.


La question reste ouverte en ontick, la fonction IndicatorCounted() dans le premier calcul donne -1, comment la remplacer dans un Expert Advisor ?

 
ijonhson:

"Vous n'avez pas besoin de le modifier" - c'est-à-dire qu'il fonctionne correctement avec onTick dans Expert Advisor ainsi qu'avec onCalculate dans l'indicateur ?

Non, je voulais dire qu'il n'est pas du tout nécessaire à cet endroit.

 
Alexey Viktorov:

Non, je voulais dire qu'il n'y en a pas besoin du tout.


J'ai trouvéhttps://www.mql5.com/ru/articles/1456, je vais y réfléchir, mais je pensais qu'il y avait une option plus facile.

Перенос кода индикатора в код эксперта. Строение индикатора.
Перенос кода индикатора в код эксперта. Строение индикатора.
  • 2007.02.16
  • Nikolay Kositsin
  • www.mql5.com
Прежде чем приступить к основной теме статьи, мне следовало бы вкратце коснуться общего строения индикатора под углом зрения программиста, которого этот индикатор интересует, как будущая часть кода эксперта: Вполне естественно, что у реального индикатора может быть другое количество отображаемых индикаторных значений, другое количество...
 
ijonhson:

La question reste ouverte dans la fonction ontick IndicatorCounted() au premier contrôle comment la remplacer dans l'Expert Advisor ?

Vous n'avez pas besoin de consulter les sommets à chaque tic, ils ne changent pas.

Dans l'EA, vérifiez le cycle à l'ouverture de la barre et sortez du cycle dès que le sommet est trouvé.

   int count=Bars(Symbol,Period);
   for(int i=0; i<count; i++) {
     // ищем и запоминаем в переменную, если нашли break;
   }
 
ijonhson: La question reste ouverte en ontick, la fonction IndicatorCounted() dans le premier calcul donne -1, qu'est-ce qui va la remplacer dans l'Expert Advisor ?

La fonction IndicatorCounted() était auparavant utilisée dans les indicateurs avec la fonction start(). Les nouveaux indicateurs avec OnCalculate() utilisent le deuxième paramètre prev_calculé à la place. Je les ai analysés spécialement et j'ai trouvé qu'ils diffèrent de 1. La différence est minime et ils indiquent combien de barres ont déjà été calculées. S'il est égal à 0 (ou -1), alors toutes les barres doivent être calculées. Cela se produit au démarrage de l'indicateur, lorsqu'il doit dessiner toute la ligne et enregistrer le résultat dans les tableaux de la mémoire tampon. Lors des ticks suivants, seules les données de la dernière barre doivent être recalculées. Par conséquent, ce qui est fait à la valeur zéro (ou -1) doit être placé dans OnInit() de l'EA. Le reste - très peu - devrait être placé dans OnTick()

 
YarTrade:

Merci. Je vais y travailler. Je n'ai rien lu sur les caractères longs dans le manuel pour une raison quelconque.

Vous devez placer le curseur sur long int ou short (ou tout autre mot de la langue) et appuyer sur F1.

 
ijonhson:

Merci beaucoup, mais d'après ce que j'ai compris de la description de la fonction, elle va exécuter tout le code de l'indicateur pour obtenir une valeur, à l'endroit que j'ai spécifié, c'est-à-dire que pour obtenir tous les sommets, je vais devoir calculer le code de l'indicateur n fois (regarder toutes les barres une par une), mais j'ai besoin de comparer l'ordre des sommets de cet indicateur sur plusieurs timeframes.

Et ensuite, vous devez chercher les sommets manuellement.

C'est absolument faux ! Toutes les barres de l'indicateur, lorsqu'elles sont appelées depuis le conseiller expert en utilisant iCustom(), ne sont recalculées qu'une seule fois ! Tous les appels suivants de l'indicateur fonctionnent avec les résultats déjà calculés, seules les barres non calculées de l'appel précédent sont recalculées. Par exemple, en appelant l'indicateur de période M15 depuis le graphique H1 sur chaque nouvelle barre, il s'avère que 4 barres de 15 minutes ne sont pas recalculées depuis l'appel à l'indicateur. Ainsi, seules ces 4 barres seront recalculées.

Même si nous parcourons en boucle la séquence de barres de 0 à xxx, l'indicateur ne sera recalculé qu'une seule fois au premier appel. Tous les appels suivants n'effectueront aucun recalcul.

 
ijonhson:

J'ai trouvéhttps://www.mql5.com/ru/articles/1456, je vais y réfléchir, mais je pensais qu'il y avait un moyen plus facile.

C'est un mauvais exemple. Il a déjà dix ans ! !! La langue a déjà changé pour le mieux.

Raison: