Durchschnittlichen Profit ermitteln, trotz positiver Zahlen zero divide

Aleksi-Trader
45
Aleksi-Trader  

Hallo,

Derzeit bin ich dabei erstmal testweise Funktionen zu schreiben um diese dann in einer Bibliothek zusammen zu fassen.

Das aktuelle Testprogramm soll simpel die Profite aus der History auslesen und anschließend auf dem Chart ausgeben + ein Durchschnitt errechnen.

Die Ausgabe der Werte zeigt positive Zahlen, wehalb die fehlermeldung: "2020.11.16 21:45:58.899    durchschnittprofithistory (GBPUSD,H1)    zero divide in 'durchschnittprofithistory.mq5' (52,22)" nicht wirklich verständlich ist da diese doch meines Erachtens nur dann auftritt wenn eine Zahl geteilt durch 0 gerechnet wird.

Woran liegt es das trotzdem dieser Fehler ausgegeben wird wenn die zahlen doch alle über 0 liegen?

Danke im vorraus für eure Tipps.

Bemerkung : Trage ich die mir angezeigten Zahlen an Stelle der Variablen  gemäß der Formel ein dann funtioniert es

Ergebnis=Profit/Trades;
void OnTick()
  {
//Daten für 1 wochen berechnen
   datetime end=TimeCurrent();                 // Serverzeit
   datetime start=end-PeriodSeconds(PERIOD_W1);// Festlegen auf 1 Woche


//History abfragen
   HistorySelect(start,end);
   int deals=HistoryDealsTotal();

//Variablen für Berechnung
   int Trades=0;
   double Profit=0;
   double Ergebnis=0;

//Historie duchsuchen und Werte zählen
   for(int i=0; i<deals; i++)
     {
      //Ticketnummer erhalten
      ulong deal_ticket=HistoryDealGetTicket(i);
      if(deal_ticket>0) // Deals abfragen
        {
         string symbol             =HistoryDealGetString(deal_ticket,DEAL_SYMBOL);
         datetime time             =HistoryDealGetInteger(deal_ticket,DEAL_TIME);
         ulong order               =HistoryDealGetInteger(deal_ticket,DEAL_ORDER);
         string order_kommentar          =HistoryDealGetString(deal_ticket,DEAL_COMMENT);
         long pos_ID               =HistoryDealGetInteger(deal_ticket,DEAL_POSITION_ID);
         ENUM_DEAL_ENTRY entry_type=(ENUM_DEAL_ENTRY)HistoryDealGetInteger(deal_ticket,DEAL_ENTRY);

         //Profite
         double Profite=HistoryDealGetDouble(deal_ticket,DEAL_PROFIT);

         //Ergebnisse beschränken auf das Chartsymbol
         if(_Symbol==symbol)
           {
            if(Profite>0)
              {
               //rechne Ergebnisse zusammen
               if(entry_type==DEAL_ENTRY_OUT)
                 {
                  //Anzahl der Trades
                  Trades++;

                  //--- zusammengefasste Profite
                  Profit+=Profite;
                 }
              }
           }
        }
      //Duchrschnuttlichen Profit errechnen
      Ergebnis=Profit/Trades;
     }

   Comment("\n Profit: ",Profit,
           "\n Anzahl der Trades: ",Trades,
           "\n Durchschnittlicher Profit: ",Ergebnis);
Carl Schreiber
Moderator
11240
Carl Schreiber  
Dafür ist der Debugger (mit historischen Werten) da. Befehl für Befehl durchgehen und dabei die Variablenwerte kontrollieren.
Aleksi-Trader
45
Aleksi-Trader  
Carl Schreiber:
Dafür ist der Debugger (mit historischen Werten) da. Befehl für Befehl durchgehen und dabei die Variablenwerte kontrollieren.

Supi, vielen Dank für den Tipp. hab aber noch mal in englichsen foren gesucht und eine recht einfache Lösung gefunden.

Durch ergänzen um eine if (Trades> 0) Ergebis = Profit / Trades klappt es sogar.

nun hab ich das selbe Spiel noch mal für die Verluste geschafft und vorher die negative Zahl mittels MathAbs in eine positive Zahl umgewandelt.