Schließung von halben Parzellen. - Seite 2

 

Ich muss mich über MathFloor und Ihren Link informieren - das ist alles neu für mich und ich habe Schwierigkeiten, es zu verstehen. Ich werde es morgen in Angriff nehmen.

Danke Leute!

 
         if(Bid == btp-OrderOpenPrice()/2+OrderOpenPrice()){ // need to double check this.
               
               
         double  minLot  = MarketInfo(Symbol(), MODE_MINLOT),
                 lotStep = MarketInfo(Symbol(), MODE_LOTSTEP),
                 Lots    = OrderLots(),
                 half_close = MathFloor(Lots/2/lotStep)*lotStep;
                 
                    
               
         for(int q=OrdersTotal()-1; q >=0; q--)
         {
            if(OrderSelect(q,SELECT_BY_POS,MODE_TRADES)==true){
              Print(" Stop loss value for the order is ", OrderStopLoss());
              Print("lots for the order ",OrderLots());
            }
            else if(OrderSelect(q,SELECT_BY_POS,MODE_TRADES)==false){
              Print(" OrderSelect failed error code is ",GetLastError());
            }
            if(OrderMagicNumber()==MagicNumber)
             if(OrderSymbol()==Symbol())
              if(OrderType()==OP_BUYSTOP)
               if (half_close > minLot)

                
               CloseHalfLong = OrderClose(OrderTicket(),half_close,Bid,3,CLR_NONE);
               if(CloseHalfLong!=TRUE)Print("LastError = ", GetLastError());
         }
         } 
Könnte mir jemand einen kleinen Hinweis geben, was ich falsch mache? Ich habe gerade angefangen, mir das Ganze anzusehen. Abgesehen von der Zeile, in der ich eine Notiz geschrieben habe, könnte mir jemand die richtige Richtung weisen?
 
Irgendwelche Ideen?
 
DomGilberto:
Irgendwelche Ideen?
Sie möchten die Hälfte von OrderLots() schließen - aber wie können Sie OrderLots() verwenden, bevor Sie eine Order ausgewählt haben?
 
Ups - ja, das war klar, lol. Das hat aber nichts geändert?

Habe ich etwas übersehen?
 
DomGilberto:
Ups - ja, das habe ich geklärt, lol. Das hat aber nichts geändert?

Übersehe ich etwas?

Warum machen Sie das Folgende, obwohl Ihre OrderSelect() fehlgeschlagen ist?

if(OrderMagicNumber()==MagicNumber)
             if(OrderSymbol()==Symbol())
              if(OrderType()==OP_BUYSTOP)
               if (half_close > minLot)

Sie schließen eine schwebende Order nicht, was hat Ihnen Ihr Fehlerbericht gesagt?

 

Ich glaube, dass Sie versuchen, denselben Handel zweimal auszuwählen

Sollte es nicht einfach "else" heißen?

else if(OrderSelect(q,SELECT_BY_POS,MODE_TRADES)==false){

Sie erhalten möglicherweise widersprüchliche Meldungen, wenn die Auswahl des Geschäfts beim ersten Mal fehlschlägt, beim zweiten Mal aber erfolgreich ist.

 
Ich erhalte keine Fehler...

Ich bin ein wenig frustriert darüber... Ich erhalte immer wieder "OrderModify error 1" - aber das werde ich mir später ansehen. Ansonsten nichts!
            if(OrderSelect(NewOrder,SELECT_BY_TICKET,MODE_TRADES)==true){
              Print(" Stop loss value for the order is ", OrderStopLoss());
              Print("lots for the order ",OrderLots());
            }
            else if(OrderSelect(NewOrder,SELECT_BY_TICKET,MODE_TRADES)==false){
              Print(" OrderSelect failed error code is ",GetLastError());
            }
            
            double  minLot = MarketInfo(Symbol(), MODE_MINLOT),
            lotStep     = MarketInfo(Symbol(), MODE_LOTSTEP),
            sizeCurr    = OrderLots(),
            sizeClose   = MathFloor(sizeCurr/lotStep)*lotStep/2,
            sizeRem     = sizeCurr - sizeClose;
           //if (sizeClose < minLot)                                     return(false);
            //if (sizeRem   < minLot){ sizeClose = sizeCurr;
                 
           if(OrderTakeProfit()-OrderOpenPrice()/2+OrderOpenPrice() == Bid) // Does this make sense? I am wanting this "if" statement to be true, if price (bid) reaches the price in this comparison statement?

             if(OpenOrdersThisPair(Symbol())==1)
               
               CloseHalfLong = OrderClose(OrderTicket(),sizeClose,Bid,3,CLR_NONE);
                
                if(CloseHalfLong!=TRUE)Print("Last Error = ", GetLastError());
         
         } 
Ich
hatte den Eindruck, dass MathFloor die Antwort einfach auf ganze Zahlen rundet? Ich bin mir also nicht sicher, ob MathFloor korrekt ist? Die Broker, die ich benutze, verwenden 0,01 als Lot-Schritt... (IBFX, um mit dem Vorwärtstest zu beginnen - also Nano-Größe)
 
DomGilberto:
Ich bekomme keinen Fehler...

Ich bin ein wenig frustriert... Ich erhalte immer wieder "OrderModify error 1" - aber das werde ich mir später ansehen. Ansonsten: nichts! Ich hatte den Eindruck, dass MathFloor die Antwort einfach auf eine ganze Zahl rundet? Ich bin mir also nicht sicher, ob MathFloor korrekt ist? Die Broker, die ich benutze, verwenden 0,01 als Lot-Schritt... (IBFX, um mit dem Vorwärtstest zu beginnen - also Nano-Größe)

Ich habe Ihnen einen funktionierenden Code gegeben, warum verwenden Sie ihn nicht? Warum drucken Sie Ihre Variablen nicht aus, um zu sehen, was passiert? Sie haben keine OrderModify() in dem Code, den Sie gepostet haben, inwiefern ist das relevant? wie ich bereits sagte ... warum rufen Sie Handelsfunktionen auf, die sich auf OrderSelect() verlassen, wenn OrderSelect() fehlgeschlagen ist?

Hören Sie auf zu kodieren, sehen Sie sich Ihren Code an, lesen Sie ihn Zeile für Zeile durch, verstehen Sie, was er tatsächlich tut, und wenn es nicht das ist, was Sie beabsichtigen, dann haben Sie ein Problem, das Sie beheben müssen.

 

Rundet MathFloor Dezimalstellen auf die nächste GANZE Zahl ab?

Macht FirstTarget als benutzerdefinierter Parameter innerhalb von "OrderClose()" Sinn - vorausgesetzt "sizeClose" war korrekt? (siehe zitierten Code)

Ihr Code war nicht hilfreich - tut mir leid.

Können Sie benutzerdefinierte Variablen drucken? Wenn ja, muss ich etwas falsch machen, da es im Journal nicht angezeigt wird.

OrderModify ist nicht relevant, Sie haben recht.

           double FirstTarget = OrderTakeProfit()-OrderOpenPrice()/2+OrderOpenPrice();
              CloseHalfLong = OrderClose(OrderTicket(),sizeClose,FirstTarget,3,CLR_NONE);