HAllo kann mir jemand helfen wieso dieser Code nicht funktioniert?

 

Hallo zusammen wollte ein Code schreiben der mir sagt wieviel von meinen offen Orders profit macht und wieviel loss. Leider funktioniert er nicht wenn ich den Code im EA habe geht er zur ersten Buy order und nachher stoppt das ganze programm kann es dann nur nach abwürgen da immer steht "keine Rückmeldung". Ich verwende mql4. Hoffe jemand kann mir helfen und danke schon im vorraus. 

  static int UpTrendCountpositive;
  static int UpTrendCountnegative;
  static int OpenTrades;
   
  static double money;

   if(ExistPositions()){
   
      while(OpenTradesBuy()>0){
      
               OpenTrades = OrdersTotal();
               // close opened orders first
               int totaluptrades=OrdersTotal();
               
               for(int Up=totaluptrades-1; Up>=0; Up--)
                 {
                  if(OrderSelect(Up,SELECT_BY_POS,MODE_TRADES))
                    {
  
                    money= OrderProfit();
                    
                    if (money>0){
                     UpTrendCountpositive = UpTrendCountpositive + 1;
                     break;
                    }///Win
                     
                 
                    if (money<0){ 
                     UpTrendCountnegative = UpTrendCountnegative + 1;
                     break;
                    }///Loss
                   
                   
                   }
                   
                   }
                 }
              
   
   Comment("UpTrendCountpositive" + UpTrendCountpositive + NL +
            "UpTrendCountnegative" + UpTrendCountnegative + NL +
            "OpenTrades" + OpenTrades + NL);
   
   
   UpTrendCountpositive = 0;
   UpTrendCountnegative = 0;
   OpenTrades = 0;
   
   }



int OpenTradesBuy()
  {
   int icnt,itotal,retval;

   retval=0;
   itotal=OrdersTotal();

   for(icnt=itotal-1;icnt>=0;icnt--)
     {
      OrderSelect(icnt,SELECT_BY_POS,MODE_TRADES);
      if(OrderType()==OP_BUY)
         retval++;

     }

   return(retval);
  }
 

Deine Schleifen sind zu verschachtelt - da verliert man die Übersicht!

int o=OrdersTotal();
while(o-->0) {
   if ( !OrderSelect(o, SELECT_BY_POS, MODE_TRADES) ) continue; //what else can you do than print the error?
   if ( OrderType() == OP_BUY ) {
      ...
   }
   if ( OrderType() == OP_SELL ) {
      ...
   }
}

Nicht vergessen (es zur Gewohnheit machen!) immer von oben (OrdersTotal()) herunter zählen, sonst gibt's beim Schließen ein Durcheinander mit den Indices!!

 
Carl Schreiber:

Deine Schleifen sind zu verschachtelt - da verliert man die Übersicht!

Nicht vergessen (es zur Gewohnheit machen!) immer von oben (OrdersTotal()) herunter zählen, sonst gibt's beim Schließen ein Durcheinander mit den Indices!!

Guten Morgen Herr Schreiber ich hatte gehofft das sie sich melden Sie konnten mir bis jetzt immer helfen. Aber ich nehme an das ist jetzt für die Funktion opentradesbuy aber warum funktioniert der obere Code nicht oder anders gefragt wie müsste er aussehen das er funktioniert? Oder wie würden sie es machen wenn sie ermitteln wollen wieviele ihrer offenen orders im Plus oder minus sind ? Ich möchte diesen Code so schreiben das es mir beim Chart im oberen linken Bereich anzeigt wieviel meiner trades im Plus sind, wieviel im minus und wieviel trades insgesamt offen sind. Wäre cool wenn sie mir helfen könnten. 
 

Ehrlich gesagt, mir sind die Schleifen zu sehr verschachtelt, um sie auseinander zu pfriemeln.

Ich habe mir selber deswegen o.a. Schema entwickelt, das ich immer wieder verwende - ich weiß daher sofort wo ich bin.

Die Schleifen vom original Programm könnten mit dem Debugger aufgedröselt werden.

Aber, wieso erst schauen, ob eine Position zu schließen ist, dann den Gewinn abfragen, dann schließen (so)?

Besser ist schließen und dann über den Zeitstempel den tatsächlichen Gewinn der geschlossenen Position abfragen - nicht den hypothetischen (Stichwort Schlupf und so)!

 

und warum gleich in 2 threads gefragt?

 
Gspandelino1410:

Hallo zusammen wollte ein Code schreiben der mir sagt wieviel von meinen offen Orders profit macht und wieviel loss. Leider funktioniert er nicht wenn ich den Code im EA habe geht er zur ersten Buy order und nachher stoppt das ganze programm kann es dann nur nach abwürgen da immer steht "keine Rückmeldung". Ich verwende mql4. Hoffe jemand kann mir helfen und danke schon im vorraus. 

voraussichtlich liegt's an 

while(OpenTradesBuy()>0)

Der EA bleibt dann in dieser Abfrage, solange ein Buy offen ist. Er kommt hier nicht wieder raus, daher hängt er sich auf und es kommt "keine Rückmeldung".

Probier's lieber mit

if(OpenTradesBuy()>0)