![MQL5 - Lenguaje de estrategias comerciales para el terminal de cliente MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Está perdiendo oportunidades comerciales:
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Registro
Entrada
Usted acepta la política del sitio web y las condiciones de uso
Si no tiene cuenta de usuario, regístrese
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)
MT5: Build 1495 (09 dic 2016)
Ejecuté tu código en la build 1491 y obtuve resultados similares:
He ejecutado tu código en la compilación 1491 y he obtenido resultados similares:
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
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.
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.
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
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:
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
¿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.
¿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.