y a-t-il un bug dans mt5 ObjectDelete ? - page 2

 

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.

 
Farzin Sadeghi:
Oui, je vais l'écrire. J'attendais votre confirmation. Merci.

Je viens d'essayer de le signaler au Service Desk et il n'accepte pas mon message, disant "Error saving data".

J'ai également essayé à partir d'un autre endroit, d'un autre PC et d'un autre navigateur (en utilisant mon VPS) et la même chose s'est produite.

Avez-vous été en mesure de le signaler de votre côté ?

 
honest_knave:

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.

Si c'est le cas, alors la différence de fonctionnalité entre MQL4 et MQL5 n'est pas signalée ou expliquée dans la documentation !
 
Fernando Carreiro:
Si c'est le cas, alors la différence de fonctionnalité entre MQL4 et MQL5 n'est pas signalée ou expliquée dans la documentation !

Je suis d'accord. Je suis juste curieux de savoir lequel "ils" diront être le bon :-)

Personnellement, je pense qu'il est préférable de retourner true. Sinon, vous devez ajouter du code supplémentaire pour vérifier l'existence de l'objet ou supporter les erreurs 4202.

 
honest_knave:

Je suis d'accord. Je suis juste curieux de savoir lequel "ils" diront être le bon :-)

Personnellement, je pense qu'il est préférable de retourner true. Sinon, il faut ajouter du code supplémentaire pour vérifier l'existence de l'objet, sinon il faut supporter les erreurs 4202.

À mon avis, dans les deux cas, il faut vérifier l'existence de l'objet avant de le supprimer, quelle que soit la version "correcte".

EDIT : Cependant, j'espère qu'ils le "réparent" pour qu'il fonctionne de la même manière que MQL4. Sinon, il y aura encore une autre différence de fonctionnalité dans laquelle nous devrons placer la compilation conditionnelle dans le code fait pour compiler sur les deux versions.

 
Fernando Carreiro:
À mon avis, dans les deux cas, il faut vérifier l'existence de l'objet avant de le supprimer, quelle que soit la version "correcte".

Intéressant ! Pourquoi auriez-vous besoin de vérifier qu' il existe si vous voulez qu'il disparaisse ?

Le temps nécessaire pour vérifier l'existence d'un objet inexistant est largement comparable à la tentative de suppression d'un objet inexistant sur MT4 (et une inspection superficielle sur MT5 montre que c'est nettement plus lent), donc je ne vois pas d'avantage tangible en termes de performances à effectuer cette vérification. Mais cela ajoutera des lignes supplémentaires à votre code.

 
Fernando Carreiro:

EDIT : Cependant, j'espère qu'ils le "réparent" pour qu'il fonctionne de la même manière que MQL4. Sinon, il y aura encore une autre différence de fonctionnalité dans laquelle nous devrons placer la compilation conditionnelle dans le code fait pour compiler sur les deux versions.

Peut-être que tout cela fait partie de leur plan pour nous forcer à passer à MT5 par frustration !
 
honest_knave:

Intéressant ! Pourquoi auriez-vous besoin de vérifier qu'il existe si vous voulez qu'il disparaisse ?

Le temps nécessaire pour vérifier l'existence d'un objet inexistant est largement comparable à la tentative de suppression d'un objet inexistant sur MT4 (et une inspection superficielle sur MT5 montre que c'est nettement plus lent), donc je ne vois pas d'avantage tangible en termes de performances à effectuer cette vérification. Mais cela ajoutera des lignes supplémentaires à votre code.

Lorsque vous voulez détecter si l'utilisateur l'a accidentellement supprimé et qu'il doit être recréé. J'ai voulu dire que c'était un "ménage" général et non une fonctionnalité de suppression unique.

Mais oui, je suis d'accord, pour une fonctionnalité"OnDeinit()", il n'y a pas besoin de la tester d'abord.

 
Fernando Carreiro:

Lorsque vous voulez détecter si l'utilisateur a accidentellement supprimé le fichier et qu'il doit être recréé. Je voulais dire qu'il s'agit d'un "ménage" général et non d'une fonctionnalité de suppression unique.

Mais oui, je suis d'accord, pour une fonctionnalité"OnDeinit()", il n'est pas nécessaire de la tester d'abord.

Ah, je vois.

A titre d'information :

#property strict

void OnStart()
  {
   string name = "MysteryObject";
   ulong begin;

   begin = GetMicrosecondCount();
   for(int i=0; i<1000; i++) int result = ObjectFind(0,name);
   printf("ObjectFind took %i μs", GetMicrosecondCount()-begin);

   begin = GetMicrosecondCount();
   for(int i=0; i<1000; i++) bool result = ObjectDelete(0,name);
   printf("ObjectDelete took %i μs", GetMicrosecondCount()-begin);
  }

Je l'exécute sur MT4 Il n'y a pas grand chose dedans.

Exécution sur MT5 Il est plus de 50 fois plus lent.

Quelqu'un a-t-il une idée de la raison ?

 
honest_knave: Ah je vois.

A titre d'information :

Exécution sur MT4 il n'y a pas grand chose dedans.

Exécution sur MT5 Il est plus de 50 fois plus lent.

Quelqu'un a-t-il une idée de la raison ?

Quelle version avez-vous utilisée ? Puisqu'il semble y avoir un bogue possible dans la dernière version avec la fonction"ObjectDelete()", il se pourrait qu'il y ait également des problèmes avec la fonction "ObjectFind()" !