OrderCalcProfit

La fonction calcule le profit pour le compte courant, dans l'environnement de marché courant et sur la base des paramètres passés. La fonction est utilisée pour pré-évaluer le résultat d'une opération de trading. La valeur est retournée dans la devise du compte.

bool  OrderCalcProfit(
   ENUM_ORDER_TYPE       action,           // type de l'ordre (ORDER_TYPE_BUY ou ORDER_TYPE_SELL)
   string                symbol,           // nom du symbole
   double                volume,           // volume
   double                price_open,       // prix d'ouverture
   double                price_close,      // prix de clôture
   double&               profit            // variable pour récupérer la valeur du profit
   );

Paramètres

action

[in]  Type de l'ordre, peut être l'une des 2 valeurs de l'énumération ENUM_ORDER_TYPE : ORDER_TYPE_BUY ou ORDER_TYPE_SELL.

symbol

[in]  Nom du symbole.

volume

[in]  Volume de l'opération de trading.

price_open

[in]  Prix d'ouverture.

price_close

[in]  Prix de clôture.

profit

[out]  La variable dans laquelle la valeur calculée du profit sera écrite si la fonction est exécutée avec succès. La valeur estimée du profit dépend de plusieurs facteurs et peut différer dans des environnements de marché différents.

Valeur de Retour

Retourne true en cas de succès, false sinon. Si un type d'ordre invalide est spécifié, la fonction retourne false. Pour obtenir des informations sur une erreur, appelez GetLastError().

Exemple :

 
#define   VOLUME     1.0   // volume de l'ordre
#define   DEVIATION  100   // nombre de points avant le prix de clôture
 
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   string currency_profit=SymbolInfoString(_Symbol,SYMBOL_CURRENCY_PROFIT);   // devise du profit
   double close_price=ChartPriceOnDropped(); // la coordonnée du prix correspondant au point où le script a été déposé avec la souris, sert de prix de clôture
 
//---
   for(int i=0i<=ORDER_TYPE_SELLi++)
     {
      ENUM_ORDER_TYPE order_type=(ENUM_ORDER_TYPE)i;                 // type de l'ordre : 0 - Buy, 1 - Sell
      double open_price=PriceOpenByOrderType(_Symbolorder_type);   // prix d'ouverture : Ask pour Buy, Bid pour Sell
     
      //--- si le prix d'ouverture n'est pas reçu, continue la boucle
      if(open_price==0)
         continue;
      
      //--- si le prix de clôture est nul (le script n'a pas été lancé en glissant sur le graphique), calcule le prix
      if(close_price==0)
         close_price=(order_type==ORDER_TYPE_BUY ? open_price + DEVIATION * _Point : open_price - DEVIATION * _Point);
      
      //--- calcule le montant approximatif du profit pour le compte courant et l'environnement de marché en fonction des paramètres transmis
      double profit=0;
      ResetLastError();
      if(!OrderCalcProfit(order_type_SymbolVOLUMEopen_priceclose_priceprofit))
        {
         Print("OrderCalcProfit() failed. Error "GetLastError());
         continue;
        }
      
      //--- affiche dans le journal le profit reçu
      PrintFormat("Estimated profit for %.2f %s position on %s with opening price of %.*f and closing price of %.*f: %.2f %s",
                  VOLUMEOrderTypeDescription(order_type), _Symbol_Digitsopen_price_Digitsclose_priceprofitcurrency_profit);
      
     }
   /*
   résultat :
   Estimated profit for 1.00 Buy position on EURUSD with opening price of 1.10757 and closing price of 1.10881124.00 USD
   Estimated profit for 1.00 Sell position on EURUSD with opening price of 1.10753 and closing price of 1.10881: -128.00 USD
   */
  }
//+------------------------------------------------------------------+
//| Retourne le prix d'ouverture selon le type de l'ordre            |
//+------------------------------------------------------------------+
double PriceOpenByOrderType(const string symbolconst ENUM_ORDER_TYPE order_type)
  {
   MqlTick tick={};
 
//--- récupère les derniers prix par symbole
   if(!SymbolInfoTick(symboltick))
     {
      Print("SymbolInfoTick() failed. Error "GetLastError());
      return 0;
     }
     
//--- renvoie le prix en fonction du type de l'ordre
   switch(order_type)
     {
      case ORDER_TYPE_BUY              :  return(tick.ask);
      case ORDER_TYPE_SELL             :  return(tick.bid);
      default                          :  return(0);
     }
  }
//+------------------------------------------------------------------+
//| Retourne la description du type de l'ordre                       |
//+------------------------------------------------------------------+
string OrderTypeDescription(const ENUM_ORDER_TYPE order_type)
  {
   switch(order_type)
     {
      case ORDER_TYPE_BUY              :  return("Buy");
      case ORDER_TYPE_SELL             :  return("Sell");
      default                          :  return("Unknown order type");
     }
  }

Voir également

OrderSend(), Propriétés d'un Ordre, Types des Opérations de Trading