|
Programmierung MQL4 Hier gehts rund ums Programmieren in MQL4. |
|
Themen-Optionen | Thema durchsuchen | Ansicht |
|
|||
Pendingorder löschen bei Trendwechsel
mein EA löscht die offenen PendingOrder nicht, wenn der Trend wechselt.
Programmiert ist, dass offene aktive Orders bei Trendwechsel geschlossen werden... funktioniert super, nur leider bleiben alle Pendingorder drin. Irgendwas ist falsch beim Orderdelete, ich finde den Fehler nicht // Short Signale umsetzen if(ShortSignal == true) { // eventuelle Long Order schließen if(LongOrder>0) { if(OrderSelect(LongOrder,SELECT_BY_TICKET)==true) { bool LongOrderGeclosed = OrderClose(LongOrder,OrderLots(),Bid,10,Blue); if(LongOrderGeclosed==true)LongOrder=0; } } { if(OrderType()==OP_SELL) { // lösche Pendingorder if (BuyStopOrder>0) OrderDelete(BuyStopOrder); BuyStopOrder = 0; } } // Short Order eröffnen while(ShortOrder<1) { ShortOrder=OrderSend(Symbol(),OP_SELL,HandelsLots, Bid,10,(Bid+0.01000),(Bid-0.01000),"FORWARD",MagicNumber,0,Red); } { SellStopOrder=OrderSend(Symbol(),OP_SELLSTOP,Hande lsLots,Bid-0.00100,10,(Bid+0.01000),(Bid-0.00900),"FORWARD",MagicNumber,0,Red); |
|
|||
Hallo,
der folgende Code schliesst bzw. löscht alle Orders, den kannst Du Dir nach Deinen Wünschen anpassen und einbauen: PHP-Code:
|
|
|||
Danke, die Deletefunktion arbeitet sobald eine neue Order plaziert wird.
Wie definiere ich, das er im Buysignal die StopSell löscht und im Sellsignal die StopBuy? Momentan löscht er immer in Trendrichtung und nicht entgegen. Leider habe ich keine Erfahrung mit der Programmierung und lerne Stück für Stück aus dem Netz. Sicherlich kann ich case 1-5 definieren, oder? So schaut der Abschnitt aktuell aus PHP-Code:
|
|
|||
Danke, jetzt löscht er die Pendingorders.
Leider in Trendrichtung...und nicht bei Trendwechsel. Wie formuliert man, dass wenn BuySignal wahr ist die SellStopp Positionen gelöscht werden? |
|
|||
PHP-Code:
|
|
|||
...viele Antworten bekommt man, indem man die F1-Taste benutzt, wenn sich der Cursor auf der jeweiligen MQL4-Funktion befindet, in diesem Fall:
OrderType Returns order operation type of the currently selected order. int OrderType(); Returned value Order operation type of the currently selected order. It can be any of the following values: 0 - OP_BUY - buy order, 1 - OP_SELL - sell order, 2 - OP_BUYLIMIT - buy limit pending order, 3 - OP_BUYSTOP - buy stop pending order, 4 - OP_SELLLIMIT - sell limit pending order, 5 - OP_SELLSTOP - sell stop pending order. |
|
|||
da bin ich trotzdem nicht weiter gekommen.
Ich komme nicht aus der "Programmierer Lounge" Trotzdem versuche ich das ganze auf die Reihe zu bekommen. Ich habe jetzt doch weiterhin an meiner Variante festgehalten. Der EA löscht jetzt in Trendrichtung die Limitorders, aber leider nicht die Stoporders, obwohl es gleich geschrieben ist, woran könnte das liegen? PHP-Code:
|
|
|||
Das Erste, was man für sich und andere, die einem helfen sollen, tun sollte, ist den Code ordentlich und übersichtlich schreiben. Das kann doch keiner lesen!
Also so oder so ähnlich sollte das aussehen. Code:
//Short Signale umsetzen if (ShortSignal == true) { // eventuelle Long Order schließen if (LongOrder > 0) { if (OrderSelect(LongOrder, SELECT_BY_TICKET) == true) { bool LongOrderGeclosed = OrderClose(LongOrder, OrderLots(), Bid, 10, Blue); if (LongOrderGeclosed == true) LongOrder = 0; } } if (BuyLimitOrder > 0) { if (OrderSelect(BuyLimitOrder, SELECT_BY_TICKET)) { bool BuyLimitOrderDelete = OrderDelete(OrderTicket()); if (BuyLimitOrderDelete == true) BuyLimitOrder = 0; } } if (BuyStopOrder > 0) { if (OrderSelect(BuyStopOrder, SELECT_BY_TICKET)) { bool BuyStopOrderDelete = OrderDelete(OrderTicket()); if (BuyStopOrderDelete == true) BuyStopOrder = 0; } } // Short Order eröffnen while (ShortOrder < 1) { ShortOrder = OrderSend(Symbol(), OP_SELL, HandelsLots, Bid, 10, (Bid+0.01000), (Bid-0.00300), "FORWARD", MagicNumber, 0, Red); SellLimitOrder = OrderSend(Symbol(), OP_SELLLIMIT, HandelsLots, Bid+0.00050, 10, (Bid+0.01050), (Bid-0.00350), "FORWARD", MagicNumber, 0, Red); SellLimitOrder = OrderSend(Symbol(), OP_SELLLIMIT, HandelsLots, Bid+0.00100, 10, (Bid+0.01100), (Bid-0.00400), "FORWARD", MagicNumber, 0, Red); SellStopOrder = OrderSend(Symbol(), OP_SELLSTOP, HandelsLots, Bid-0.00050, 10, (Bid+0.00950), (Bid-0.00250), "FORWARD", MagicNumber, 0, Red); SellStopOrder = OrderSend(Symbol(), OP_SELLSTOP, HandelsLots, Bid-0.00100, 10, (Bid+0.00900), (Bid-0.00200), "FORWARD", MagicNumber, 0, Red); } } traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis. |
|
|||
Du machst dir die Arbeit den Code zu strukturieren, und lässt dann trotzdem, nicht mal den kleinsten Hinweis für den Hilfesuchenden da?
Ich werde mal versuchen dir zu helfen Forward, möchte aber darauf Hinweisen das ich selber Anfänger bin und daher nicht versprechen kann, das meine Aussagen auch richtig sind. Wenn ich mir deinen Code anschaue würde ich sagen der Fehler liegt darin, das du keine for Schleife benutzt um die Orders durchzuzählen. Ich glaube das dies aber nötig ist, weil das Programm dann jede Order nacheinander durchgeht und abgleicht ob deine Orderbedingungen stimmen. Ich lasse dir nun ein BeispielsCode da den du, wenn du ihn verstanden hast, auf deinen eigenen Code anpassen kannst: Code:
//Short Signale umsetzen if (ShortSignal == true) // eventuelle Long Order schließen { for(int i=OrdersTotal()-1; i>=0; i--) //1. { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) //2. { if(OrderComment()==Orderkommentar) //3. { if(OrderType()==BUY_LIMIT) //4. { bool LongOrderGeclosed=OrderDelete(OrderTicket(),clrNONE) //5. } } } } } das ist die for Schleife die jede einzelne Order, auf die danach von dir per if befehl definierten, Bedingungen prüft. zu 2. SELECT_BY_POS,MODE_TRADES Das bedeutet du suchst mit der for Schleife alle Positionen durch die aktuell vorhanden sind. zu 3. jetzt musst du per if Befehl deine Orders Filtern. Ich habe in diesem Beispiel OrderComment genommen. Für mich ist das ein entspannter Weg. Du kannst aber auch die Orders über die vorher zugewiesene MagicNumber filtern. zu 4. hiermit prüfst du den Status der Order, also ist es eine Buy_Limit, eine Sell_Limit Order oder eine Buy Order und und und. Jenachdem was du suchst. Wenn du F1 drückst bei OrderType bekommst du eine Auflistung der Ordertypen. Im obigen Beispiel suchen wir eine BUY_LIMIT Order. zu 5. wenn entsprechend die obigen Bedingungen stimmen, solltest du die von dir gesuchte Order gefunden haben, und kannst nun mit OrderDelete() die entsprechende Order löschen. Du musst soweit ich weiß IMMER wenn du mit einer Order arbeiten willst, vorher die For Schleife verwenden. Auch wenn du Orders schließen, Modifizieren oder PendingOrders löschen möchtest. Ich hoffe das meine Ausführungen stimmen und dir weiter helfen. Sollte ich Fehler eingebaut haben dürfen sich gerne die erfahrenen Progger eingeladen fühlen mich zu berichtigen. MfG Lampe |
|
|||
Zitat:
Das Fehlersuchen würde ein Vielfaches der Zeit ausmachen. traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis. |
Lesezeichen |
Stichworte |
delete, mql4, pending order löschen, pendingorder, pendingorder löschen, programmierung, programmierung metatrader, programmierung mql4 |
|
|