Cómo trabajar correctamente en MT5 con OrderSend - página 3

 
prostotrader:

Aprovecha.

¿Por qué envía una solicitud vacía al servidor? No parece tener sentido.
¿Y qué hará en "//see cause result.retcode" si obtiene, por ejemplo, TRADE_RETCODE_TIMEOUT o TRADE_RETCODE_FROZEN?
 
RickD:
¿Por qué envía una solicitud vacía al servidor? No parece tener sentido.
¿Y qué hará en "//see result.retcode" si obtiene, por ejemplo, TRADE_RETCODE_TIMEOUT o TRADE_RETCODE_FROZEN?
Me voy a colgar :)
 
Andrey Khatimlianskii:

Lo apoyo con ambas manos. Es como si MQ no quisiera responsabilizarse de una función ya hecha de enviar una orden y recibir una respuesta.

Mi opción es también con muletas:

¿Por qué no hacer algo similar (no para todas las ocasiones, al menos la más sencilla) y ponerlo a disposición de SB?

realmente, de qué sirve la "ejecución rápida" de OrderSend(...) si en EA tenemos que esperar a

para las actualizaciones del entorno, en este caso las del historial... y llegar a diferentes algoritmos para esperar...

hasta que no se actualice el historial, no avanzaremos... es decir, esta velocidad no sirve de nada...

 
Denis Sartakov:

realmente, de qué sirve una ejecución "rápida" de OrderSend(...) si en EA tenemos que esperar a

para una actualización del entorno, en este caso una actualización del historial... y llegar a diferentes algoritmos para esperar...

hasta que no se actualice el historial, no avanzaremos... es decir, esta velocidad no sirve de nada...

Probablemente, se implementa así porque el terminal puede ejecutar OrderSend y OrderSendAsync en paralelo, y la sincronización forzada del historial después de OrderSend afectaría de alguna manera a OrderSendAsync, OnTrade, OnTradeTransaction, ralentizándolos.
 
Andrey Khatimlianskii:
No me refiero a las funciones integradas en el lenguaje, sino a la biblioteca estándar.
Me refiero específicamente a las funciones lingüísticas incorporadas, que OrderSend podría esperar una actualización del historial comercial internamente, pero no lo hace. :)
Dices que tienes una muleta, pero no es tan fiable. Dame un ejemplo de una buena muleta fiable.
Digo que tal vez puedas prescindir de las muletas en absoluto. Si los desarrolladores se dignaron a cambiar el comportamiento de OrderSend. Hazlo como en MT4.
O - o una opción alternativa. Añadir la función OrderSendMT4Style. :)
 

Una sobrecarga muy simple de OrderSend se escribe de forma independiente: hasta que OnTrade devuelva una respuesta, todos los OrderSends posteriores devuelven false. En cuanto se recibe la respuesta, se anula el falso forzado.

Esta es exactamente la solución que necesitamos añadir al SB. Y debemos utilizarla nosotros mismos.

En SB, añadirbool CTrade::IsHistoryLoad( const string Symb = NULL ) por el mismo principio.

¡Y sin muletas! Ambas funciones pueden ser escritas fácilmente por usted mismo.

Si quiere conseguir la funcionalidad completa (no para la SB), llame a OnTick y OnTimer independientemente en OnTrade a la llegada de la sincronización correspondiente.

 

Qué montón de muletillas han escrito... Estudiar el comportamiento de la función void OnTradeTransaction()

/*********************TradeTransaction function*********************/
void OnTradeTransaction(const MqlTradeTransaction& trans,
                        const MqlTradeRequest& request,
                        const MqlTradeResult& result)
{
      if(trans.type == TRADE_TRANSACTION_DEAL_ADD)
       {
        if(!PositionSelectByTicket(trans.position))
         {
          //Print("********* закрылась позиция ", trans.position);
           closedPosition(trans);
         }
        if(PositionSelectByTicket(trans.position))
         {
          //Print("********* отккрылась позиция ", ", ", EnumToString(trans.deal_type), ", ", trans.position);
           openedPosition(trans);
         }
       }
       
}/*******************************************************************/

También gestionar los errores de apertura de posiciones y órdenes.

 
Alexey Viktorov:

Qué montón de muletillas han escrito... Estudiar el comportamiento de la función void OnTradeTransaction()

También gestionar los errores de apertura de posiciones y órdenes.

Has leído el tema en diagonal.
 
fxsaber:
Has leído el tema en diagonal.

No, sólo verticalmente. Sólo la primera letra de cada línea.

 
Andrey Khatimlianskii:

¿Cómo funcionará esta simple sobrecarga con 2 EAs en el mismo instrumento?

Por desgracia, sólo a través de una muleta - una variable global de la terminal.