OrderCheck

La función OrderCheck() comprueba si la cuenta dispone de fondos suficientes para ejecutar la operación comercial requerida. Los resultados de la comprobación se colocan en los campos de la estructura MqlTradeCheckResult.

bool  OrderCheck(
   MqlTradeRequest&       request,      // estructura de la solicitud comercial
   MqlTradeCheckResult&   result        // estructura de la respuesta
   );

Parámetros

request

[in]  Puntero a una estructura del tipo MqlTradeRequest que describe la acción comercial requerida.

result

[in,out]  Puntero a una estructura del tipo MqlTradeCheckResult en la que se colocarán los resultados de la comprobación.

Valor devuelto

Si los fondos de la cuenta no son suficientes para la operación especificada, o los parámetros son incorrectos, la función devuelve false. Si la comprobación básica de las estructuras (comprobación de punteros) se ha realizado con éxito, la función devuelve true (lo que no significa que la operación comercial que se solicita vaya a ser ejecutada con éxito). Para una descripción más detallada de los resultados de la ejecución de esta función, hay que analizar los campos de la estructura result.

Para obtener la información sobre el error, hay que llamar a la función GetLastError().

Ejemplo:

#define   DEVIATION     5              // desviación permitida del precio
#define   VOLUME        1.0            // volumen de la orden
#define   EXPERT_MAGIC  123            // MagicNumber
#define   DIRECTION     ORDER_TYPE_BUY // dirección de la orden abierta (ORDER_TYPE_BUY o ORDER_TYPE_SELL)
 
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- declaramos e inicializamos la estructura de la consulta, la comprobación y el resultado
   MqlTradeRequest     request={};
   MqlTradeCheckResult check  ={};
   MqlTradeResult      result ={};
   
//--- preparamos los parámetros de la consulta
   PrepareRequest(_SymbolDIRECTIONVOLUMErequest);
   
//--- preparamos los parámetros de la solicitud comercial
   ResetLastError();
   bool res=OrderCheck(requestcheck);
   if(!res)
     {
      PrintFormat("Trade request verification completed with error %d\nServer retcode: %u, comment: %s"GetLastError(), check.retcodecheck.comment);
      return;
     }
     
//--- la comprobación de la solicitud comercial se ha realizado correctamente, mostramos en el registro la descripción de los campos de la estructura de comprobación de la solicitud comercial
   Print("Trade request verification completed successfully");
   MqlTradeCheckResultPrint(check14);
   
//--- enviamos la solicitud comercial
   if(!OrderSend(requestresult))
      Print("OrderSend error "GetLastError());    // si no hemos logrado enviar la solicitud, mostramos el código de error
      
//--- información sobre la operación
   PrintFormat("Trade request result: retcode=%u, deal=%I64u, order=%I64u"result.retcoderesult.dealresult.order);
   /*
   resultado con el trading automático desactivado en el terminal cliente
   Trade request verification completed with error 4752
   Server retcode10027commentAutoTrading disabled by client
   
   activamos el trading automático y volvemos a comprobar en el mercado cerrado:
   Experts   automated trading is enabled
   Trade request verification completed successfully
   Retcode:      0
   Balance:      10779.50 USD
   Equity:       10779.50 USD
   Profit:       0.00 USD
   Margin:       1104.79 USD
   Margin free:  9674.71 USD
   Margin level975.71 %
   Comment:      Done
   OrderSend error 4756
   Trade request resultretcode=10018deal=0order=0
   
   comprobamos en el mercado abierto:
   Trade request verification completed successfully
   Retcode:      0
   Balance:      10779.50 USD
   Equity:       10779.50 USD
   Profit:       0.00 USD
   Margin:       110.46 USD
   Margin free:  10669.04 USD
   Margin level9758.74 %
   Comment:      Done
   Trade request resultretcode=10009deal=2777010968order=2802818813
   */
  }
//+------------------------------------------------------------------+
//| Comprobamos los parámetros para la solicitud comercial           |
//+------------------------------------------------------------------+
void PrepareRequest(const string symbolconst ENUM_ORDER_TYPE order_typeconst double volumeMqlTradeRequest &request)
  {
   ENUM_ORDER_TYPE type=(DIRECTION !=ORDER_TYPE_BUY ? ORDER_TYPE_SELL : DIRECTION);
   double price=(DIRECTION==ORDER_TYPE_BUY ? SymbolInfoDouble(Symbol(), SYMBOL_ASK) : SymbolInfoDouble(Symbol(), SYMBOL_BID));
//--- parámetros de la solicitud
   request.action    = TRADE_ACTION_DEAL// tipo de operación comercial
   request.symbol    = symbol;            // símbolo
   request.volume    = volume;            // volumen
   request.type      = type;              // tipo de orden
   request.price     = price;             // precio para la apertura
   request.deviation = DEVIATION;         // desviación permitida respecto al precio
   request.magic     = EXPERT_MAGIC;      // MagicNumber de la orden
  }
//+------------------------------------------------------------------+
//| Imprime en el registro los campos de la estructura               |
//| resultado de la comprobación de la solicitud comercial           |
//+------------------------------------------------------------------+
void MqlTradeCheckResultPrint(const MqlTradeCheckResult &checkconst uint header_width=0)
  {
//--- obtenemos la divisa de la cuenta y el número de decimales para la divisa de la cuenta
   string currency=AccountInfoString(ACCOUNT_CURRENCY);
   int    digits  =(int)AccountInfoInteger(ACCOUNT_CURRENCY_DIGITS);
   
//--- definimos el texto del encabezado y la anchura del campo del encabezado
//--- si la anchura del encabezado se ha transmitido a la función como igual a cero, entonces la anchura será el tamaño de la línea del encabezado + 1
   string header="Retcode:";
   uint w=(header_width==0 ? header.Length()+1 : header_width);
//--- mostramos en el registro el código de retorno con un encabezado de la anchura establecida
   PrintFormat("%-*s%-u"wheadercheck.retcode);
   
//--- mostramos en el registro el valor de balance que tendremos tras realizar la operación comercial
   header="Balance:";
   w=(header_width==0 ? header.Length()+1 : header_width);
   PrintFormat("%-*s%-.*f %s"wheaderdigitscheck.balancecurrency);
   
//--- mostramos en el registro el valor de fondos propios que tendremos tras realizar la operación comercial
   header="Equity:";
   w=(header_width==0 ? header.Length()+1 : header_width);
   PrintFormat("%-*s%-.*f %s"wheaderdigitscheck.equitycurrency);
      
//--- mostramos en el registro el valor de beneficio flotante que tendremos tras realizar la operación comercial
   header="Profit:";
   w=(header_width==0 ? header.Length()+1 : header_width);
   PrintFormat("%-*s%-.*f %s"wheaderdigitscheck.profitcurrency);      
      
//--- mostramos en el registro el tamaño del margen necesario para la operación comercial requerida
   header="Margin:";
   w=(header_width==0 ? header.Length()+1 : header_width);
   PrintFormat("%-*s%-.*f %s"wheaderdigitscheck.margincurrency);      
      
//--- mostramos en el registro la cantidad de fondos propios que quedarán tras realizar la operación comercial
   header="Margin free:";
   w=(header_width==0 ? header.Length()+1 : header_width);
   PrintFormat("%-*s%-.*f %s"wheaderdigitscheck.margin_freecurrency);      
      
//--- mostramos en el registro el nivel de margen que tendremos tras realizar  la operación comercial requerida
   header="Margin level:";
   w=(header_width==0 ? header.Length()+1 : header_width);
   PrintFormat("%-*s%-.2f %%"wheadercheck.margin_level);      
      
//--- mostramos en el registro los comentarios al código de respuesta, la descripción del error
   header="Comment:";
   w=(header_width==0 ? header.Length()+1 : header_width);
   PrintFormat("%-*s%-s"wheadercheck.comment);      
  }

Véase también

OrderSend(), Tipos de operaciones comerciales, Estructura de solicitud comercial, Estructura de comprobación de solicitud comercial, Estructura de resultado de solicitud comercial