Schließung von halben Parzellen. - Seite 12

 
DomGilberto:
Ah ja - ich hab's! Ich glaube, ich weiß, wie es geht - jetzt kann ich wieder spielen :)
 
int start()
   {
   if(IsNewCandle())
      {
      CheckForMaTrade();
      if(UseCandleTrail)AdjustTrail();
      }

   if(OpenOrdersThisPair(Symbol())>0)
      {
      if(UseMoveToBreakEven)MoveToBreakEven();
      if(UseTrailingStop)AdjustTrail();
      if(Use_MA_Trail)MA_Trail();
      CloseHalfOrder(); // If there is an order call this void - loop inside the void - "if(OrderType()!=OP_BUY)continue;"
      }
   }
Würde das funktionieren? Würde es jeden Tick von dort aus überprüfen? (CloseHalfOrder() )

UPDATE BELOW - es funktioniert :)
 

Sorry - ich sollte aufhören, 101 Fragen zu stellen, bevor ich Dinge ausprobiere :P

Ja - das funktioniert. Ich habe es jetzt arbeiten, wo-durch es schließt, sobald der Tick kommt in und das Angebot ist >= der OrderClose Preis angegeben :D

Nizza großen Schritt in die richtige Richtung! Jetzt muss ich nur noch dafür sorgen, dass es nicht ständig halbiert wird, wenn der Preis den in der OrderClose-Funktion angegebenen Preis wieder erreicht :)

(Ich bin auch den lästigen OrderModify-Fehler 1 losgeworden!) Hmmm, ich kann mir keine korrekte Logik dafür vorstellen, dass es dann WARTET, nachdem das erste Ziel (1:1) seinen Close-Auftrag ausgeführt hat... Irgendeine Idee? Die OrderTicket()-Nummer ist die gleiche... also kann es nicht so sein? Ich hänge jetzt an diesem Teil fest :) nachdem ich diesen Teil habe, ist es so ziemlich geknackt :)

Mann, ich bin so dankbar für eure Hilfe!

 
DomGilberto:


Mann, ich bin so dankbar für Ihre Hilfe!

Gern geschehen. Ich habe kein Problem damit, Menschen zu helfen, die zuhören und sich gerne zuerst selbst helfen wollen.
 
unglaublich 1 2 3 4 5 6 7 8 9 10 11 12

was für ein großes Thema das ist

Halbe Lose abschließen.

Ich hoffe, Sie können jemand anderem erklären, wie man das macht, was Sie gerade wissen.

101 Fragen... wer will die schon alle lesen...

Denn (Ich bin auch den lästigen OrderModify-Fehler 1 los!)

das passiert meistens, wenn man versucht, den Handel mit einer bereits vorhandenen Einstellung zu ändern

 

Mann, es ist so lohnend, wenn man es einmal herausgefunden hat! Offensichtlich dank Ihrer Eingabe als auch!

Der letzte Punkt, bei dem ich nicht weiterkomme, ist die Anweisung an die Schleife, die Halbierung der offenen Order bei diesem OrderClose() Exit-Preis zu stoppen, und zwar kontinuierlich? Ich kann ehrlich gesagt die Logik nicht verstehen? Es ist genau richtig mit WANN und WAS Preis teilweise zu schließen. Ich muss ihm nur sagen, dass er aufhören soll, sobald er die Order einmal halbiert hat?

Das Problem ist, dass, sobald OrderClose() die Hälfte der offenen Position geschlossen hat, es immer wieder aufgerufen wird, weil der "int start" "CloseHalfOrder()" jedes Mal aufruft, wenn ein "OP_BUY" offen ist... Irgendwelche Ideen?

//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
{
   if(OrderType()==OP_BUY)
      {
      CloseHalfOrder();
      } 
} // ---// <<<<<<<<<<<<< I haven't bothered copying and pasting all of in start() functions. Just showing you how the "CloseHalfOrder" is being called...


//+--------------------------------------------------------------------------------------------------+
//| Close OP_BUY Half lots @ 1:1 Function                                                            |
//+--------------------------------------------------------------------------------------------------+
void CloseHalfOrder()
{   
   
   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=MathFloor(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())
            if(OrderLots()>minLot)
            {
            Print("Current Bid: ",DoubleToStr(Bid,Digits)," FirstTarget_Buy: ",DoubleToStr(FirstTarget_Buy,Digits));
            int HalfCloseTicket = OrderTicket();
            
            if(OrderType()==OP_BUY && Bid>=FirstTarget_Buy+(Point/2)) // Doesn't seem to even go further than this as 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(HalfCloseTicket,half,Bid,3,CLR_NONE);
               if(Close_Half_Order_Buy!=TRUE)Print("Close_Half_Order_Buy Last Error = ",GetLastError());
               if(Close_Half_Order_Buy==True)Print("First Target Closed: ", OrderLots());
               }
            }
         if(Close_Half_Order_Buy==True)
         {
         MoveToBreakEven(); // This is a void.
         EMA_Exit(); // This is another void being called on the basis I can get this loop above to just close the OP_BUY once...
         }    
     }
}
 
deVries:
Unglaublich 1 2 3 4 5 6 7 8 9 10 11 12

was für ein großes Thema das ist

Halbe Lose abschließen.

Ich hoffe, Sie können jemand anderem erklären, wie man den Moment, den Sie kennen, nutzen kann.

101 Fragen... wer will die schon alle lesen...

Denn (Ich bin auch den lästigen OrderModify-Fehler 1 los!)

das passiert meistens, wenn man versucht, den Handel mit einer bereits vorhandenen Einstellung zu ändern


Mate ich werde mehr als glücklich sein, einen Thread zu schreiben, der einen einfachen und effektiven Weg erklärt, um eine offene Bestellung teilweise zu schließen - ich bin mit nur einem letzten Stück stecken, und dann ist es funktioniert mint! Ich werde alles in einem übersichtlichen Thema/Thread zusammenfassen, damit andere es verwenden können? (ich bin mir nicht sicher, wie ich das anstellen soll?)

Siehe den letzten Beitrag oben - ich habe es fast geschafft, kann nur nicht herausfinden, die Logik, um die Schleife zu sagen, STOP Schließen Hälften an der gleichen OrderClose() Exit-Preis kontinuierlich?

Danke auch für den Tipp mit dem OrderModify-Fehler 1 :)
 
DomGilberto:

Mate Ich werde mehr als glücklich sein, einen Thread zu schreiben, der einen einfachen und effektiven Weg erklärt, um eine offene Bestellung teilweise zu schließen - ich bin mit nur einem letzten Stück stecken, und dann ist es funktioniert mint! Ich werde alles in einem übersichtlichen Thema/Thread zusammenfassen, damit andere es verwenden können? (ich bin mir nicht sicher, wie ich das anstellen soll?)

Siehe den letzten Beitrag oben - ich habe es fast geschafft, kann nur nicht herausfinden, die Logik, um die Schleife zu sagen, STOP Schließen Hälften an der gleichen OrderClose() Exit-Preis kontinuierlich?

Danke auch für den Tipp mit dem OrderModify-Fehler 1 :)

Warum verschieben Sie Ihr Ticket nicht zuerst auf den Breakeven, wie Ihnen bereits gesagt wurde, und schließen dann einen Teil des Trades .... if OrderLots() >= .......
 
deVries:

Warum verschieben Sie Ihr Ticket nicht zuerst zum Breakeven, wie Ihnen bereits gesagt wurde, und schließen dann einen Teil des Handels .... if OrderLots() >= .......

Aus diesem Grund? Es spielt keine Rolle, ob ich zuerst den Break-Even erreiche... Das erste Hindernis ist dieser Teil, den ich nicht verstehe? Selbst wenn ich zuerst die Gewinnschwelle erreiche und dann die Hälfte schließe, werden dadurch ALLE offenen Positionen erneut aufgerufen und OrderClose() zum gleichen Preis erneut aufgerufen, indem "CloseHalfOrder();"?

int start()
   {
    
   if(OrderType()==OP_BUY)
      {
      CloseHalfOrder();
      } 
      
   }
 
DomGilberto:

Wegen dieser Sache? Es spielt keine Rolle, ob ich mich bewege, um zuerst die Gewinnzone zu erreichen... Das erste Hindernis ist dieser Teil, den ich nicht verstehe? Selbst wenn ich zuerst die Gewinnschwelle erreiche und dann die Hälfte schließe, werden dadurch ALLE offenen Positionen erneut aufgerufen und OrderClose() zum gleichen Preis erneut aufgerufen, indem "CloseHalfOrder();"?


Sie bewegen sich nur auf BE und schließen die Hälfte, wenn der SL nicht bereits auf BE ist.