Profite auslesen

 

Hallo!


Ich versuche jetzt schon seit längerer Zeit die Profite der laufenden Orders auszulesen, doch leider habe ich mit der Funktion    double PosProfit = PositionGetDouble(POSITION_PROFIT);
 kein Glück... Wie kann ich diese Werte (bei mehreren Orders) auslesen und als nutzbaren Wert (pro Tick) weiterverwenden... (zB. beenden einer Order (ausserhalb des StopLoss!!), wenn ein gewisser Gewinn unterschritten wird...


Danke für Eure Infos!

 
DelGardo83:

Hallo!


Ich versuche jetzt schon seit längerer Zeit die Profite der laufenden Orders auszulesen, doch leider habe ich mit der Funktion    double PosProfit = PositionGetDouble(POSITION_PROFIT);
 kein Glück... Wie kann ich diese Werte (bei mehreren Orders) auslesen und als nutzbaren Wert (pro Tick) weiterverwenden... (zB. beenden einer Order (ausserhalb des StopLoss!!), wenn ein gewisser Gewinn unterschritten wird...


Danke für Eure Infos!

Poste mal Deinen Code, mit dem Dir das nicht gelingt - aber verwende dazu Alt+S oder den Code-Icon (</>) aus der Editierzeile.

 
Carl Schreiber:

Poste mal Deinen Code, mit dem Dir das nicht gelingt - aber verwende dazu Alt+S oder den Code-Icon (</>) aus der Editierzeile.

         // Ermittle ID der aktuellen Position
          int ticket = PositionGetTicket(0);
         // Ermittle Profit der aktuellen Position 
          double PosProfit = PositionGetDouble(POSITION_PROFIT);         
         // Abfrage Position
            if (PosProfit < Ausstieg);
            {
               

         // Aktuelle Position Schließen
              trade.PositionClose(ticket);
            }
 

Dachte ich es mir doch, Du verwendest die Funktion wahrscheinlich falsch. In der Dok steht:

PositionGetTicket

Die Funktion gibt das Ticket der Position nach dem Index in der Liste offener Positionen zurück und wählt diese Funktion für die weitere Arbeit mithilfe von Funktionen PositionGetDouble, PositionGetInteger und PositionGetString automatisch aus.

Du hast aber keine Liste.

Mit PositionsTotal() kriegst Du alle offenen Positionen (keine Pending Orders!) und dann kannst Du in einer Schleife durch alle gehen:

int o = PositionsTotal();
while(o-->0) {
   int ticket = PositionGetTicket(0);
 ...
}
Dokumentation zu MQL5: Handelsfunktionen / PositionGetTicket
Dokumentation zu MQL5: Handelsfunktionen / PositionGetTicket
  • www.mql5.com
Die Funktion gibt das Ticket der Position nach dem Index in der Liste offener Positionen zurück und wählt diese Funktion für die weitere Arbeit mithilfe von Funktionen PositionGetDouble, PositionGetInteger und PositionGetString...
 
Carl Schreiber:

Dachte ich es mir doch, Du verwendest die Funktion wahrscheinlich falsch. In der Dok steht:

Du hast aber keine Liste.

Mit PositionsTotal() kriegst Du alle offenen Positionen (keine Pending Orders!) und dann kannst Du in einer Schleife durch alle gehen:

    // von der Anzahl der Positionen auf 0 zählen
 //   for (int i=PositionsTotal()-1; i>=0; i--)   // alle Positionen durchgehen
      {

         // Ermittle ID der aktuellen Position
          int ticket = PositionGetTicket(i);
         // Ermittle Profit der aktuellen Position 
          double PosProfit = PositionGetDouble(POSITION_PROFIT);         
         // Abfrage Position
            if (PosProfit < Ausstieg)
            {
               

         // Aktuelle Position Schließen
              trade.PositionClose(ticket);
            }

Leider bin ich mit meinen Programmierkenntnissen noch nicht so weit... Ich versuche es gerade mit einer Option, welche ich im iNet gefunden habe... doch da ist das Ergebnis nicht das gewünschte, da die Orders alle, undabhängig von der if-Funktion, geschlossen werden....

 
DelGardo83:

Leider bin ich mit meinen Programmierkenntnissen noch nicht so weit... Ich versuche es gerade mit einer Option, welche ich im iNet gefunden habe... doch da ist das Ergebnis nicht das gewünschte, da die Orders alle, undabhängig von der if-Funktion, geschlossen werden....

double PositionProfit(const string symbol, const int MagicNumber) //Gewinn der Gesamtposition
  {


   double profit=0;
//--- in allen offenen Positionen suchen

   int i = PositionsTotal();
   while(i-->0)
     {

      ulong  position_ticket=PositionGetTicket(i);// das Ticket der Position
      PositionSelectByTicket(position_ticket);
      string position_symbol=PositionGetString(POSITION_SYMBOL); // Symbol
      ulong  magic=PositionGetInteger(POSITION_MAGIC); // MagicNumber der Position
      double position_profit=PositionGetDouble(POSITION_PROFIT);

      //--- wenn die MagicNumber übereinstimmt, sind Stop Loss und Take Profit nicht gesetzt
      if(position_symbol==symbol && MagicNumber==magic)
        {
         profit+=position_profit;
        }
     }
   return(profit);
  }