|
Programmierung MQL4 Hier gehts rund ums Programmieren in MQL4. |
|
Themen-Optionen | Thema durchsuchen | Ansicht |
|
|||
"CloseAllOrders" am SL einer 2. Position
Liebe Trader, liebe User-Gemeinde,
seit geraumer Zeit komme ich einfach nicht weiter und würde mich über Eure Unterstützung sehr freuen. Das Problem: Eine 1. Position wird eröffnet und mit einem Trailing_Stop ausgestattet. Hier funktioniert der nachfolgende Code: Code:
double TSL = Trail_SL *100 *Point; //--- Trailing_SL for order type BUY --------------------------------+ if (OrderType() == OP_BUY && openOrders == 1) { if (Bid - OrderOpenPrice() > Trail_Target *100 * Point) // Trail_Target = Trailing begin { if (OrderStopLoss() < Bid - TSL || OrderStopLoss() == 0) { if (!OrderModify(OrderTicket(), OrderOpenPrice(), Bid - TSL, OrderTakeProfit(), Blue)) Print("Error setting Buy trailing stop: ", GetLastError()); } } } Code:
if (OrderType() == OP_BUY && openOrders == 2) { if (Bid - OrderOpenPrice() > Trail_Target *100 * Point) { if (OrderStopLoss() == 0 || OrderStopLoss() < Bid - TSL) { if (!OrderModify(OrderTicket(), OrderOpenPrice(), Bid - TSL, OrderTakeProfit(), Blue)) Print("Error setting Buy trailing stop: ", GetLastError()); CloseAllOrders(); } } } Würde mich über Eure Hilfestellung sehr freuen. LG. piptrade |
|
|||
Das fällt mir auf die Schnelle dazu ein:
Zitat:
Irgendwie verstehe ich aber noch nicht ganz, wie Deine beiden Position laufen, etwa so: 1. Position eröffnet mit TS und läuft, 5 Min später 2. Position eröffnet mit TS und läuft hinterher - wenn 2. Position den TS der ersten einholt, alles zumachen? |
|
|||
Hallo AVT,
herzlichen Dank für Dein schnelles Statement. An Hand der Antworten merkt man erst einmal, was man ggf. falsch erläutert hat und wie präzise die deutsche Sprache ist. Zitat:
Unabhängig von allen strategischen Überlegungen und allen "Pips und Paps" (wäre zu umfangreich) hier nochmals eine kurze Erläuterung, was ich eigentlich will: Es sind 2 Positionen geöffnet (die 1. Pos. ohne TP und ohne SL) und die 2. Position läuft in den TS. Genau an dieser Stelle sollen nun BEIDE Positionen geschlossen werden. Der Code soll einfach nur BEIDE Positionen schließen, falls die 2. Position den TS erreicht. Deshalb der "Einbau" "CloseAllOrders" unter ---> if (openOrders() == 2). LG. piptrade |
|
|||
Klang beim Anfangspost aber noch etwas anders:
Mal nebenbei, wenn die Bedingungen relativ gleich sind, so lieber immer zusammenfügen. Dein Code würde dann so aussehen: Code:
if(OrderType() == OP_BUY) { if(Bid - OrderOpenPrice() > Trail_Target *100 * Point) { if(OrderStopLoss() < Bid - TSL || OrderStopLoss() == 0) { if(!OrderModify(OrderTicket(), OrderOpenPrice(), Bid - TSL, OrderTakeProfit(), Blue)) Print("Error setting Buy trailing stop: ", GetLastError()); if(openOrders == 2) CloseAllOrders(); } } } den TrailingStop der zweiten Order mit "OrderModify()" aktualisierst, direkt danach dann aber "CloseAllOrders()" aufrufst. |
|
|||
Hallo, next user,
der Zitate-Widerspruch resultiert daraus, dass ich alles etwas zu vereinfachen versuche, um am Kern des Problems ein Stückchen weiterzukommen. Zum Zweiten: Das Zusammenfügen beider Code-Bestandteile bei gleichzeitiger Ergänzung der Ausnahme (if (openOrders == 2)) ist ein guter Hinweis. Werde ich so anwenden. Und zum 3.: "CloseAllOrders()" sollte soweit richtig sein, da es an mehreren Stellen des EA angewendet wird und dort gut funktioniert. Was aber wichtig zu sein scheint ist die Tatsache, dass ich den Trail_SL mit "OrderModify()" aktualisiere, sofort danach aber "CloseAllOrders()" aufrufe. Damit kann ein Modify bestenfalls nur 1 x erfolgen. Wäre dann die nachfolgende Code-Ergänzug möglich und sinnvoll ? ("CloseAllOrders()" soll ja erst dann stattfinden, wenn der modifitierte Trail_SL durchbrochen wird.) Code:
if(OrderStopLoss() < Bid - TSL || OrderStopLoss() == 0) { if(!OrderModify(OrderTicket(), OrderOpenPrice(), Bid - TSL, OrderTakeProfit(), Blue)) Print("Error setting Buy trailing stop: ", GetLastError()); if(openOrders == 2 && Bid == OrderStopLoss()) // <========== CloseAllOrders(); } LG. piptrade |
|
|||
Zitat:
andere Richtung läuft und ein Nachziehen des StopLoss nötig wird. |
|
|||
Hallo, next user,
richtig, der Trail_SL soll natürlich nachgezogen werden. Verläuft der Kurs dann aber in die entgegengesetzte Richtung, verbleibt der Trail_SL an seiner letzten Stelle, wo er u.U. gebrochen wird. Und erst dann soll CloseAllOrders() erfolgen. Also müssen neue, separate if-Bedingungen geschaffen werden: Code:
{ if(OrderStopLoss() < Bid - TSL || OrderStopLoss() == 0) { if(!OrderModify(OrderTicket(), OrderOpenPrice(), Bid - TSL, OrderTakeProfit(), Blue)) Print("Error setting Buy trailing stop: ", GetLastError()); { if(openOrders == 2 && OrderStopLoss != 0) { if(Bid == OrderStopLoss() CloseAllOrders(); } } } Kommen wir so der Lösung etwas näher ? LG. piptrade |
|
|||
Ich würde Schwankungen immer im Code beachten, das heißt kein "==" sondern
Code:
if(Bid <= OrderStopLoss()) |
|
|||
Ohhh, sorry,
ich hatte nicht kompelliert. So sollte es etwas richtiger sein ! Code:
{ if (OrderStopLoss() == 0 || OrderStopLoss() < Bid - TSL) { if (!OrderModify(OrderTicket(), OrderOpenPrice(), Bid - TSL, OrderTakeProfit(), Blue)) Print("Error setting Buy trailing stop: ", GetLastError()); } if (openOrders == 2 && OrderStopLoss() != 0) { if (Bid == OrderStopLoss()) CloseAllOrders(); } } LG. piptrade |
|
|||
Das <= gefällt mit gut ! (hatte ich vorher auch schon `mal, - allerdings mit den anfänglich falschen if-Bedingungen)
Im Moment bin ich recht zuversichtlich, werde den Code jetzt testen. Somit vorab recht herzlichen Dank; - ich melde mich noch einmal, wenn alles funktioniert (- oder auch, wenn nicht!) LG. piptrade |
Lesezeichen |
Stichworte |
alle order schließen, closeallorders, mql4, programmierung, programmierung metatrader, programmierung mql4, trailingstop |
|
|