Estructura MqlTradeCheckResult

Antes de enviar una solicitud de operación de trading al servidor se recomienda comprobar que la misma se ha completado sin errores formales. El control lo realiza la función OrderCheck, a la que pasamos la solicitud en la estructura MqlTradeRequest y la variable receptora del tipo de estructura MqlTradeCheckResult.

Además de la corrección de la solicitud, la estructura permite evaluar el estado de la cuenta tras la ejecución de una operación de trading; en concreto, el saldo, los fondos y el margen.

struct MqlTradeCheckResult 

   uint   retcode;      // Response code
   double balance;      // Balance after the transaction
   double equity;       // Equity after the transaction
   double profit;       // Floating profit
   double margin;       // Margin requirements
   double margin_free;  // Free margin
   double margin_level// Margin level
   string comment;      // Comment to the response code (description of the error)
};

En la siguiente tabla se describen los campos:

Campo

Descripción

retcode

Código de retorno asumido

balance

El valor del saldo, que se observará tras la ejecución de la operación de trading.

equity

El valor de los fondos propios, que se observará tras la ejecución de la operación de trading.

profit

El valor del beneficio flotante, que se observará tras la ejecución de la operación de trading.

margin

Margen total bloqueado tras una operación

margin_free

El volumen de fondos propios libres que quedarán tras la ejecución de la operación de trading

margin_level

El nivel de margen que se fijará tras la ejecución de una operación de trading.

comment

Comentario sobre el código de respuesta, descripción del error

En la estructura que se rellena llamando a OrderCheck, el campo retcode contendrá un código de resultado de entre los que admite la plataforma para procesar las solicitudes de operaciones reales y pone en un campo retcode similar de la estructura MqlTradeResult después de llamar a las funciones de trading OrderSend y OrderSendAsync.

Las constantes de código de retorno se presentan en Documentación MQL5. Para su salida más visual al registro cuando se depuran Asesores Expertos, la enumeración aplicada TRADE_RETCODE se definió en el archivo TradeRetcode.mqh. Todos sus elementos tienen identificadores que coinciden con las constantes integradas, pero sin el prefijo común «TRADE_RETCODE_». Por ejemplo:

enum TRADE_RETCODE
{
   OK_0           = 0,      // no standard constant
   REQUOTE        = 10004,  // TRADE_RETCODE_REQUOTE
   REJECT         = 10006,  // TRADE_RETCODE_REJECT
   CANCEL         = 10007,  // TRADE_RETCODE_CANCEL
   PLACED         = 10008,  // TRADE_RETCODE_PLACED
   DONE           = 10009,  // TRADE_RETCODE_DONE
   DONE_PARTIAL   = 10010,  // TRADE_RETCODE_DONE_PARTIAL
   ERROR          = 10011,  // TRADE_RETCODE_ERROR
   TIMEOUT        = 10012,  // TRADE_RETCODE_TIMEOUT
   INVALID        = 10013,  // TRADE_RETCODE_INVALID
   INVALID_VOLUME = 10014,  // TRADE_RETCODE_INVALID_VOLUME
   INVALID_PRICE  = 10015,  // TRADE_RETCODE_INVALID_PRICE
   INVALID_STOPS  = 10016,  // TRADE_RETCODE_INVALID_STOPS
   TRADE_DISABLED = 10017,  // TRADE_RETCODE_TRADE_DISABLED
   MARKET_CLOSED  = 10018,  // TRADE_RETCODE_MARKET_CLOSED
   ...
};
   
#define TRCSTR(XEnumToString((TRADE_RETCODE)(X))

Así, el uso de TRCSTR(r.retcode), donde r es una estructura, proporcionará una descripción mínima del código numérico.

Consideraremos un ejemplo de aplicación de una macro y de análisis de una estructura en la sección siguiente acerca de la función OrderCheck.