OrderCheck

La fonction OrderCheck() vérifie s'il y a suffisamment de fonds pour exécuter l'opération de trading demandée. Les résultats de la vérification sont placés dans les champs de la structure MqlTradeCheckResult.

bool  OrderCheck(
   MqlTradeRequest&       request,      // structure de la demande
   MqlTradeCheckResult&   result        // structure du résultat
   );

Paramètres

request

[in]  Pointeur vers la structure de type MqlTradeRequest, qui décrit l'action de trading désirée.

result

[in,out]  Pointeur vers la structure de type MqlTradeCheckResult, dans laquelle le résultat de la vérification sera placé.

Valeur de Retour

Si les fonds sont insuffisants pour l'opération, ou que les paramètres sont remplis incorrectement, la fonction retourne false. Si la vérification de base des structures réussit (vérification des pointeurs), elle retourne true. Cependant, ce n'est pas une indication que l'opération de trading désirée sera exécutée avec succès. Pour une description plus détaillée du résultat de l'exécution de la fonction, analysez les champs de la structure result .

Pour obtenir des informations sur l'erreur, appelez la fonction GetLastError().

Exemple :

#define   DEVIATION     5              // déviation autorisée du prix
#define   VOLUME        1.0            // volume de l'ordre
#define   EXPERT_MAGIC  123            // MagicNumber
#define   DIRECTION     ORDER_TYPE_BUY // direction de la position ouverte (ORDER_TYPE_BUY ou ORDER_TYPE_SELL)
 
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- déclare et initialise les structures de la requête, de la vérification et du résultat
   MqlTradeRequest     request={};
   MqlTradeCheckResult check  ={};
   MqlTradeResult      result ={};
   
//--- prépare les paramètres de la demande de trade
   PrepareRequest(_SymbolDIRECTIONVOLUMErequest);
   
//--- vérifie les paramètres de la demande de trade
   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 vérification de la demande de trade a réussi - affiche la description des champs de structure de vérification de la demande de trade
   Print("Trade request verification completed successfully");
   MqlTradeCheckResultPrint(check14);
   
//--- envoie la demande de trade
   if(!OrderSend(requestresult))
      Print("OrderSend error "GetLastError());    // if unable to send the request, display the error code
      
//--- information sur l'opération
   PrintFormat("Trade request result: retcode=%u, deal=%I64u, order=%I64u"result.retcoderesult.dealresult.order);
   /*
   résultat avec le trading automatique désactivé dans le terminal client :
   Trade request verification completed with error 4752
   Server retcode10027commentAutoTrading disabled by client
   
   enable auto trading and check again on a closed market:
   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
   
   check on the open market:
   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
   */
  }
//+------------------------------------------------------------------+
//| Prépare les paramètres pour une demande de trade                 |
//+------------------------------------------------------------------+
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));
//--- paramètres de la demande
   request.action    = TRADE_ACTION_DEAL// type de l'opération de trading
   request.symbol    = symbol;            // symbole
   request.volume    = volume;            // volume
   request.type      = type;              // type d'ordre
   request.price     = price;             // prix d'ouverture
   request.deviation = DEVIATION;         // déviation autorisée par rapport au prix
   request.magic     = EXPERT_MAGIC;      // Nombre magique de l'ordre
  }
//+------------------------------------------------------------------+
//| Affiche dans le journal les champs du résultat de la             |
//| vérification de la demande de trade                              |
//+------------------------------------------------------------------+
void MqlTradeCheckResultPrint(const MqlTradeCheckResult &checkconst uint header_width=0)
  {
//--- récupère la devise du compte et le nombre de décimales pour la devise du compte
   string currency=AccountInfoString(ACCOUNT_CURRENCY);
   int    digits  =(int)AccountInfoInteger(ACCOUNT_CURRENCY_DIGITS);
   
//--- définit le texte d'en-tête et la largeur du champ d'en-tête
//--- si la largeur de l'en-tête est passée à la fonction égale à zéro, alors la largeur sera la taille de la ligne d'en-tête + 1
   string header="Retcode:";
   uint w=(header_width==0 ? header.Length()+1 : header_width);
//--- affiche dans le journal le code retour avec l'en-tête de la largeur spécifiée
   PrintFormat("%-*s%-u"wheadercheck.retcode);
   
//--- affiche dans le journal la valeur du solde après avoir exécuté une opération de trading
   header="Balance:";
   w=(header_width==0 ? header.Length()+1 : header_width);
   PrintFormat("%-*s%-.*f %s"wheaderdigitscheck.balancecurrency);
   
//--- affiche dans le journal la valeur des capitaux propres après avoir exécuté une opération de trading
   header="Equity:";
   w=(header_width==0 ? header.Length()+1 : header_width);
   PrintFormat("%-*s%-.*f %s"wheaderdigitscheck.equitycurrency);
      
//--- affiche dans le journal la valeur du profit flottant après avoir exécuté une opération de trading
   header="Profit:";
   w=(header_width==0 ? header.Length()+1 : header_width);
   PrintFormat("%-*s%-.*f %s"wheaderdigitscheck.profitcurrency);      
      
//--- affiche dans le journal le montant de la marge, nécessaire à l'opération de trading nécessaire
   header="Margin:";
   w=(header_width==0 ? header.Length()+1 : header_width);
   PrintFormat("%-*s%-.*f %s"wheaderdigitscheck.margincurrency);      
      
//--- affiche dans le journal la valeur des capitaux propres restant après avoir effectué une opération de trading
   header="Margin free:";
   w=(header_width==0 ? header.Length()+1 : header_width);
   PrintFormat("%-*s%-.*f %s"wheaderdigitscheck.margin_freecurrency);      
      
//--- affiche dans le journal le niveau de marge à définir après avoir terminé l'opération de trading requise
   header="Margin level:";
   w=(header_width==0 ? header.Length()+1 : header_width);
   PrintFormat("%-*s%-.2f %%"wheadercheck.margin_level);      
      
//--- affiche dans le journal le commentaire sur le code de réponse et la description de l'erreur
   header="Comment:";
   w=(header_width==0 ? header.Length()+1 : header_width);
   PrintFormat("%-*s%-s"wheadercheck.comment);      
  }

Voir également

OrderSend(), Types d'une Opération de Trading, Structure de Demande de Trade, Structure de Résultat de la Vérification d'une Demande, Structure de Résultat d'une Demande de Trade