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

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

MT5: Build 1495 (09 dic 2016)

 
honest_knave:

MT5: Build 1495 (09 dic 2016)

Ejecuté tu código en la build 1491 y obtuve resultados similares:

2016.12.11 12:31:05.739 test (EURUSD.m,H1)      ObjectFind took 20126 μs
2016.12.11 12:31:05.739 test (EURUSD.m,H1)      ObjectDelete took 247 μs
 
Fernando Carreiro:

He ejecutado tu código en la compilación 1491 y he obtenido resultados similares:

Siempre es extraño. Tal vez hay una buena explicación de por qué ...?
 
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. En caso contrario, sería un éxito.

Tal vez lo que dices es cierto pero como estamos migrando de MQL4 a MQL5 esperamos ver el mismo resultado o al menos un resultado que esté claramente escrito en el valor de retorno de la referencia.

pasando este primer problema , he probado la función ObjectMove , y de nuevo estoy obteniendo el resultado TRUE también! esto va más allá de su explicación de que debido a que el objeto no está disponible en el final por lo que el verdadero es correcto.

¡con ObjectMove en un objeto que no está disponible debería devolver false!

moveResult=ObjectMove(ChartID(), "línea de tendencia no disponible",1,time[4950],low[4980]);

Print(__LINE__,"-moveResult=",moveResult);

2016.12.11 17:22:39.367 Far-Test-ChangeTrendLine (EURUSD,H1) 44-moveResult=true

 
Farzin Sadeghi:

hola , estoy escribiendo un indicador en MQL5, pero todo lo que escribo como nombre de cadena ObejectDelete devuelve true ! incluso en un gráfico vacío sin objetos!


Descripción de las funciones de lectura de objetos

Este es el grupo de funciones destinadas a trabajar con los objetos gráficos relacionados con cualquier gráfico especificado.

Las funciones que definen las propiedades de los objetos gráficos, así como las operaciones ObjectCreate() y ObjectMove() para crear y mover objetos a lo largo del gráfico se utilizan en realidad para enviar órdenes al gráfico. Si estas funciones se ejecutan con éxito, el comando se incluye en la cola común de los eventos del gráfico. Los cambios visuales en las propiedades de los objetos gráficos se implementan al manejar la cola de los eventos del gráfico.

Significa que el comando "Eliminar este objeto " fue aceptado con éxito. Puede controlar el resultado de su comando mediante GetLastError(). Pruébelo - ¿qué código se devuelve?
 
Rashid Umarov:

Leer la descripción de las funciones de los objetos

Significa que el comando "Eliminar este objeto" fue aceptado con éxito. Puedes controlar el resultado de tu comando mediante GetLastError(). Pruébalo - ¿qué código se devuelve?

He cambiado el código de esta manera :

int ObjCount = ObjectsTotal(ChartID(),/*0=subventana principal*/0,/*todos los tipos de objetos*/-1);

ResetLastError();

bool deleteResult=ObjectDelete(ChartID(), "objeto no existente");

Print(__LINE__,"-",deleteResult," | ObjCount=",ObjCount," | LastError=",GetLastError());

aquí está el resultado :

2016.12.12 12:38:43.373 Far-TestObjectDelete (EURUSD,H1) 38-true | ObjCount=0 | LastError=0

ERR_SUCCESS

0

La operación se completó con éxito


por lo que no devuelve error para saber por ejemplo que no pudo acceder a ese objeto. pero en MT4 sí devuelve el error.

 
Farzin Sadeghi:

ERR_SUCCESS

0

La operación se ha completado con éxito


por lo que no devuelve error para saber por ejemplo que no pudo acceder a ese objeto. pero en MT4 sí devuelve el error.

OK. Según he averiguado no se produce ningún error en este caso en MQL5 porque estas operaciones son asíncronas. Así que tienes 2 opciones

  • comprobar tú mismo si el objeto existe antes de borrarlo
  • intentar borrarlo en cualquier caso y no preocuparse si el objeto no existe
 
Rashid Umarov:

BIEN. Según he averiguado no se produce ningún error en este caso en MQL5 porque estas operaciones son anisócronas. Así que tienes 2 opciones:

  • comprobar tú mismo si el objeto existe antes de borrarlo
  • intentar borrarlo en cualquier caso y no preocuparse si el objeto no existe
De esta manera no se puede comprobar el resultado de ObjectDelete o ObjectMove en MQL5. ¿No es mejor arreglarlo como se hacía en MQL4?
 
Rashid Umarov:

BIEN. Según he averiguado no se produce ningún error en este caso en MQL5 porque estas operaciones son asíncronas. Así que tienes 2 opciones

  • comprobar tú mismo si el objeto existe antes de borrarlo
  • intente borrarlo en cualquier caso y no se preocupe si el objeto no existe

¿Cómo podría devolver false en este caso?

La documentación de ObjectDelete() dice:

Valor de retorno

Devuelve true si la eliminación fue exitosa, en caso contrario devuelve false.

La documentación debería ser más clara, no dice "true si la orden es aceptada".

Si queremos estar seguros de que un objeto es borrado, tendremos que comprobar si existe después del comando de borrado, no tiene sentido.

Documentation on MQL5: Object Functions / ObjectDelete
Documentation on MQL5: Object Functions / ObjectDelete
  • www.mql5.com
Object Functions / ObjectDelete - Reference on algorithmic/automated trading language for MetaTrader 5
 
Alain Verleyen:

¿Cómo podría devolver false en este caso?

La documentación de ObjectDelete() dice:

La documentación debería ser más clara, no dice "true si el comando es aceptado".

Se arreglará de esta manera

Valor de retorno

Devuelve true si el comando es colocadoen la cola común de los eventos del gráfico , en caso contrario devuelve false.
Razón de la queja: