Discussion de l'article "Les Principes du Calcul Économique des Indicateurs"

 

Un nouvel article Les Principes du Calcul Économique des Indicateurs a été publié :

Les appels aux utilisateurs et les indicateurs techniques occupent très peu de place dans le code de programme des systèmes de trading automatisés. Souvent, il s’agit simplement de quelques lignes de code. Mais il arrive souvent ces quelques lignes de code utilisant plus de temps, qui doivent être consacrées au test de l’Expert Advisor. Par conséquent, tout ce qui est lié aux calculs de données dans un indicateur doit être considéré de manière beaucoup plus approfondie qu’il n’y paraît à première vue. Cet article en parlera précisément

Maintenant que les coordonnées de l’appel rationnel de la fonction de copie des valeurs d’indicateur dans le code de l’Expert Advisor sont claires, vous pouvez tester les avantages de l’application de la fonction IsNewBar () dans les Expert Advisors.

Nous avons donc deux options d’Expert Advisors, disponibles pour être testées dans le testeur de stratégie, la première - AMA_Test.ex5. Il copie les données du tampon de l’indicateur à chaque coche.

Fig.9 Le résultat de  passage du test avec l’Expert Advisor AMA_Test

Le second - IsNewBar_AMA_Test.mq5 copie les données uniquement lors d’un changement de barre.

Fig.10 Le résultat de  passage du test avec l’Expert Advisor IsNewBar_AMA_Test

Oui Les résultats du test sont quelque peu décevants. Il s’avère que l’appel d’une fonction IsNewBar () sur chaque coche est beaucoup plus coûteux que de copier les données dans trois cellules du tableau de l’utilisateur! 

Ici, Je voudrais attirer votre attention sur une autre partie importante, mais apparemment discrète, de l’indicateur. Le fait est que si nous obtenons la poignée de l’indicateur dans la fonction OnInit (), alors, que nous copions ou non les données de cet indicateur dans la fonction OnTick (), ses calculs sur une barre encore non calculée et actuelle, seront toujours effectués sur chaque coche.

Auteur : Nikolay Kositsin

 

Merci pour cet article.

J'ai une question. Vous utilisez la première forme de l'indicateur pour optimiser les calculs de l'indicateur, il y a begin. Mais si vous ne pouvez pas l'utiliser (pour des calculs corrects il faut open[], high[], low[], close[]...) comment faire ? Il n'y a pas de begin dans la deuxième forme.

 
Prival:

Merci pour cet article.

J'ai une question. Vous utilisez la première forme de l'indicateur pour optimiser les calculs de l'indicateur, il y a begin. Mais si vous ne pouvez pas l'utiliser (pour des calculs corrects, vous avez besoin de open[], high[], low[], close[] ...) comment faire ? Il n'y a pas de begin dans la deuxième forme.

Et ce n'est pas nécessaire, car les paramètres d'entrée sont toujours des caractéristiques de prix - ils sont dans tous les éléments, il n'y a pas de tableau "arbitraire" rempli uniquement à partir de begin.
 

tout n'est pas pris en compte, mais en général c'est toujours intéressant =)

et en particulier l'optimisation de l'appel des indicateurs techniques n'est pas prise en compte.

Je pense que ce sujet est tout à fait pertinent.

 

plus précisément, comment mieux initialiser l'indicateur technique

en général, la fonction de vérification des données est mise en œuvre

mais l'exemple de l'initialisation n'est pas exactement pris en compte

pour autant que l'on sache d'après l'aide

Нельзя обратиться к данным индикатора сразу после его создания, так как на расчет значений индикатора требуется некоторое время, и поэтому создавать хэндлы индикаторов лучше всего в OnInit(). Функция iCustom() создает соответствующий пользовательский индикатор и при успешном создании возвращает его хэндл. Пользовательские индикаторы могут содержать до 512 индикаторных буферов, содержимое которых также можно получать при помощи функции CopyBuffer(), используя полученный хэндл.

comment mieux contourner cette fonction....

 

Je me pose toujours la même question.

   if (Handle == INVALID_HANDLE)  Print("N'a pas réussi à obtenir la poignée de l'indicateur SMA");

Si cette condition fonctionne, que dois-je faire ? Disons que c'est le championnat, c'est tout... init ne courra plus.

 
Prival:

Je me suis toujours posé la même question.

si cette condition fonctionne, que dois-je faire ? disons que c'est le championnat, c'est tout... l'init ne fonctionnera plus.

Oui ! C'est un fait non documenté, je ne le savais pas non plus ! Il faut absolument qu'on se penche sur la question ! Mais c'est plus facile pour moi, je vais mettre toutes les dindes dans l'Expert Advisor lui-même et c'est tout, de sorte que l'Expert Advisor court comme un sprinter sur des distances de marathon et ne trébuche pas n'importe où et jamais !

 
Prival:

Je me pose toujours la même question.

Si cette condition fonctionne, que dois-je faire ? Disons que c'est un championnat, c'est tout... l'init ne s'exécutera plus.

Tout d'abord, récupérez le code d'erreur et affichez-le dans le journal. Puis essayez d'y accéder à nouveau dans OnTick() ou OnCalculate(). Si vous ne parvenez pas à obtenir la poignée de l'indicateur, il est fort probable que cet indicateur n'existe pas ou qu'il n'y ait pas assez de mémoire. Dans ce cas, le conseiller expert n'a pas le droit de négocier.
Документация по MQL5: Стандартные константы, перечисления и структуры / Коды ошибок и предупреждений
Документация по MQL5: Стандартные константы, перечисления и структуры / Коды ошибок и предупреждений
  • www.mql5.com
Стандартные константы, перечисления и структуры / Коды ошибок и предупреждений - Документация по MQL5
 
Rosh:
Tout d'abord, récupérez le code d'erreur et affichez-le dans le journal. Essayez ensuite d'y accéder à nouveau dans OnTick() ou OnCalculate(). Si vous ne parvenez pas à obtenir la poignée de l'indicateur, il est fort probable que cet indicateur n'existe pas ou qu'il manque de mémoire. Dans ce cas, le conseiller expert n'a pas le droit de négocier.

Nous pouvons le faire nous-mêmes ! Dans une telle situation, si nous pouvions faire en sorte que la fonction OnInit() renvoie moins un pour appeler à nouveau OnInit() et ainsi de suite jusqu'à ce que la poignée apparaisse ! Mais maintenant il est clair que si vous ne surchargez pas votre ordinateur, il n'y aura aucune raison de ne pas obtenir le handle. Mais j'ai vu cela une fois lors de la mise à jour d'un build, cela peut être guéri en recompilant l'indicateur !

Документация по MQL5: Основы языка / Функции / Функции обработки событий
Документация по MQL5: Основы языка / Функции / Функции обработки событий
  • www.mql5.com
Основы языка / Функции / Функции обработки событий - Документация по MQL5
 
Moins un peut être renvoyé, mais cela n'est pas de bon augure pour l'EA/indicateur.
 
Heureusement, l'erreur de création de l'indicateur due à la défaillance du terminal ne se produit pratiquement pas.