![MQL5 - Langage des stratégies de trading intégré au terminal client MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
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
Quelle build avez-vous utilisée ? Comme il semble y avoir un bug possible dans la dernière build avec la fonction"ObjectDelete()", il se pourrait qu'il y ait aussi des problèmes avec la fonction "ObjectFind()" !
MT5 : Build 1495 (09 Dec 2016)
MT5 : Build 1495 (09 Dec 2016)
J'ai exécuté votre code sur la build 1491 et j'ai obtenu des résultats similaires :
J'ai exécuté votre code sur la version 1491 et obtenu des résultats similaires :
Cela pourrait être sémantique plutôt qu'un bug.
Le but de ObjectDelete est de "supprimer l'objet portant le nom spécifié".
À la fin de l'exécution de la fonction, y a-t-il encore un objet appelé "Objet non existant" sur le graphique ? Non... alors est-ce un succès ?
D'un autre point de vue, ObjectDelete a-t-il supprimé un objet appelé "Objet non existant" ? Non... alors est-ce un échec ?
Mesurez-vous le succès par le résultat ou l'action entreprise ?
Peut-être qu'un faux serait attendu si l'objet nommé reste sur le graphique après l'exécution de la fonction. Sinon, c'est un succès.
Ce que vous dites est peut-être vrai, mais comme nous passons de MQL4 à MQL5, nous nous attendons à voir le même résultat ou du moins un résultat qui est clairement écrit dans la valeur de retour de la référence.
En passant ce premier problème, j'ai testé la fonction ObjectMove, et encore une fois, j'ai obtenu un résultat VRAI aussi ! Cela va au-delà de votre explication que parce que l'objet n'est pas disponible à la fin, le vrai est correct.
Avec ObjectMove sur un objet qui n'est pas disponible, il devrait retourner false !
moveResult=ObjectMove(ChartID(), "not available trend line",1,time[4950],low[4980]) ;
Print(__LINE__,"-moveResult=",moveResult) ;
2016.12.11 17:22:39.367 Far-Test-ChangeTrendLine (EURUSD,H1) 44-moveResult=true
Bonjour, je suis en train d'écrire un indicateur en MQL5, mais quoi que j'écrive comme nom de chaîne ObejectDelete retourne vrai ! même sur un graphique vide sans objets !
Description de Read Object Functions
Il s'agit du groupe de fonctions destinées à travailler avec des objets graphiques relatifs à un graphique spécifié.
Les fonctions définissant les propriétés des objets graphiques, ainsi que les opérations ObjectCreate() et ObjectMove() pour créer et déplacer des objets le long du graphique sont en fait utilisées pour envoyer des commandes au graphique. Si ces fonctions sont exécutées avec succès, la commande est incluse dans la file d'attente commune des événements du graphique. Les modifications visuelles des propriétés des objets graphiques sont mises en œuvre lors du traitement de la file d'attente des événements du graphique.
Lire la description des fonctions des objets
Cela signifie que la commande "Delete this object" a été acceptée avec succès. Vous pouvez contrôler le résultat de votre commande par GetLastError(). Essayez-le - quel est le code renvoyé ?J'ai modifié le code de la façon suivante :
int ObjCount = ObjectsTotal(ChartID(),/*0=main subwindow*/0,/*all objectTypes*/-1) ;
Remise à zéro de la dernière erreur() ;
bool deleteResult=ObjectDelete(ChartID(), "objet non existant") ;
Print(__LINE__,"-",deleteResult," | ObjCount=",ObjCount," | LastError=",GetLastError()) ;
voici le résultat :
2016.12.12 12:38:43.373 Far-TestObjectDelete (EURUSD,H1) 38-true | ObjCount=0 | LastError=0
ERR_SUCCESS
0
L'opération s'est terminée avec succès
donc il ne retourne pas d'erreur pour savoir par exemple qu'il n'a pas pu accéder à cet objet. mais dans MT4 il retourne l'erreur.
ERR_SUCCESS
0
L'opération s'est terminée avec succès
Il ne renvoie donc pas d'erreur pour savoir, par exemple, qu'il n'a pas pu accéder à cet objet, mais dans MT4, il renvoie l'erreur.
OK. Comme je l'ai découvert, nous ne soulevons pas d'erreur dans ce cas dans MQL5 car ces opérations sont asynchrones. Vous avez donc 2 options :
OK. Comme je l'ai découvert, nous ne soulevons pas d'erreur dans ce cas dans MQL5 car ces opérations sont anisochrones. Vous avez donc 2 options :
OK. Comme je l'ai découvert, nous ne soulevons pas d'erreur dans un tel cas dans MQL5 car ces opérations sont asynchrones. Vous avez donc 2 options :
Comment cela peut-il retourner false dans ce cas ?
La documentation de ObjectDelete() dit:
Valeur de retour
Retourne true si la suppression a réussi, sinon retourne false.
La documentation devrait être plus claire, elle ne dit pas "true if the command is accepted".
Si nous voulons être sûrs qu'un objet est supprimé, nous devrons vérifier s'il existe après la commande de suppression, c'est un non-sens.
Comment peut-il retourner false dans ce cas ?
La documentation de ObjectDelete() dit:
La documentation devrait être plus claire, elle ne dit pas "vrai si la commande est acceptée".
Il sera corrigé de cette façon
Valeur de retour
Retourne vrai si la commande est placée dans la file d'attente commune des événements du graphique , sinon retourne faux.