Bibliotecas: MT4Orders - página 10

 
Aliaksandr Kryvanos:

seleccion por simbolo y majic no funciona

if (OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES))
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
{
}

OrderSelect no funciona, no selecciona una orden (ticket por indice) para trabajar con ella, ejemplo simple en adjunto y no funciona en mt5 por alguna razon.

Su código no funcionará en MT4 como nos gustaría. Porque hay un error en él - pones tus posiciones a cero majic, pero lo comparas con otro valor.
OrderSend(Symbol(),OP_BUY, 0.01,Ask, 0, 0,0,"",0,0,clrNONE);
Corrija su código a esto
OrderSend(Symbol(),OP_BUY, 0.01,Ask, 0, 0,0,"",MagicNumber,0,clrNONE);
La alarma es falsa.
[Eliminado]  
Gracias, me disculpo, lo que pasa es que yo estaba tratando de traducir una EA a la versión mt5, y me tomó mucho tiempo, y la lógica de negociación no coincidía, he comprobado la magia y todo lo que podría afectar, así que escribí un ejemplo simple y no funcionó. Pero luego encontré mi error, y este ejemplo de arriba no tiene nada que ver. Quise borrar mi post pero no tuve tiempo.
 
Aliaksandr Kryvanos:

seleccion por simbolo y majic no funciona

if (OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES))
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
{
}

OrderSelect no funciona no selecciona una orden (entrada por índice) para trabajar con ella, ejemplo sencillo en el adjunto y no funciona en mt5 por alguna razón

No pone el magick en OrderSend
[Eliminado]  

Hola, esta es una pregunta que tengo, como puedo obtener datos sobre errores al enviar ordenes para MT5, en la version MT4 se ve asi

bool CloseError = OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), 100);
if (CloseError == false)
{
  ResetLastError();
  error = GetLastError();
  Print(" CloseOpenedTrades OrderClose failed" + " - ticket=", OrderTicket() + string(error) + ") " + ErrorDescription(error) + " - ticket= ", OrderTicket());
}

El código de error está contenido en la estructura MqlTradeResult, no podré utilizar el código anterior en MT5 sin acceso al resultado, ¿cómo puedo modificar mt4orders.mqh para que devuelva los errores del servidor de órdenes? gracias

 
Aliaksandr Kryvanos:

Hola, esta es una pregunta que tengo, como puedo obtener datos sobre errores al enviar ordenes para MT5, en la version MT4 se ve asi

bool CloseError = OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), 100);
if (CloseError == false)
{
  ResetLastError();
  error = GetLastError();
  Print(" CloseOpenedTrades OrderClose failed" + " - ticket=", OrderTicket() + string(error) + ") " + ErrorDescription(error) + " - ticket= ", OrderTicket());
}

El código de error está contenido en la estructura MqlTradeResult, no podré utilizar el código anterior en MT5 sin acceso al resultado, ¿cómo puedo modificar mt4orders.mqh para que devuelva los errores del servidor de órdenes? gracias

Puedes hacer que GetLastError devuelva más valores - compleméntalo con códigos de MqlTradeResult.
[Eliminado]  
Es decir, si hay un error al cerrar una orden GetLastError() devolverá el código de error (del servidor de operaciones), aunque no comprobemos MqlTradeResult Result; Result.retcode in OrderSend(Request, Result)?
 
Aliaksandr Kryvanos:
Es decir, ¿si hay un error al cerrar una orden GetLastError() devolverá el código de error (del servidor de operaciones), aunque no comprobemos MqlTradeResult Result; Result.retcode en OrderSend(Request, Result)?

Sí, no es difícil de implementar.

Aliaksandr Kryvanos:
bool CloseError = OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), 100);
if (CloseError == false)
{
  ResetLastError();
  error = GetLastError();
  Print(" CloseOpenedTrades OrderClose failed" + " - ticket=", OrderTicket() + string(error) + ") " + ErrorDescription(error) + " - ticket= ", OrderTicket());
}

No entiendo el significado de lo resaltado.

[Eliminado]  
fxsaber:

Sí, no es difícil de aplicar.

No entiendo el significado de la parte resaltada.

fue en la EA para mt4

Dices que no es difícil de implementar, pero de hecho GetLastError() puede devolver un error del servidor de operaciones si no se envía la orden, sin analizar la estructura MqlTradeResult.

Puedes simplemente añadir una comprobación a:

static bool NewOrderSend( const MqlTradeRequest &Request )
  {
    MqlTradeResult Result;
    if (::OrderSend(Request, Result) || Result.retcode != TRADE_RETCODE_DONE)
    {
      Print("OrderSend() error: ", ResultRetcodeDescription(Result.retcode));
      return(false);
    }
    else
    {
      return(true);
    }

    //return(MT4ORDERS::OrderSend(Request, Result) ? Result.retcode < TRADE_RETCODE_ERROR : false);
  }

¿pero es necesario hacerlo, si GetLastError() puede funcionar tal cual?

 
Aliaksandr Kryvanos:

este era el caso en el asesor mt4

Entonces hay un error en la lógica.

Usted dice que no es difícil de implementar, pero de hecho GetLastError() puede devolver un error de servidor de comercio, si la orden no se envía, sin analizar la estructura MqlTradeResult.

Puedes simplemente añadir una comprobación a:

static bool NewOrderSend( const MqlTradeRequest &Request )
  {
    MqlTradeResult Result;
    if (::OrderSend(Request, Result) || Result.retcode != TRADE_RETCODE_DONE)
    {
      Print("OrderSend() error: ", ResultRetcodeDescription(Result.retcode));
      return(false);
    }
    else
    {
      return(true);
    }

    //return(MT4ORDERS::OrderSend(Request, Result) ? Result.retcode < TRADE_RETCODE_ERROR : false);
  }

¿pero es necesario hacerlo, si GetLastError() puede funcionar tal cual?

No te entiendo. Tu implementación en if contiene un error. Además, existe el TRADE_RETCODE_DONE_PARTIAL - es una ejecución exitosa de OrderSend.

E incluso si arreglas tu código, sólo registrará un mensaje de error (y puede que alguien no quiera verlo cada vez). Pero NO estará disponible en MQL.

Por lo tanto, la variante cuando GetLastError devuelve tanto los errores de tiempo de ejecución estándar y códigos de retorno del servidor de comercio adicional parece ser el más óptimo.

[Eliminado]  
Ya veo, puedes darme una idea de como hacer que GetLastError() de salida a los errores del servidor de comercio también, lo escribiría yo mismo si no tienes tiempo todavía. Gracias