[Les indicateurs ne sont pas correctement instanciés lorsqu'ils sont appelés/créés à partir d'un indicateur d'une période de travail différente. - page 4

 
nicholishen:

...

Je tiens à vous remercier tout particulièrement pour votre aide... sans votre condescendance, je ne sais pas où j'aurais trouvé la motivation pour continuer ! /s

J'ai vu des dizaines de personnes comme vous ici. Ils savent tout mieux que les autres, ils n'écoutent pas, ils mettent leurs propres défauts sur le dos des autres (un autre utilisateur, un modérateur, un courtier, une plateforme, Metaquotes, l'OS, ou autre...).

Il semble que vous n'ayez rien appris ici. Ce n'est PAS un bug, c'est la façon dont les développeurs ont conçu leur plateforme. Je comprends pourquoi vous dites que c'est un bug, j'ai découvert MT5 et son fonctionnement il y a des années. Si vous aviez eu cela en tête et l'aviez accepté, vous auriez vu beaucoup plus tôt quel était le problème : votre approche et votre compréhension.

Mais non, vous continuez à dire que c'est un "bug" ou un "défaut majeur", c'est tout simplement ridicule. L'architecture de MT5 qui utilise le comportement asynchrone des fonctions est ce qui rend cette plateforme beaucoup plus rapide que MT4, bien sûr, ce n'est pas toujours facile à gérer. Le principal défaut de Metaquotes est une documentation incomplète, incompréhensible ou inexistante.

Lorsque vous ne comprenez pas quelque chose, vous devriez écouter les autres (Stanislav et moi par exemple), et certainement pas insulter les personnes qui essaient de vous aider.

 
Alain Verleyen:

J'ai vu des dizaines de personnes comme vous ici. Ils savent tout mieux que les autres, ils n'écoutent pas, ils rejettent leurs propres fautes sur les autres (un autre utilisateur, un modérateur, un courtier, une plateforme, Metaquotes, l'OS, ou autre...).

Il semble que vous n'ayez rien appris ici. Ce n'est PAS un bug, c'est la façon dont les développeurs ont conçu leur plateforme. Je comprends pourquoi vous dites que c'est un bug, j'ai découvert MT5 et son fonctionnement il y a des années. Si vous aviez eu cela en tête et l'aviez accepté, vous auriez vu beaucoup plus tôt quel était le problème : votre approche et votre compréhension.

Mais non, vous continuez à dire que c'est un "bug" ou un "défaut majeur", c'est tout simplement ridicule. L'architecture de MT5 qui utilise le comportement asynchrone des fonctions est ce qui rend cette plateforme beaucoup plus rapide que MT4, bien sûr, ce n'est pas toujours facile à gérer. Le principal défaut de Metaquotes est une documentation incomplète, incompréhensible ou inexistante.

Lorsque vous ne comprenez pas quelque chose, vous devriez écouter les autres (Stanislav et moi par exemple), et certainement pas insulter les personnes qui essaient de vous aider.

Exécuter tous les indicateurs sur un seul thread sans une méthode pour appeler récursivement l'itération suivante autre que la mise en place d'un timer est un défaut. Vous voulez parler de vitesse ? Au lieu de remettre le traitement dans la file d'attente, je viens de passer une ms supplémentaire sur une solution de contournement. Ce n'est probablement pas la fin du monde, mais cela nécessite tout de même une solution de contournement. Je suis très reconnaissant à ceux qui m'ont aidé à comprendre la solution de contournement et pourquoi elle était nécessaire compte tenu des contraintes de la plate-forme. J'essaie toujours de comprendre ce que vous avez apporté à la discussion, à part la condescendance, cependant.
 
nicholishen:
Faire tourner tous les indicateurs sur un seul thread sans méthode pour appeler récursivement l'itération suivante autre que la mise en place d'un timer est une faille. Vous voulez parler de vitesse ? Au lieu de remettre le traitement dans la file d'attente, j'ai juste dépensé une ms supplémentaire pour une solution de contournement. Ce n'est probablement pas la fin du monde, mais cela nécessite tout de même une solution de contournement. Je suis très reconnaissant à ceux qui m'ont aidé à comprendre la solution de contournement et pourquoi elle était nécessaire compte tenu des contraintes de la plate-forme. J'essaie toujours de comprendre ce que vous avez apporté à la discussion, à part la condescendance, cependant.

Je vous trouve très agressif. Depuis le début, j'essaie simplement de vous expliquer ce qui se passe, à partir de mes années d'expérience avec MT5. Je ne suis pas condescendant, je suis compétent et expérimenté, et je mérite le respect (comme tout le monde). Ce n'est qu'à partir du post #14 que je vois que vous voulez que ça fonctionne sans nouveau tick, mais sur le même post je me suis senti agressé par votre mot "furieusement", donc j'ai abandonné.

De toute façon, le sujet est clos, merci de m'avoir poussé à apprendre quelque chose de nouveau.

 

Je me suis gratté la tête pendant des années sur ce sujet.

Pour tous ceux qui rencontrent ce problème, il semble y avoir une solution simple.

Ajoutez une variable au niveau du module (RunOnce) pour déterminer quand nous exécutons le OnCalculate pour la première fois. Lors de cette première exécution, renvoyer zéro et mettre la variable à true pour éviter d'autres interruptions.


bool RunOnce = false;

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[]) {
               
   if (rates_total == prev_calculated) return (rates_total);
   if (!RunOnce) {
      RunOnce = true;
      return (0);
   }
  
REST OF YOUR CODE HERE.


Cela a très bien fonctionné pour moi, j'espère que cela vous aidera aussi.

[SOLVED]Indicators are not properly instantiated when called/created from an Indicator of different working time-frame.
[SOLVED]Indicators are not properly instantiated when called/created from an Indicator of different working time-frame.
  • 2017.01.30
  • www.mql5.com
UPDATE: See the workaround below CopyBuffer() throws an error of 4806 (Indicator data not accessible) when calling an indicator with a different Ti...
 
Merci pour la solution