Mi EA hace una doble entrada - página 8

 
angevoyageur:

1) No creo que esté relacionado con la cuestión de este tema. El problema que nos encontramos es en el caso de que una solicitud se llenó con éxito y se abre una posición. Pero esta posición se abre en el servidor de operaciones, el problema que nos encontramos es cuando hay un retraso más importante de lo habitual y el terminal MT5 es notificado de esta nueva posición DESPUÉS de que un nuevo tick ya está procesado.

2) ... en mi opinión es un pobre diseñado para una plataforma que permiten explícitamente las solicitudes de comercio síncrono y asíncrono ...

3) ... el ResultRetCode es síncrono, es la actualización de la base de datos de MT5 sobre la posición (trato y orden) que es asíncrona ...

1) No estoy de acuerdo, y perdón por la ignorancia, pero ¿cómo estás tan seguro de que la posición se abre después de PositionOpen() en el servidor de comercio sin doble comprobar el ResultRetcode()?

2) 100% de acuerdo.

3) Seguro que ResultRetCode() es síncrono, me refiero a que para comprobar el código de resultado usted (maestro) debe consultar al servidor (esclavo) con varios mensajes "asíncronos".

 
figurelli:

1) No estoy de acuerdo, y perdón por la ignorancia, pero ¿cómo estás tan seguro de que la posición se abre después de PositionOpen() en el servidor de comercio sin doble comprobar el ResultRetcode()?

2) 100% de acuerdo.

3) Seguro que ResultRetCode() es síncrono, me refiero a que para comprobar el código de resultado usted (maestro) debe consultar al servidor (esclavo) con varios mensajes "asíncronos".

1) Este tema es sobre una doble entrada, por lo que estamos hablando de una solicitud de pedido que tuvo éxito. Nunca escribí que no es necesario hacer una doble comprobación del ResultRetCode(), escribí exactamente lo contrario. Pero esto NO está relacionado con la doble entrada, por definición. ¿No es obvio?

3) Probablemente sea un detalle(¿incomprensión?) pero lo que has escrito no tiene sentido. En la primera parte de tu frase dices que ResultRetCode() es síncrono, en la segunda dices que el "código de resultado" que es lo mismo que ResultRetCode() se obtiene de forma asíncrona. No hay comunicación alguna entre el servidor y la terminal para obtener este valor (Retcode).

CTrade.PositionOpen() por defecto es sincrónica, eso significa que la clase subyacente utiliza OrderSend(). La cual envía la solicitud de orden y espera la respuesta del servidor. El servidor devuelve el resultado a la terminal, y el código del EA continúa (con el valor devuelto verdadero o falso). La comunicación maestro/esclavo ha terminado. Después se puede comprobar el ResultRetcode, que ya está disponible localmente.

Documentation on MQL5: Trade Functions / OrderSend
Documentation on MQL5: Trade Functions / OrderSend
  • www.mql5.com
Trade Functions / OrderSend - Documentation on MQL5
 
@figurelli: Felicidades por convertirse en moderador ... .
 
¿Hay un tiempo de espera para la posición abierta?
 
doshur:
¿Existe un tiempo de espera para la posición abierta?
Hola doshur, ¿a qué te refieres exactamente con el tiempo de espera?
 
Malacarne:
Hola doshur, ¿a qué te refieres exactamente con el tiempo de espera?
Como que no hay respuesta del servidor
 
angevoyageur:

1) Este tema es sobre una doble entrada, por lo que estamos hablando de una solicitud de pedido que tuvo éxito. Nunca escribí que no es necesario comprobar el ResultRetCode(), escribí exactamente lo contrario. Pero esto NO está relacionado con la doble entrada, por definición. ¿No es obvio?

3) Probablemente sea un detalle(¿incomprensión?) pero lo que has escrito no tiene sentido. En la primera parte de tu frase dices que ResultRetCode() es síncrono, en la segunda dices que el "código de resultado" que es lo mismo que ResultRetCode() se obtiene de forma asíncrona. No hay comunicación alguna entre el servidor y la terminal para obtener este valor (Retcode).

CTrade.PositionOpen() por defecto es sincrónica, eso significa que la clase subyacente utiliza OrderSend(). La cual envía la solicitud de orden y espera la respuesta del servidor. El servidor devuelve el resultado a la terminal, y el código del EA continúa (con el valor devuelto verdadero o falso). La comunicación maestro/esclavo ha terminado. Después de eso puede comprobar el ResultRetcode, que ya está disponible localmente.

Alain,

Sobre 1) sigo en desacuerdo, ya que para mi el código original de
doshur no comprueba ResultRetCode() y está buscando una solución a la "doble entrada", y para mi hay que abordar esto es su código (como propuso Malacarne). Así que para mí no es tan obvio.

Acerca de 3) Usted escribió "Sin embargo el ResultRetCode es sincrónico, es la actualización de la base de datos de MT5 sobre la posición (acuerdo y orden) que es asincrónica", así que mi respuesta fue sobre esta frase.

Detodos modos,nuestro debate se parece a la historia de la media taza de agua: algunos la verán medio llena y otros medio vacía, pero es una cuestión de si uno considera el vaso medio lleno, o medio vacío ;-))

Así que, para ser honesto, no creo que este debate sea productivo y/o deba continuar (al menos aquí en este tema), ya que podemos volver a las soluciones de trabajo, así que por favor, perdón por crear tal controversia y por favor, sigue con tu línea de pensamiento, que creo que será más adecuada para ayudar adoshur y otros chicos con el mismo problema.

 
Ubzen:
@figurelli: Felicidades por ser Moderador ... .
Ubzen, muchas gracias, pero sigo creyendo que esto es sólo un error grave mql5.com ;-))
 

Bueno, todas las soluciones publicadas son muy buenas. Lo agradezco y aprendo algunas ideas en el camino.

Ustedes son de gran ayuda.

Mi EA parece ser más resistente ahora.

 
figurelli:
...

Así que, para ser honesto, no creo que este debate sea productivo y/o deba continuar (al menos aquí en este tema), ya que podemos volver a las soluciones de workaround, así que por favor, perdón por crear tal controversia y por favor, seguir adelante con su línea de pensamiento, que creo que será más adecuado para ayudar adoshur y otros chicos con el mismo problema.

Estoy totalmente de acuerdo. No te preocupes y sigue adelante.
Razón de la queja: