Schließung von halben Parzellen. - Seite 4

 
DomGilberto:
Ich kann nicht glauben, dass ich diese Anfängerfehler mache... Das ärgert mich! Ja, ich kann jetzt drucken und den Auftrag auswählen. Das ist der Code, der in Bezug auf den Druck funktioniert - die Lose werden aber immer noch nicht geschlossen? Ich habe auch die Journalmeldungen unten eingefügt.

2013.07.31 11:13:52 2013.02.01 16:00 trendfishing_play_ground EURUSD,H1: Order Select returned the error of 0 // Not sure what is going on here?

if(OrderSelect(c,SELECT_BY_TICKET,MODE_TRADES)==true)

c ist eine POSITION, keine Ticketnummer...

 

(Facepalm - ich brauche offensichtlich eine Pause davon!) Ok, das ist geklärt und jetzt wird die Bestellung ausgewählt. Dies ist das Journal drucken jetzt - "Close_Half_Order" Fehler = 0? Das ist die eigentliche OrderClose-Funktion, die fehlschlägt. Es hat nichts mit der Anzahl der "000" nach der zweiten Dezimalstelle im Teil "Lots to close is" zu tun, oder?

2013.07.31 11:28:49     2013.02.01 15:00  trendfishing_play_ground EURUSD,H1: Close_Half_Order Last Error = 0
2013.07.31 11:28:49     2013.02.01 15:00  trendfishing_play_ground EURUSD,H1: Order Lots Open = 0.18
2013.07.31 11:28:49     2013.02.01 15:00  trendfishing_play_ground EURUSD,H1: Order Ticker Number = 9
2013.07.31 11:28:49     2013.02.01 15:00  trendfishing_play_ground EURUSD,H1: The Lots to close is: 0.09000
2013.07.31 11:28:49     2013.02.01 15:00  trendfishing_play_ground EURUSD,H1: The Lotstep is: 0.01000
2013.07.31 11:28:49     2013.02.01 15:00  trendfishing_play_ground EURUSD,H1: The minimum lots are: 0.01000
2013.07.31 11:28:49     2013.02.01 15:00  trendfishing_play_ground EURUSD,H1: FirstTarget_Buy: 1.37931
 
DomGilberto:

(Facepalm - ich brauche offensichtlich eine Pause davon!) Ok, das ist geklärt und jetzt wird die Bestellung ausgewählt. Dies ist das Journal drucken jetzt - "Close_Half_Order" Fehler = 0? Das ist die eigentliche OrderClose-Funktion, die fehlschlägt. Es hat nichts mit der Anzahl der "000" nach der zweiten Dezimalstelle im Teil "Lots to close is" zu tun, oder?

Klammern, Klammern, Klammern . . manchmal muss man sie verwenden, manchmal nicht.

Die Funktion OrderClose() ist nicht fehlgeschlagen . . .

            if(OrderMagicNumber()==MagicNumber)
              if(OrderSymbol()==Symbol())
                if(OrderType()==OP_BUY)
                  if(OpenOrdersThisPair(Symbol())==1)   //  if this is true . . . 

                bool Close_Half_Order = OrderClose(OrderTicket(),half,FirstTarget_Buy,3,CLR_NONE); // . . .  do this.

            if(Close_Half_Order!=TRUE)Print("Close_Half_Order Last Error = ", GetLastError());  //  do this whatever happens . . .

Wenn der OrderType() kein OP_BUY ist, wird die letzte Zeile trotzdem ausgeführt, daher der Fehler 0 ... Fügen Sie Klammern wie folgt hinzu:

            if(OrderMagicNumber() == MagicNumber)
              if(OrderSymbol() == Symbol())
                if(OrderType() == OP_BUY)
                  if(OpenOrdersThisPair(Symbol()) == 1) 
                     {
                     bool Close_Half_Order = OrderClose(OrderTicket(), half, FirstTarget_Buy, 3, CLR_NONE);
                     if(Close_Half_Order != TRUE) Print("Close_Half_Order Last Error = ", GetLastError() );  // only executed if the OrderClose() was also executed
                     } 
 
Eine konsequente Einrückung hilft Ihnen auch, die Vorgänge klar zu erkennen
 
Hmmm, will immer noch nicht schließen @ "Close_Half_Order" ? Ich bekomme auch keine Fehlermeldung?
 
DomGilberto:
Hmmm, will immer noch nicht schließen @ "Close_Half_Order" ? Sie erhalten auch keine Fehlermeldung?
Was ist Ihr Auftragstyp?
 
OP_BUY?

  if(OrderSelect(OrdersTotal(),SELECT_BY_TICKET,MODE_TRADES)==true && OpenOrdersThisPair(Symbol())==1){
         
         double FirstTarget_Buy = OrderOpenPrice() + ( ( OrderTakeProfit()-OrderOpenPrice() ) / 2 );{
           Print("FirstTarget_Buy: ", DoubleToStr( FirstTarget_Buy, Digits ));
         }
         
         double minLot  = MarketInfo(Symbol(), MODE_MINLOT);{
                Print("The minimum lots are: ", DoubleToStr( minLot, Digits ));
                }
                        
         double lotStep = MarketInfo(Symbol(), MODE_LOTSTEP);{
                Print("The Lotstep is: ", DoubleToStr( lotStep, Digits ));
                }
                
         double half    = MathCeil(OrderLots()/2/lotStep)*lotStep;{
                Print("The Lots to close is: ", DoubleToStr( half, Digits ));
                }
      for( int c=OrdersTotal()-1; c >=0; c-- )
      {
         if(OrderSelect(c,SELECT_BY_POS,MODE_TRADES)==true){
            Print("Order Ticker Number = ",OrderTicket());
            Print("Order Lots Open = ", OrderLots());
            } 
         else{
           Print("Order Select returned the error of ", GetLastError()); // Order Select does not seem to want to work?
            continue;
            }
            if(OrderMagicNumber()==MagicNumber)
              if(OrderSymbol()==Symbol())
                if(OrderType()==OP_BUY)
                  if(OpenOrdersThisPair(Symbol())==1){ 
                bool Close_Half_Order = OrderClose(OrderTicket(),half,FirstTarget_Buy,3,CLR_NONE);
                if(Close_Half_Order!=TRUE)Print("Close_Half_Order Last Error = ", GetLastError());
                }
      } 
   }
 
DomGilberto:
OP_BUY?


Sie sprachen vorhin von schwebenden Aufträgen, haben Sie tatsächlich einen OP_BUY offen, wenn Sie testen? oder haben Sie einen schwebenden Auftrag offen?
 

Übrigens, diese Klammern machen nichts anderes, als die Situation zu verwirren .

         double FirstTarget_Buy = OrderOpenPrice() + ( ( OrderTakeProfit()-OrderOpenPrice() ) / 2 );  {  
           Print("FirstTarget_Buy: ", DoubleToStr( FirstTarget_Buy, Digits ));
         }  
         
         double minLot  = MarketInfo(Symbol(), MODE_MINLOT);  {  
                Print("The minimum lots are: ", DoubleToStr( minLot, Digits ));
                }  
                        
         double lotStep = MarketInfo(Symbol(), MODE_LOTSTEP);  {  
                Print("The Lotstep is: ", DoubleToStr( lotStep, Digits ));
                }  
                
         double half    = MathCeil(OrderLots()/2/lotStep)*lotStep;  {  
                Print("The Lots to close is: ", DoubleToStr( half, Digits ));
                }  
 

Ich habe einen schwebenden Auftrag mit der Bezeichnung "OP_BUYSTOP" eingegeben, aber ich hatte den Eindruck, dass sich dieser Auftrag bei Auslösung in einen "OP_BUY" ändern würde?

Ich dachte, der Auftragstyp wäre "OP_BUY", wenn er ausgelöst worden wäre?

Schließlich bin ich nur daran interessiert, wenn der Auftrag ausgelöst worden ist?

Warum sind diese Klammern verwirrend? Meinen Sie damit, wo die linke Klammer steht? Wenn ja, scheint das eine individuelle Sache zu sein, denn ich wurde diesbezüglich mehrfach korrigiert.