[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 2
Vous manquez des opportunités de trading :
- Applications de trading gratuites
- Plus de 8 000 signaux à copier
- Actualités économiques pour explorer les marchés financiers
Inscription
Se connecter
Vous acceptez la politique du site Web et les conditions d'utilisation
Si vous n'avez pas de compte, veuillez vous inscrire
Vous répétez "failing to instantiate", mais ce n'est pas exact. L'indicateur est instancié dans tous les cas.
Le problème est que les données ne sont pas disponibles de manière synchrone, vous devez faire avec. Ce n'est PAS un bug de MT5, c'est une FONCTION.
Je propose d'arrêter la discussion et d'attendre la réponse de SD.
Peut-être n'ai-je pas bien formulé le fait que, quel que soit le nombre de boucles et d'attentes, vous ne pourrez pas accéder aux données de l'indicateur (de différents TF) avant le premier passage de (*edit) OnCalculate() ;
Je suis parfaitement disposé à accepter que je puisse avoir tort, c'est pourquoi j'ai une prime de 10 $ si vous pouvez démontrer le contraire. S'il vous plaît... prouvez-moi que j'ai tort. J'ai besoin d'une solution de contournement pour ce stupide bug, pardon, je veux dire "fonctionnalité".
Peut-être n'ai-je pas bien formulé le fait que, quel que soit le nombre de boucles et d'attentes, vous ne pourrez pas accéder aux données de l'indicateur (des différents TF) avant le premier passage de (*edit) OnCalculate() ;
Je suis parfaitement disposé à accepter que je puisse avoir tort, c'est pourquoi j'ai une prime de 10 $ si vous pouvez démontrer le contraire. S'il vous plaît... prouvez-moi que j'ai tort. J'ai besoin d'une solution de contournement pour ce bug stupide, désolé, je veux dire "fonctionnalité".
Pourquoi en avez-vous besoin lors de la première "passe" ? Si les données nécessaires ne sont pas disponibles, attendez qu'elles le soient, c'est tout.
Parce que je suis en train de développer un indicateur qui nécessite l'accès aux données du même indicateur (même symbole) sur une trame temporelle différente. Comme il ne sera pas traité avant le deuxième tick, cela signifie que l'indicateur ne fonctionnera pas hors ligne, et ne fonctionnera que lorsque le deuxième tick arrivera.
Pourquoi devrions-nous faire des compromis à cause de ce bogue ? Qu'est-ce qui vous pousse à le défendre aussi furieusement ?
Parce que je suis en train de développer un indicateur qui nécessite l'accès aux données du même indicateur (même symbole) sur une trame temporelle différente. Comme il ne sera pas traité avant le deuxième tick, cela signifie que l'indicateur ne fonctionnera pas hors ligne, et ne fonctionnera que lorsque le deuxième tick arrivera.
Pourquoi devrions-nous faire des compromis à cause de ce bogue ? Qu'est-ce qui vous pousse à le défendre avec autant de ferveur ?
? ??
Je ne défends rien, et certainement pas "furieusement". Restez cool, s'il vous plaît.
? ??
Je ne défends rien, et certainement pas "furieusement". Restez cool, s'il vous plaît.
Forum sur le trading, les systèmes de trading automatisés et les tests de stratégies de trading.
[BUG MQL5] 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.
Alain Verleyen, 2017.01.31 12:46
Ok vous ne me croyez pas, c'est votre droit, mais vous avez tort.
Je ne peux que vous suggérer d'écrire au ServiceDesk, et de rapporter leur réponse ici.
OK.
J'ai posté ce travail au cas où quelqu'un serait intéressé pour s'y essayer.
https://www.mql5.com/en/job/57516
Cela signifie que si les données sont immédiatement disponibles pour un script ou un EA, elles seront également disponibles pour l'indicateur (ce n'est donc pas un problème de disponibilité des données). L'indicateur ne parvient tout simplement pas à s'instancier avant le deuxième passage de OnCalculate() (c'est-à-dire le premier tick).
Vous comprenez le mot "disponibilité" trop littéralement. Bien que certaines données puissent exister dans la mémoire du terminal, le terminal lui-même peut contenir une logique de synchronisation qui bloque les mises à jour pour toutes les périodes pendant que les données sous-jacentes sont vérifiées pour une période (probablement une autre). Ou ils peuvent bloquer les demandes de données d'un indicateur jusqu'à ce qu'il ait terminé sa propre création (n'oubliez pas que les indicateurs sont gérés par des "handles", alors que les experts et les scripts ne le sont pas), ce qui me semble logique. Ce ne sont que des suppositions, que j'ai faites du point de vue des développeurs MQ. Vous pouvez leur demander directement via le service desk.
Votre travail est impossible à réaliser en raison du point 3 :
3. Doit accéder au tampon à l'initialisation
C'est tout simplement contre l'architecture et la documentation du terminal :
Vous ne pouvez pas vous référer aux données de l'indicateur juste après sa création, car le calcul des valeurs de l'indicateur prend un certain temps.
Veuillez également lire la fonction CopyBuffer:
Note
Lorsque vous demandez des données à l'indicateur, si les séries temporelles demandées ne sont pas encore construites ou si elles doivent être téléchargées du serveur, la fonction renvoie immédiatement-1, mais le processus de téléchargement/construction est lancé.
Lors de la demande de données à partir d'un Expert Advisor ou d'un script, letéléchargement à partir du serveur sera lancé, si le terminal ne dispose pas de ces données localement, ou la construction d'une série temporelle requise commencera, si les données peuvent être construites à partir de l'historique local, mais qu'elles ne sont pas encore prêtes. La fonction renvoie la quantité de données qui seront prêtes au moment de l'expiration du délai.
Ainsi, les experts et les scripts sont traités de manière synchrone jusqu'à un délai prédéfini, mais les indicateurs - de manière asynchrone.
Quant à votre tâche spécifique, elle peut être facilement réalisée d'une autre manière. Vous n'êtes pas le premier à construire un indicateur sur un indicateur et à vouloir qu'il fonctionne hors ligne. Utilisez une minuterie.
Je l'ai essayé. Cela n'a pas fonctionné.
Postez une question plus spécifique avec un exemple de code. Il peut y avoir des bogues. L'approche fonctionne pour moi.