Schließung von halben Parzellen. - Seite 7

 
  if(OrderSelect(OrdersTotal(),SELECT_BY_TICKET,MODE_TRADES)==true && OpenOrdersThisPair(Symbol())==1 && OrderType()==OP_BUY){ // Even though I am calling "OP_BUY" here, it doesn't seem to work?
         
         }
         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;
            }
            
           double FirstTarget_Buy = OrderOpenPrice() + ( ( OrderTakeProfit()-OrderOpenPrice() ) / 2 );
           {
           Print("FirstTarget_Buy: ", DoubleToStr( FirstTarget_Buy, Digits ));
           }
            if(OrderMagicNumber()==MagicNumber)
              if(OrderSymbol()==Symbol())
                
               Print("Current Bid: ", DoubleToStr(Bid, Digits), " FirstTarget_Buy: ", DoubleToStr(FirstTarget_Buy, Digits)  );
                if(OrderType()==OP_BUY && Bid >= FirstTarget_Buy +(Point / 2))
                  {
                  Print("Bid >= FirstTarget_Buy - Current Bid: ", DoubleToStr(Bid, Digits), " FirstTarget_Buy: ", DoubleToStr(FirstTarget_Buy, Digits)  );
                  bool Close_Half_Order_Buy = OrderClose(OrderTicket(),half,Bid,3,CLR_NONE);
                  if(Close_Half_Order_Buy!=TRUE)Print("Close_Half_Order_Buy Last Error = ", GetLastError());
                  }

         } 
   }
     
Ich weiß, es ist ein bisschen schmuddelig! Ich habe viel damit herumgespielt - also schnell wieder dorthin zurück, von wo aus wir gesprochen haben? Ich nehme an, Sie meinten diesen ganzen Teil, richtig?
 
   if (direction==0){ //--Buy--//
      
      double bsl=buy_stop_price;
      double btp=buy_takeprofit_price;
      LotSize = (RiskedAmount/(pips_to_bsl/pips))/10;
      
      if(OpenOrdersThisPair(Symbol())==0){
         int BuyTicketOrder = OrderSend(Symbol(),OP_BUYSTOP,LotSize,buyPrice,3,bsl,btp,NULL,MagicNumber,0,Green); // This puts out the initial order.
      }
      
         if(OrderStopLoss()<iMA(NULL,0,MA_Period,0,1,0,0)-MA_PadAmount*pips){// This triggers the For loop if the pending order needs adjusting relative to where the MA is.
         
               for(int b=OrdersTotal()-1; b >=0; b--) 
                  {
    
                     if(OrderSelect(b,SELECT_BY_POS,MODE_TRADES)==true){
                     Print(" Stop loss value for the order is ", OrderStopLoss());
                     }
    
                     else if(OrderSelect(b,SELECT_BY_POS,MODE_TRADES)==false){
                     Print(" OrderSelect failed error code is ",GetLastError());
                     }
                     if(OrderMagicNumber()==MagicNumber)
                        if(OrderSymbol()==Symbol())
                           if(OrderType()==OP_BUYSTOP)
                              if(OrderStopLoss()<iMA(NULL,0,MA_Period,0,1,0,0)-MA_PadAmount*pips)
                                if(OpenOrdersThisPair(Symbol())==1) 
                                 DeleteOrder = OrderDelete(OrderTicket());
                                    if(DeleteOrder!=TRUE)Print("DeleteOrder Last Error = ", GetLastError());
                                  
                                 if(OpenOrdersThisPair(Symbol())==0) 
                                  NewBuyOrder = OrderSend(Symbol(),OP_BUYSTOP,LotSize,buyPrice,3,bsl,btp,NULL,MagicNumber,0,Green); // New Pending order with calibrated stops, lots and targets.
                                   if(NewBuyOrder!=TRUE)Print("New Buy Order Last Error = ", GetLastError());  // This is giving me an "Error 0", despite the trade ACTUALLY being placed correctly...?   

                  }
                 } 
             
               if(NewBuyOrder == true){
               Print("New Buy Order Placed #", NewBuyOrder);
               }
               else{
               Print("New Buy Order Send Failed, error # ", GetLastError());   
               }
               }
Dies ist der Kaufbereich - spuckt gerade ein "OP_BUYSTOP" aus
 
DomGilberto:
Ich weiß, er ist ein wenig unordentlich! Ich habe viel damit herumgespielt - also schnell zurück zu dem Punkt, von dem aus wir gesprochen haben? Ich nehme an, Sie meinten diesen ganzen Teil, richtig?

Ähm ... Sie müssen einen Schritt zurücktreten, tief durchatmen und Ihren Code sorgfältig lesen, Funktion für Funktion, Zeile für Zeile ... Fragen Sie sich: "Was will ich hier erreichen?", und prüfen Sie dann, ob Ihr Code das auch wirklich tut ... zum Beispiel:

  if(OrderSelect(OrdersTotal(), SELECT_BY_TICKET,   MODE_TRADES)==true && OpenOrdersThisPair(Symbol())==1 && OrderType()==OP_BUY)

         { // Even though I am calling "OP_BUY" here, it doesn't seem to work?
         
         }

Dieser if-Test führt einen Kommentar aus, wenn er wahr ist ? ? ? ? ? ignorieren Sie das für einen Moment . . wie ist OrdersTotal() eine Ticketnummer? SELECT_BY_TICKET ist nicht einmal eine gültige Position, wenn Sie SELECT_BY_POS verwenden.


Ich glaube nicht, dass dieser Code das Problem ist, das Sie haben, auch wenn er einige Probleme hat.

 

Ja, das ist ein guter Punkt, auch wenn das, ehrlich gesagt, keinen wesentlichen Unterschied macht.

Hmmm....

 
DomGilberto:

Ja, das ist ein guter Punkt, auch wenn das, ehrlich gesagt, keinen wesentlichen Unterschied macht.

HmmCOPY00

Nein, tut es nicht ...

RaptorUK:


Ich glaube nicht, dass dieser Code das Problem verursacht... auch wenn er einige Probleme hat.

Ich glaube nicht, dass Sie den Code zeigen, der das Problem verursacht...

 
DomGilberto:
Dies ist der Abschnitt "Kaufen" - spuckt einfach ein "OP_BUYSTOP" aus.

Dies . . .

if(OpenOrdersThisPair(Symbol())==0) 
   NewBuyOrder = OrderSend(Symbol(),OP_BUYSTOP,LotSize,buyPrice,3,bsl,btp,NULL,MagicNumber,0,Green); // New Pending order with calibrated stops, lots and targets.

if(NewBuyOrder!=TRUE)Print("New Buy Order Last Error = ", GetLastError());  // This is giving me an "Error 0", despite the trade ACTUALLY being placed correctly...? 

. . . ist ein Problem mit {} geschweiften Klammern . . .

if(OpenOrdersThisPair(Symbol())==0) 
   {
   NewBuyOrder = OrderSend(Symbol(),OP_BUYSTOP,LotSize,buyPrice,3,bsl,btp,NULL,MagicNumber,0,Green); // New Pending order with calibrated stops, lots and targets.

   if(NewBuyOrder != TRUE)Print("New Buy Order Last Error = ", GetLastError());  // This is giving me an "Error 0", despite the trade ACTUALLY being placed correctly...? 
   }

Sortieren Sie Ihre Einrückung und Sie werden diese Probleme schnell "sehen".

 
Yea, wieder gut schreien, ich habe durch gegangen und sortiert ein paar der Einrückung Fragen... immer noch mit den gleichen Fragen stecken aber? Welchen anderen Code meinst du, dass es daran liegen könnte? Ich könnte mir nicht vorstellen, dass es an einem anderen Teil meines Codes liegt...?
 
if(OrderSelect(OrdersTotal(),SELECT_BY_POS,MODE_TRADES)==true && OpenOrdersThisPair(Symbol())==1) // If I put "OrderType() == OP_BUY" it won't work at all. This means that it could just grab a pending order - which is wrong.
  { 
         
         
         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()); 
           continue;
           }

           double FirstTarget_Buy = OrderOpenPrice() + ( ( OrderTakeProfit()-OrderOpenPrice() ) / 2 );
           {
           Print("FirstTarget_Buy: ", DoubleToStr( FirstTarget_Buy, Digits ));
           }
            
            if(OrderMagicNumber()==MagicNumber)
              if(OrderSymbol()==Symbol())
                
               Print("Current Bid: ", DoubleToStr(Bid, Digits), " FirstTarget_Buy: ", DoubleToStr(FirstTarget_Buy, Digits)  );
                
                if(OrderType()==OP_BUY && Bid >= FirstTarget_Buy +(Point / 2)) // Does not go further than this. I do not get an error from OrderClose?
                  {
                  Print("Bid >= FirstTarget_Buy - Current Bid: ", DoubleToStr(Bid, Digits), " FirstTarget_Buy: ", DoubleToStr(FirstTarget_Buy, Digits)  );
                  bool Close_Half_Order_Buy = OrderClose(OrderTicket(),half,Bid,3,CLR_NONE);
                  if(Close_Half_Order_Buy!=TRUE)Print("Close_Half_Order_Buy Last Error = ", GetLastError());
                  }
                   
       } 
   }
Ich stecke fest - ich habe versucht, eine Menge zu verschieben und zu ändern, und jetzt muss es ein Fall sein, in dem ich etwas übersehe, von dem ich nicht weiß, dass es existiert... muss das sein? OrderType()==OP_BUY scheint nicht zu funktionieren? Siehe Anmerkungen im Code oben - ich habe die Einrückung überprüft... Das ist episch! haha...
 
DomGilberto:
Yea, wieder gut schreien, ich habe durch gegangen und sortiert ein paar der Einrückung Fragen... immer noch mit den gleichen Fragen stecken aber? Welchen anderen Code meinst du, dass es daran liegen könnte? Ich könnte mir nicht vorstellen, dass es an einem anderen Teil meines Codes liegt...?
LOL, ich weiß es nicht, ich habe nicht alles gesehen ... aber irgendetwas hindert den Code, der den Druck ausführt, daran, zu laufen, wenn man ein OP_BUY hat.
 
2013.08.02 10:52:47	2013.02.01 15:00  trendfishing_play_ground EURUSD,H1: NEW BUY ORDER:-  Lots to open: 0.18215 Entry Price: 1.36790 Buy Stop Loss: 1.35649 Buy Take Profit: 1.39072 Magic Number is: 1234.00000

Dies wird im Journal während meiner for-Schleife gedruckt, wo im Falle einer ausstehenden Buy Stop Order, wenn die 60 EMA > als die OrderStopLoss ist, wird es die ausstehende Order schließen, eine neue mit neuen SL öffnen (die hinter der 60EMA ist), passen Sie den Take-Profit, um die 1:2 Belohnung zu unterhalten, und ändern Sie die Lose relativ zu dem Stopp in Punkten und mein Risikoprofil (sagen wir 2%).

Wenn dies alles geschieht, funktioniert die benutzerdefinierte Variable "Current Lots", die "LotSize" innerhalb von OrderSend ist, sie sendet eine Lotgröße, die für den Server nicht korrekt ist: "0.18215"? Könnte dies ein Problem sein, obwohl die Aufträge eigentlich trotzdem gesendet werden - diese Frage steht eher im Zusammenhang mit "könnte dies der Grund sein, warum ich "OrderType==OP_BUY" nicht aufrufen kann?

Das ist ein langwieriger Prozess lol...