L'indicateur se corrompt - page 5

 
Rosh:

Qu'entendez-vous par "corruptions" ? Je viens d'attacher votre indicateur à EURUSD M1 et je ne vois pas de valeurs.


Le terminal client 32bit MetaTrader 4 montre la même image. Etes-vous sûr que l'indicateur fourni fonctionne ?
 
Rosh:

Le terminal client 32bit MetaTrader 4 montre la même image. Êtes-vous sûr que l'indicateur fourni fonctionne ?
Il semble que vous ayez téléchargé la version originale du code d'exemple (horodaté 2011.10.11 18:06). Cela ne dessine rien pendant 25 minutes. Dans init(), il définit drawTime à TimeCurrent(), et ne déclenche le code dans start() qu'une fois (drawTime + 1500 < TimeCurrent()).

La deuxième version, horodatée du 2011.10.12 06:37, semble devoir commencer à dessiner immédiatement.

Mais, de toute façon, les problèmes ne commencent apparemment pas à se produire avant plusieurs heures.
 
jjc:
Il semble que vous ayez téléchargé la version originale du code d'exemple (horodatée 2011.10.11 18:06). Cela ne dessine rien pendant 25 minutes.
Ok, je vais attendre
 

Le terminal client 32bit MetaTrader 4 montre la même image. Êtes-vous sûr que l'indicateur fourni fonctionne ?

- Oui. J'exécute le même indicateur sur une machine 32 bits également, depuis la nuit dernière, environ 18 heures. Le problème ne se produit pas.

Si vous voulez un autre bug MT4 possible à poursuivre, que se passe-t-il si vous utilisez Low[i] et High[i] plutôt que iLow() et iHigh() ?

- Dans mon code actuel iHighest / iHigh / iLowest / iLow etc. sont utilisés . J'ai utilisé High/Low dans le code d'exemple pour réduire la complexité.

 
RaptorUK:
J'ai une idée... mais je dois sortir maintenant, j'ai ajouté l'indicateur à un nouveau graphique, je testerai mon idée à mon retour et je posterai les résultats.

OK, je viens de rentrer, le graphique était très bien depuis que j'ai chargé l'indicateur... puis j'ai essayé mon idée.... J'ai paginé vers le haut pour déplacer le graphique vers la droite afin que les nouvelles données soient téléchargées ... et voilà ... .

C'est ce que j'ai suggéré dans ce fil de discussion le 2011.10.07 19:08.

 
RaptorUK:

OK, je viens de rentrer, le graphique était très bien depuis que j'ai chargé l'indicateur... puis j'ai essayé mon idée.... J'ai paginé vers le haut pour déplacer le graphique vers la droite afin que les nouvelles données soient téléchargées ... et voilà ... .

Ok, donc vous supposez que l'historique des barres est en train de changer pour une raison quelconque, et qu'il est rechargé, et que l'indicateur est affecté parce qu'il ne dessine que sur une base prospective et ne suit pas le comportement habituel des indicateurs qui recalculent sur la base de choses comme IndicatorCounted() ?
 
jjc:
Ok, donc vous supposez que l'historique de la barre change pour une raison quelconque, et qu'elle est remplie à l'envers, et que l'indicateur est affecté parce qu'il ne dessine que sur une base prospective et ne suit pas le comportement habituel des indicateurs qui recalcule sur la base de choses comme IndicatorCounted() ?
Je n'ai pas regardé le code récent . . mais oui, quelque chose qui va dans le sens de ce que vous avez écrit.
 
RaptorUK:
Je n'ai pas regardé le code récent . . mais oui, quelque chose qui ressemble à ce que vous avez écrit.

Ok, en résumé, ce que nous semblons avoir est le suivant :

* Un indicateur normal utilisera IndicatorCounted() pour déterminer quelles valeurs de barres sont "sales" et doivent être (re)calculées.

* Lorsque vous ajoutez des barres supplémentaires à l'historique en faisant défiler les données, IndicatorCounted() est remis à zéro. Par conséquent, à ce stade, un indicateur normal recalculera toutes ses valeurs historiques.

* L'indicateur ici ne fait pas cela. En effet, il ignore IndicatorCounted() et dessine uniquement sur une base prospective.

* Pour une raison quelconque, la machine Win64 d'AnkaSoftware est périodiquement rechargée avec des données plus anciennes, mais pas la machine Win32. Le système d'exploitation n'est probablement qu'une coïncidence dans ce contexte.

* C'est un peu vilain que MT4 n'ajuste pas les tampons des indicateurs à la lumière des nouvelles barres qui ont été ajoutées, et se fie plutôt au code de l'indicateur pour recalculer toutes les anciennes valeurs parce que IndicatorCounted() est réinitialisé. (Cependant, c'est raisonnablement justifiable, car l'ajout d'anciennes valeurs de barres à de nombreux indicateurs affecte potentiellement les calculs ultérieurs. Par exemple, une EMA sera modifiée, bien que par une valeur minuscule, si vous ajoutez une barre supplémentaire au début de l'historique).

 
jjc:

* C'est un peu vilain que MT4 n'ajuste pas les tampons de l'indicateur à la lumière des nouvelles barres qui ont été ajoutées, et compte plutôt sur le code de l'indicateur pour recalculer toutes les anciennes valeurs parce que IndicatorCounted() est réinitialisé.

En fait, en y réfléchissant, c'est faux. Il y a une bonne raison pour laquelle MT4 essaie de dire à l'indicateur de tout recalculer, et ce scénario pourrait bien s'appliquer ici.

Disons que l'indicateur a fonctionné pendant un certain temps, mais qu'il y a ensuite une déconnexion du courtier qui dure pendant plusieurs barres. Lors de la reconnexion, MT4 recevra un tick et commencera à dessiner les valeurs de l'indicateur pour la dernière barre. Séparément, de manière asynchrone, et plus lentement, il recevra les données historiques pour les barres manquantes qui ont eu lieu pendant la déconnexion. Celles-ci sont insérées au milieu de l'historique des barres, et il est donc nécessaire pour tout indicateur normal de redessiner les anciennes valeurs à partir d'au moins le début de la période de déconnexion. En pratique, il est compréhensible que MT4 adopte l'approche "tout redessiner". Le seul problème est de savoir si MT4 doit automatiquement changer les valeurs du tampon en EMPTY_VALUE si elles sont potentiellement invalides.
 

Ce problème affecte-t-il UNIQUEMENT les indicateurs ?

Qu'en est-il des autres, disons High[], low[], ou iHigh, iLow, iLowest, iBarshift, etc, etc...., c'est ce que je préfère savoir et être clair.

Raison: