Einzelnen Beitrag anzeigen
  #2 (permalink)  
Alt 19.01.18
traderdoc traderdoc ist offline
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.735
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

Soweit im Prinzip richtig, noch ein paar Feinheiten dazugeproggt.

Code:
double ClosedLooses()
{
   double x;
   double summe = 0;

   for (int i = OrdersHistoryTotal() - 1; i >= 0; i--) 
   {
      if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) 
      {
         if (OrderSymbol() == Symbol && OrderMagicNumber() == MagicNumber)
         {    
            if (OrderProfit() < 0)
            {
               x = OrderProfit() + OrderSwap() + OrderCommission();
               summe += x;
               Print("summe = ", summe);
            }
            else break;
         }
      }
   }
   summe = MathAbs(summe);
   return(summe);
}
Dein Code hätte einen Compilerfehler ergeben müssen, denn hinter dem break muss unbedingt ein ; stehen.
Warum nur die letzten 10 Orders nach i > OrdersHistoryTotal() - 10?
Ob die zusätzliche Zeile mit der Abfrage nach dem OrderSymbol() (und ggf. mit der OrderMagicNumber()) notwendig ist, liegt in Deiner Entscheidung. Mit dieser Zeile werden eben nur die Orders zu einen bestimmten WP genommen (und ggf. sogar eines WP mit ausgewählter MagicNumber!).
Die entscheidende Stelle ist jedoch die Zeile mit dem break, denn richtigerweise von Dir bereits geproggt, soll ja die Aufsummierung sofort unterbrochen werden, wenn eine Order mit OrderProfit() >= 0 ist.
Man hätte auch formulieren können:
if (OrderProfit() + OrderSwap() + OrderCommission() < 0)
denn im Endeffekt belastet auch ggf. der Swap und auf alle Fälle die Commission das Konto.

traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis.