Preguntas de los principiantes MQL5 MT5 MetaTrader 5 - página 854
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
Estoy trasteando con CTrade::PositionClose(const ulong ticket,const ulong deviation=ULONG_MAX) y me doy cuenta de que no está exactamente organizado por dentro. Se trata de 2 códigos de retorno - bool y ResultRetcode(). RetCode no siempre se pone a cero internamente antes de devolver false, por lo que si PositionClose da false, RetCode puede devolver TRADE_RETCODE_DONE. Sería bueno que los desarrolladores sincronizaran estos 2 valores de retorno.
Código + ejemplo + registros.
COrderInfo::OrderType() siempre devuelve 0.
Para comprobarlo, puede colocar manualmente cualquier orden pendiente (BuyStop, SellStop, ...),
y luego introducirlo en el script.
¿Tal vez algo con la tabla de funciones virtuales? En la depuración, sólo llego al int virtual CObject::Type()
PS. Ya me lo he imaginado. COrderInfo tiene 2 métodos similares: Type() y OrderType().
Código + ejemplo + registros.
Vea a qué situación me refiero.
No veo ningún método SetResultRetcode y SetResultComment en CTrade para restablecerlos antes de cada nueva operación.
Tengo que heredar mi clase, donde añado un único método
Vea a qué situación me refiero.
No veo ningún método SetResultRetcode y SetResultComment en CTrade para restablecerlos antes de cada nueva operación.
¿Para qué? Funciones completamente innecesarias.
Primero: disparas al aire - envías una orden comercial sin comprobar primero - sin comprobar lo que la operación devolvió. Mira la referencia:PositionClose es de tipo bool.
En segundo lugar, veamos la cadena de cierre de la posición: cuando la posición no se encuentra (no puede ser seleccionada por la entrada especificada), se devuelve "false".
En ese momento, las estructuras no se borran en ninguna parte - porque no tiene sentido - después de todo, la posición no pudo ser seleccionada antes, por lo tanto no hay información en las estructuras.
¿Qué sentido tiene? Funciones completamente innecesarias.
Primero: disparas al aire - envías una orden comercial sin comprobar primero - sin comprobar lo que la operación devolvió. Veamos la referencia:PositionClose es de tipo bool.
En segundo lugar, veamos la cadena de cierre de la posición: cuando la posición no se encuentra (no puede ser seleccionada por la entrada especificada), se devuelve "false".
Al mismo tiempo, las estructuras no se borran en ninguna parte, ya que no tiene sentido - después de todo, la posición no pudo ser seleccionada antes, por lo tanto no hay información en las estructuras.
1) También podemos decir que ResetLastError() es una función absolutamente innecesaria.
2) Hay una comprobación del resultado devuelto. Imagine, por analogía, que llama a alguna función WinAPI, ésta devuelve un error, y GetLastError() (análogo de ResultRetcode) devuelve cualquier último código.
Si añado alguna comprobación antes de llamar a PositionClose (que lo haré), no anula ninguna otra comprobación antes de otras llamadas, cuando el RetCode no cambiará.
Mi Asesor Experto escribe información en el registro. Todo lo que necesito es escribir en el log ResultRetcode y ResultComment si alguna llamada devuelve false.
1) También podríamos decir que ResetLastError() es completamente innecesario.
2) Hay una comprobación del resultado de la devolución. Imagine, por analogía, que llama a alguna función WinAPI, ésta devuelve un error, y GetLastError() (análogo de ResultRetcode) devuelve cualquier último código.
Si añado alguna comprobación antes de llamar a PositionClose (que lo haré), no anula ninguna otra comprobación antes de otras llamadas cuando el RetCode no cambia.
Mi Asesor Experto escribe información en el registro. Todo lo que necesito hacer es escribir ResultRetcode y ResultComment sanos en el registro si alguna llamada devuelve false.
Lea en la ayuda de la clase CTrade cuando necesitecomprobar el resultado de la ejecución de la solicitud de comercio (código de retorno del servidor de comercio) llamando al métodoResultRetcode().
Leer en la ayuda de la clase CTrade cuandocomprobar el resultado de la ejecución de la solicitud de comercio (código de retorno del servidor de comercio) llamando al métodoResultRetcode().
Puedes afirmarlo.
1) ¿Si PositionClose devuelve false, entonces el Retcode nunca se llena?
2) ¿Si PositionClose devuelve true, entonces el Retcode se rellena siempre?
Orden -> operación -> posición. Toma el precio de apertura de la posición.
Puede mostrar una imagen de cómo esta Orden -> comercio -> posición, está por debajo de donde se escriben las operaciones por lo que no permite copiar allí
Puedes mostrar una imagen de cómo esta Orden -> operación -> posición, es en la parte inferior donde se escriben las operaciones por lo que no te deja copiar.
Por favor, reescriba su pregunta o ponga signos de puntuación, o mejor aún, añada en una imagen qué, dónde y quién. De lo contrario, resulta que veo letras conocidas, pero no puedo entender el significado y su punto.