Questions des débutants MQL5 MT5 MetaTrader 5 - page 116
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
L'erreur se situe dans le handle de l'indicateur créé dans la fonction OnTick et les données sont copiées sur le même tick. J'ai compris pendant la nuit, maintenant je vais essayer de transférer les poignées des indicateurs à la fonction OnInit.
Ça n'a pas marché. Voici le code maintenant
Les messages suivants apparaissent dans le journal
2013.04.13 15:21:31 2010.01.04 00:00:01 6.187448020344988e-005 0
2013.04.13 15:21:31 2010.01.04 00:00:01 6.187448020344988e-005 0
2013.04.13 15:21:31 2010.01.04 00:00:01 6.187448020344988e-005 0
Et c'est toujours comme ça. Il ne semble pas y avoir d'erreur de copie.
Mais jusqu'à présent, vous n'avez pas de vérification de la création réussie des poignées, ni de vérification du calcul réussi des indicateurs et de la copie. L'idée de déplacer l'initialisation des handles vers OnInit() est correcte.
De plus, ajoutez la ligne Print(MacdArray[0]) au début de OnTick() - pour voir quelle valeur merdique est contenue dans le tableau avant de commencer à copier les tampons.
A ajouter. Bien sûr, l'utilisation de GetLastError() après la fonction elle-même peut être une particularité du style de programmation. Si je ne me trompe pas, une valeur nulle de GetLastError() ne signifie pas toujours que la fonction a fonctionné avec succès.
Mais jusqu'à présent, vous n'avez pas de vérification de la création réussie des poignées, ni de vérification du calcul réussi des indicateurs et de la copie. L'idée de déplacer l'initialisation des handles vers OnInit() est correcte.
tol64:
Mais seulement pour la première fois. Si, à un autre endroit du programme, il s'avère qu'une poignée n'est pas valide, vous devez essayer de l'obtenir à nouveau. Par conséquent, nous ne pouvons pas dire que le code écrit pour obtenir les handles dans OnInit() résoudra complètement le problème et sera 100% correct. ))
J'ai vérifié combien de données ont été copiées avec la fonction CopyBuffer, elle écrit toujours 1. Et il n'y a pas d'erreur, mais les données sont toujours fausses.
J'ai ce résultat de ce code dans le testeur :
//---
La seule chose que j'ai faite avant le test a été de convertir les valeurs de l'indicateur avant la sortie dans le journal :
Êtes-vous en train de dire que l'idée de déplacer l'initialisation du gestionnaire vers OnInit() depuis OnTick() est mauvaise en soi ?
J'ai obtenu ce résultat avec ce code dans le testeur :
//---
La seule chose que j'ai faite avant le test a été de convertir simplement les valeurs de l'indicateur avant de les sortir dans le journal :
Et sans "si" ? Et par rapport à cette situation particulière ? Le handle de l'indicateur a été créé dans la fonction OnTick lors de chaque tick, et les données sont copiées lors du même tick. Cela signifie que le même manche d'indicateur a été demandé à chaque fois, sans contrôle de validité/invalidité. Dans ce contexte, allez-vous continuer à soutenir que l'idée de transférer l'initialisation des handles de OnTick() à OnInit() est mauvaise en soi ?
PS. Il semble que vous ayez aidé l'homme, donc la question peut être considérée comme épuisée.