OrderCalcProfit

Berechnet die Größe des Gewinns für das laufende Konto und Marktumgebung aufgrund der übertragenen Parameter. Bestimmt für vorläufige Einschätzung der Handelsoperation. Der Wert wird in der Währung des Kontos zurückgegeben.

bool  OrderCalcProfit(
   ENUM_ORDER_TYPE       action,           // Ordertyp (ORDER_TYPE_BUY oder ORDER_TYPE_SELL)
   string                symbol,           // Symbolname
   double                volume,           // Volumen
   double                price_open,       // Eröffnungspreis
   double                price_close,      // Abschlusspreis
   double&               profit           // Variable für den Erhalt des Wertes des Gewinns 
   );

Parameter

action

[in]  Ordertyp, kann einen der zwei Werte der Enumeration ENUM_ORDER_TYPE annehemen: ORDER_TYPE_BUY oder ORDER_TYPE_SELL.

symbol

[in]  Name des Finanzinstrumentes .

volume

[in]  Volumen der Handelsoperation.

price_open

[in]  Eröffnungspreis.

price_close

[in]  Abschlusspreis.

profit

[out]  Variable in die der berechnete Wert des Gewinns bei der erfolgreichen Ausführung der Funktion geschrieben wird. Wert der Gewinneinschätzung hängt von vielen Faktoren ab und kann sich bei der Veränderung der Marktumgebung verändern.

Rückgabewert

Gibt true im Erfolgsfall zurück, anderenfalls false. Wenn es einen unzulässigen Ordertyp angegeben wird, gibt die Funktion false zurück. Für den Erhalt der Information über den Fehler, muss die Funktion GetLastError() aufgerufen werden.

Beispiel:

 
#define   VOLUME     1.0   // Auftragsvolumen
#define   DEVIATION  100   // Abstand in Punkten für das Schließen
 
//+------------------------------------------------------------------+
//| Skript Programm Start Funktion                                   |
//+------------------------------------------------------------------+
void OnStart()
  {
   string currency_profit=SymbolInfoString(_Symbol,SYMBOL_CURRENCY_PROFIT);   // Gewinnwährung
   double close_price=ChartPriceOnDropped(); // als Schlusskurs dient die Preiskoordinate, die dem Punkt entspricht, an dem das Skript mit der Maus abgelegt wurde.
 
//---
   for(int i=0i<=ORDER_TYPE_SELLi++)
     {
      ENUM_ORDER_TYPE order_type=(ENUM_ORDER_TYPE)i;                 // Order-Typ: 0 - Buy, 1 - Sell
      double open_price=PriceOpenByOrderType(_Symbolorder_type);   // Eröffnungspreis: für Buy - Ask, für Sell - Bid
     
      //--- wenn der Eröffnungskurs nicht empfangen wird, Schleife fortsetzen
      if(open_price==0)
         continue;
      
      //--- wenn der Schlusskurs null ist (das Skript wurde nicht durch Ziehen auf das Diagramm gestartet), wird der Kurs berechnen
      if(close_price==0)
         close_price=(order_type==ORDER_TYPE_BUY ? open_price + DEVIATION * _Point : open_price - DEVIATION * _Point);
      
      //--- Berechnen der ungefähren Gewinnhöhe für das aktuelle Konto und das Marktumfeld basierend auf den übergebenen Parametern
      double profit=0;
      ResetLastError();
      if(!OrderCalcProfit(order_type_SymbolVOLUMEopen_priceclose_priceprofit))
        {
         Print("OrderCalcProfit() failed. Error "GetLastError());
         continue;
        }
      
      //--- den erhaltenen Gewinn im Journal ausdrucken
      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);
      
     }
   /*
   Ergebnis:
   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
   */
  }
//+------------------------------------------------------------------+
//| Rückgabe des Eröffnungspreises nach Auftragsart                  |
//+------------------------------------------------------------------+
double PriceOpenByOrderType(const string symbolconst ENUM_ORDER_TYPE order_type)
  {
   MqlTick tick={};
 
//--- Aktuelle Preise eines Symbols abrufen
   if(!SymbolInfoTick(symboltick))
     {
      Print("SymbolInfoTick() failed. Error "GetLastError());
      return 0;
     }
     
//--- Preis abhängig von der Auftragsart zurückgeben
   switch(order_type)
     {
      case ORDER_TYPE_BUY              :  return(tick.ask);
      case ORDER_TYPE_SELL             :  return(tick.bid);
      default                          :  return(0);
     }
  }
//+------------------------------------------------------------------+
//| Rückgabe der Beschreibung des Auftragstyps                       |
//+------------------------------------------------------------------+
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");
     }
  }

Siehe auch

OrderSend(), Ordereigenschaften, Typen der Handelsoperationen