L'indicateur se corrompt - page 3

 
AnkaSoftware:

JIC, veuillez noter que le problème ne se produit pas sur les plateformes 32 bits. J'ai fourni un code dans l'un des messages précédents.

Vous avez deux (ou plus) machines distinctes qui ne reçoivent pas nécessairement exactement les mêmes données. Par exemple, le système 64 bits pourrait se trouver sur un nœud VPS très actif qui perd occasionnellement du trafic et/ou des connexions, par exemple parce que le nœud physique fonctionne à des niveaux extrêmes d'utilisation du processeur ou de la bande passante. (Beaucoup d'autres explications possibles ; ce n'en est qu'une).

Tant que vous n'aurez pas compris pourquoi le tracé des lignes violettes, quelles qu'elles soient, s'arrête lorsqu'il y a un écart dans les barres M1, je considérerai tout le reste comme une coïncidence.

Je termine en revenant à ma déclaration initiale : il n'y a aucune raison pour que Windows 64 bits cause des problèmes comme ceux que vous décrivez. De nombreuses personnes ont signalé sur ce forum que MT4 ne fonctionnait pas correctement sur les plateformes x, y et z, pour finalement découvrir que le problème venait de leur code. Soit vous avez découvert le premier véritable bug MQL4 depuis plusieurs années dans un logiciel mature utilisé par des millions de personnes, soit le problème vient de votre code. Il est très probable, d'après les preuves recueillies jusqu'à présent - par exemple, les rapports distincts que vous avez fournis, selon lesquels le problème se produit soit après 16 heures, soit après 3-4 heures - que le problème est causé par des fluctuations occasionnelles des données que vous ne traitez pas correctement.
 

AnkaSoftware:

a) L'altération des indicateurs ne se produit que sur la plateforme Windows 64 bit.

d) L'utilisation du code est la suivante

Déclarations

<code>

#property indicator_chart_window



  1. Ne pas installer dans \Program Files* sur Vista/Win7
  2. void DrawMoveEx(double& serie[], int start, int end, double startlevel, double endlevel) {
    double a = (endlevel - startlevel) / (start - end);
    double y;
    int bar;
    for(int x = 0; x <= start - end; x++) {
    y = a * x;
    bar = start - x;
    serie[bar] = startlevel + y;
    }
    }
    Je ne suis pas sûr de ce que vous essayez de faire ici. D'une part vous calculez beaucoup de valeurs (début..fin) mais n'en stockez qu'UNE (série[bar]) Je le coderais :
    void DrawMoveEx(double& serie[], int start, int end, double startlevel, double endlevel) {
       double a = (endlevel - startlevel) / (start - end);
       for(int x = start; x <= end; x++) serie[x] = a * x + startlevel;
    }

 
Vous trouverez ci-joint un exemple d'indicateur, qui reproduira le problème. Sur une plateforme Windows 64 bit, attachez l'indicateur à un graphique M1, et laissez-le fonctionner pendant 4+ heures.
Dossiers :
 
AnkaSoftware:
Vous trouverez ci-joint un exemple d'indicateur, qui reproduira le problème. Sur une plateforme Windows 64 bits, attachez l'indicateur à un graphique M1, et laissez-le fonctionner pendant 4 heures ou plus.
Désolé, je n'ai pas la patience d'allouer une machine 64 bits propre à cette tâche et d'attendre 4 heures ou plus.

Cependant, si cet indicateur reproduit vraiment le problème, je dois reconnaître que c'est intéressant. Je ne vois pas immédiatement où pourrait se cacher un problème interne. (En supposant, comme précédemment, que vous avez définitivement exclu des choses telles qu'une corrélation entre le problème survenant et un récent accroc dans la connexion entre MT4 et le courtier. Vous avez mentionné votre confiance dans le CNS ; vous n'avez pas réellement confirmé que le journal MT4 ne contient aucune mention de problèmes de connexion, qui pourraient à leur tour causer le remplissage en arrière de l'historique des barres).

Si vous voulez poursuivre sur la voie d'un problème MT4, alors il semble plus probable qu'il soit lié au passage des tableaux d'indicateurs par référence. Les tableaux dans MQL4 ont des propriétés étranges comme le fait d'être toujours statiques, et je suppose qu'il est juste possible qu'il y ait un problème latent bizarre avec le passage des tableaux spéciaux de tampon d'indicateur par référence qui ne déclenche des problèmes que sur Win64. Bien que la raison pour laquelle le système d'exploitation devrait faire une différence dans un contexte tel que celui-ci reste un mystère complet.

J'essaierais de modifier DrawMoveEx() pour qu'il ne prenne plus une référence au tableau d'indicateurs, et qu'à la place il y ait des fonctions séparées telles que DrawMoveEx_Down1(), DrawMoveEx_Up1() etc. qui adressent simplement les tampons comme des variables globales. Si cela fait une différence, alors, félicitations, vous avez presque certainement trouvé un bug MT4. Peut-être le deuxième aujourd'hui.
 
AnkaSoftware:
Vous trouverez ci-joint un exemple d'indicateur, qui reproduira le problème. Sur une plateforme Windows 64 bit, attachez l'indicateur à un graphique M1, et laissez-le fonctionner pendant 4+ heures.
Il a fonctionné pendant plus de 5 heures sur Windows 7 Ultimate 64 bit, sans problème.
 
RaptorUK:
Je fonctionne depuis plus de 5 heures sur Windows 7 Ultimate 64 bit, sans problème.

JIC a) Comme vous l'avez suggéré, j'ai modifié le code en supprimant le passage de la référence, mais cela ne résout pas le problème. Le code modifié est joint.

b) Les barres manquantes auxquelles vous faites référence, sont très probablement dues à une condition d'absence de transaction, donc le courtier n'a pas envoyé de barres. IMHO, en cas de perte de connectivité, les barres manquantes sont disponibles une fois la connexion rétablie. Si vous voyez mon exemple de code, il n'y a aucune dépendance sur le fait que les barres soient contiguës.

Raptor, merci pour le test. Peut-être avez-vous besoin de vous connecter pour voir l'erreur. Je suis capable de reproduire le problème sur Windows Server 2008 R2 Enterprise. Il pourrait donc s'agir d'un problème de système d'exploitation. Une idée de l'endroit où obtenir une liste des correctifs recommandés pour MT4, pour une plate-forme particulière.

.

Dossiers :
 
AnkaSoftware:

Avez-vous une idée de l'endroit où l'on peut obtenir une liste des correctifs recommandés pour MT4, pour une plateforme particulière ?

Une telle liste n'existe pas. Il existe simplement une version de MT4 qui fonctionne sur toutes les versions de Windows, et il n'y a aucune raison particulière pour qu'il y en ait plusieurs. Il n'existe pas de versions ou de correctifs spécifiques à un système d'exploitation.
 
AnkaSoftware:
Vous trouverez ci-joint un exemple d'indicateur, qui reproduira le problème. Sur une plateforme Windows 64 bits, attachez l'indicateur à un graphique M1, et laissez-le fonctionner pendant plus de 4 heures.
Il fonctionne toujours correctement pour autant que je puisse dire... comment puis-je reproduire l'erreur ?
 
RaptorUK:
Il fonctionne toujours sans problème, d'après ce que je peux voir... Comment puis-je reproduire l'erreur ?
Vous n'avez rien à faire. A part zoomer sur le graphique pour voir si l'erreur s'est produite.
 
AnkaSoftware:
Vous n'avez rien à faire. A part zoomer dans le graphique pour voir si l'erreur s'est produite.

Si je recherche des lignes qui semblent être déconnectées des barres du graphique (comme dans votre premier message), je n'ai aucun problème.