Eine kleine Hilfe..
//+------------------------------------------------------------------+ //| Deletes all pending orders | //+------------------------------------------------------------------+ void DeleteAllPendingOrders(int symbol_number) { int total_orders =0; // Total number of pending orders ulong order_ticket =0; // Order ticket //--- Get the total number of pending orders total_orders=OrdersTotal(); //--- Loop through the total number of pending orders for(int i=total_orders-1; i>=0; i--) { //--- If the order selected if((order_ticket=OrderGetTicket(i))>0) { //--- Get the order symbol GetOrderProperties(O_SYMBOL); //--- If the order symbol and the current symbol are equal if(ord.symbol==Symbols[symbol_number]) //--- Delete the order DeletePendingOrder(order_ticket); } } }
ist aus dem Artikel https://www.mql5.com/de/articles/755
- www.mql5.com
Eine kleine Hilfe..
ist aus dem Artikel https://www.mql5.com/de/articles/755
ja genau das ist was ich eigentlich nicht machen wollte ;-)
gibts noch andre ideen?
ja genau das ist was ich eigentlich nicht machen wollte ;-)
gibts noch andre ideen?
hmmm ..... Nein :-)
Kein Ticket keine Kekse ..
verwende, dann will die Funktion ja immer eine Ticketnummer. Diese interessiert mich eigentlich gar nicht, weil ich ja im Netting Mode arbeite.
Wie stellst du dir denn folgendes vor:
Du setzt ZWEI pending orders eurusd in den Markt .
Eine möchtest du jetzt löschen ....???
Das hat nichts mit NETTING oder HEDGE mode des Kontos zu tun.
Wie stellst du dir denn folgendes vor:
Du setzt ZWEI pending orders eurusd in den Markt .
Eine möchtest du jetzt löschen ....???
Das hat nichts mit NETTING oder HEDGE mode des Kontos zu tun.
Schon klar, das ist beim löschen, aber ich will ja nur wissen ins eine gibt. Danke trotzdem.
Kann mir jemand sagen, warum ich dann hier immer den Wert 0 rausbekomme?
ich rufe in der OnTick()
diesen Block auf.
Die Erste Order setzt er noch richtig, aber dann eröffnet er diese Multible. Kann ich in der On Tick nicht so selektieren, quasi wenn kein neuer tick kommt führt er diesen immer wieder aus oder selektiere ich die Order nur falsch?
if(CheckPendingExpert(_Symbol,MN) < 1 ) { if(Hour()>=Start && Hour()<=End && InsideBarLong(_Symbol,PERIOD_M5,1) == true ) { OrderEinstig = Low(_Symbol,PERIOD_M5,1); OrderStopLoss = Low(_Symbol,PERIOD_M5,2); OrderTakeProfit = (OrderEinstig + TP*_Point); PendingOpen(_Symbol,ORDER_TYPE_BUY_LIMIT,Lots, OrderEinstig, OrderStopLoss, OrderTakeProfit,MN,Text,TimeCurrent()+60*60); return; } ....
int CheckPendingExpert(const string symbol,const int magic) { int pendingopen=0; int total=OrdersTotal(); // Anzahl platzierter Pending Orders //--- in allen platzierten Pending Orders suchen for(int i=total-1; i>=0; i--) { if((OrderSelect(i)) == true) { ulong order_ticket=OrderGetTicket(i); // das Ticket der Order string order_symbol=OrderGetString(ORDER_SYMBOL); ulong magicnumber=OrderGetInteger(ORDER_MAGIC); // MagicNumber der Position //--- wenn die MagicNumber übereinstimmt if(order_symbol==symbol && magic==magicnumber) { pendingopen+=1; } } } return(pendingopen); }
selektiere ich die Order zu stark?
danke
Der Aufruf von Orderselect ist falsch.
Orderselect benötigt ein Ticket kein Index.
Orderselect kannst du erst nach OrderGetTicket nutzen.
https://www.mql5.com/de/docs/trading/orderselectHier der korrekte Ablauf:
1. Anzahl der offenen Orders holen
2. Ticket der 1. offenen Order holen über Index Nummer 1
3. Orderselectieren mit dem Ticket ( Wenn True dann ist sie existent)
4. Abfragen von OrderDetails.
5. Ticket von der nächsten Order holen
usw ....bis der Index OrdersTotal zu ende ist.
Hier der korrekte Ablauf:
1. Anzahl der offenen Orders holen
2. Ticket der 1. offenen Order holen über Index Nummer 1
3. Orderselectieren mit dem Ticket ( Wenn True dann ist sie existent)
4. Abfragen von OrderDetails.
5. Ticket von der nächsten Order holen
usw ....bis der Index OrdersTotal zu ende ist.
Nun Ja, eigentlich gehts noch einfacher, zumindest wenn einen nur das Symbol interessiert
Wenn es dir rein um die Anzahl der offenen Orders geht ... ja !
Kannte ich bis eben auch noch nicht.
Aber , es macht trotzdem Sinn gleich beim Öffnen einer Order/Position das Ticket in einn lokalen Buffer zu setzen.
Denn ständig den Server fragen was da denn los ist beim ihm kostet immer Zeit.
Macht sich bemerkbar beim Testen/Optimieren.
OnTick sollte so klein wie möglich gehalten werden.
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Hallo,
ich arbeite ja normalerweise mit Marktorder,
hier ist es ja recht einfach, abzufragen ob für das aktuelle Symbol eine Position besteht.
wie funktioniert das bei Pending Order, ich will ja nicht gleich unendlich viele eröffnen sondern nur eine
wenn ich die Funktion
https://www.mql5.com/de/docs/trading/orderselect
verwende, dann will die Funktion ja immer eine Ticketnummer. Diese interessiert mich eigentlich gar nicht, weil ich ja im Netting Mode arbeite.
gibts ein
ebenfalls?
danke
amando