¿hay un error en mt5 ObjectDelete? - página 2

 

Esto podría ser semántico más que un error.

El propósito de ObjectDelete es "eliminar el objeto con el nombre especificado".

Al final de la ejecución de la función, ¿hay un objeto llamado "Objeto no existente" todavía en el gráfico? No... ¿es esto un éxito?

Mirándolo de otra manera, ¿eliminó ObjectDelete un objeto llamado "Objeto no existente"? No... ¿es esto un fracaso?

¿Mide el éxito por el resultado o por la acción realizada?

Tal vez se esperaría un falso si el objeto nombrado permanece en el gráfico después de ejecutar la función. De lo contrario, sería un éxito.

 
Farzin Sadeghi:
Sí, voy a escribirlo. Estaba esperando tu confirmación. Gracias.

Acabo de intentar informar en el Service Desk y no acepta mi mensaje, diciendo "Error al guardar los datos".

Lo he intentado también desde otra ubicación, PC y navegador (usando mi VPS) y ha ocurrido lo mismo.

¿Pudiste reportarlo por tu lado?

 
honest_knave:

Esto podría ser semántico más que un error.

El propósito de ObjectDelete es "eliminar el objeto con el nombre especificado".

Al final de la ejecución de la función, ¿hay un objeto llamado "Objeto no existente" todavía en el gráfico? No... ¿es esto un éxito?

Mirándolo de otra manera, ¿eliminó ObjectDelete un objeto llamado "Objeto no existente"? No... ¿es esto un fracaso?

¿Mide el éxito por el resultado o por la acción realizada?

Tal vez se esperaría un falso si el objeto nombrado permanece en el gráfico después de ejecutar la función. De lo contrario, sería un éxito.

Si ese es el caso, ¡entonces la diferencia de funcionalidad entre MQL4 y MQL5 no se informa ni se explica en la documentación!
 
Fernando Carreiro:
¡Si ese es el caso, entonces la diferencia de funcionalidad entre MQL4 y MQL5 no está reportada o explicada en la documentación!

Estoy de acuerdo. Sólo tengo curiosidad por saber cuál dirán "ellos" que es la correcta :-)

Personalmente, creo que es mejor devolver true. De lo contrario, hay que añadir código extra para comprobar que el objeto existe o aguantar los errores 4202.

 
honest_knave:

Estoy de acuerdo. Sólo tengo curiosidad por saber cuál dirán "ellos" que es la correcta :-)

Personalmente, creo que es mejor devolver true. De lo contrario, hay que añadir código extra para comprobar que el objeto existe o aguantar los errores 4202.

En mi opinión, en ambos casos hay que comprobar la existencia del objeto antes de borrarlo, independientemente de cuál sea la versión "correcta".

EDIT: Sin embargo, espero que lo "arreglen" para que funcione de la misma manera que MQL4. De lo contrario, habrá otra diferencia de funcionalidad en la que tendremos que poner la compilación condicional en el código hecho para compilar en ambas versiones.

 
Fernando Carreiro:
En mi opinión, en ambos casos hay que comprobar la existencia del objeto antes de borrarlo, independientemente de cuál sea la versión "correcta".

¡Interesante! ¿Por qué hay que comprobar que existe si se quiere que desaparezca?

El tiempo que se tarda en comprobar si un objeto inexistente existe es en gran medida comparable a intentar eliminar un objeto inexistente en MT4 (y una inspección superficial en MT5 muestra que es sustancialmente más lento), así que no puedo ver ningún beneficio tangible de rendimiento al ejecutar la comprobación. Pero añadirá más líneas a su código.

 
Fernando Carreiro:

EDIT: Sin embargo, espero que lo "arreglen" para que funcione de la misma manera que MQL4. De lo contrario, habrá otra diferencia en la funcionalidad en la que tendremos que colocar la compilación condicional en el código hecho para compilar en ambas versiones.

¡Quizás todo sea parte de su plan para forzarnos a MT5 a través de la frustración!
 
honest_knave:

¡Interesante! ¿Por qué hay que comprobar que existe si se quiere que desaparezca?

El tiempo que se tarda en comprobar si un objeto inexistente existe es en gran medida comparable a intentar eliminar un objeto inexistente en MT4 (y una inspección superficial en MT5 muestra que es sustancialmente más lento), así que no puedo ver ningún beneficio tangible de rendimiento al ejecutar la comprobación. Pero añadirá más líneas a su código.

Cuando se quiere detectar si el usuario ha borrado accidentalmente y necesita ser recreado. Me refería a esto como "limpieza" general y no para una funcionalidad de borrar una sola vez.

Pero sí, estoy de acuerdo, para una funcionalidad"OnDeinit()", no hay necesidad de probarla primero.

 
Fernando Carreiro:

Cuando se quiere detectar si el usuario lo ha borrado accidentalmente y hay que volver a crearlo. Me refería a esto como "limpieza" general y no para una funcionalidad de borrar una sola vez.

Pero sí, estoy de acuerdo, para una funcionalidad"OnDeinit()", no hay necesidad de probarlo primero.

Ah, ya veo.

Como nota al margen:

#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);
  }

Ejecutándolo en MT4, no hay mucho en ella.

Ejecutándolo en MT5, es más de 50 veces más lenta.

¿Alguien tiene alguna idea de por qué?

 
honest_knave: Ah, ya veo.

Como nota al margen:

Ejecutarlo en MT4 No hay mucho en él.

Ejecutándolo en MT5 Es más de 50 veces más lento.

¿Alguien tiene alguna idea de por qué?

¿Qué versión has utilizado? Ya que parece haber un posible error en la última versión con la función"ObjectDelete()", ¡podría ser que también haya problemas con "ObjectFind()"!