|
Startseite | Registrieren | Hilfe | Benutzerliste | Kalender | Suchen | Heutige Beiträge | Alle Foren als gelesen markieren |
Programmierung MQL4 Hier gehts rund ums Programmieren in MQL4. |
|
Themen-Optionen | Thema durchsuchen | Ansicht |
|
|||
Erkennen ob Position augestoppt wurde
Hi, bin noch nicht so vertraut mit der mq4-programmierung.
In meiner Strategie eröffne ich gleichzeitig eine long- und eine shortposition. Je nachdem welche Position der beiden durch StopLoss geschlossen wird, soll sich der EA anders verhalten. Ich öffne die Positionen so: Code:
ticket_long=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Bid-StopLoss*Point,Ask+TakeProfit*Point,"Opening Position....",12345,0,Green); if(ticket_long>0) { if(OrderSelect(ticket_long,SELECT_BY_TICKET,MODE_TRADES)) Print("BUY order opened : ",OrderOpenPrice()); trade_aktiv=1; } else { Print("Error opening BUY order : ",GetLastError()); } // Short Position öffnen ticket_short=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Ask+StopLoss*Point,Bid-TakeProfit*Point,"Opening Position....",12345,0,Red); if(ticket_short>0) { if(OrderSelect(ticket_short,SELECT_BY_TICKET,MODE_TRADES)) Print("SELL order opened : ", OrderOpenPrice()); trade_aktiv=1; } else { Print("Error opening SELL order : ",GetLastError()); } Variante 1: Code:
if(!(OrderSelect(ticket_long,SELECT_BY_TICKET,MODE_TRADES))) // wenn long Position ausgestoppt wurde { Print("!! Long Position Ausgestoppt !!"); } Code:
OrderSelect(ticket_long,SELECT_BY_TICKET,MODE_TRADES); closeTime=OrderCloseTime(); if (closeTime!=0) { Print("!! Long Position Ausgestoppt !!"); } Bei Variante 2 erkennt er nicht das sie geschlossen wurde. Was mache ich falsch ? |
|
|||
also die erste Variante kann schonmal nicht funktionieren. Denn auch geschlossene Orders kann man selektieren (wäre auch doof, wenn nicht )
Die zweite ist grundsätzlich die richtige Herangehensweise. Überprüfe am besten auf if(OrderCloseTime() > 0). Wenn das true ist, dann ist die Position geschlossen. Hast du denn die Var. ticket_long auf EA-Ebene definiert oder in der Funktion? Letzteres wäre fatal. Mehr fällt mir so in der Theorie nicht ein. Am besten poste den EA, dann nehmen wir uns den mal uns können praktisch testen, was damit falsch läuft. |
|
|||
Danke für die Antwort.
Ja klar die erste Variante war schon blöd ... also die Variable ticket_long ist in der start Funktion als erstes definiert. Es spielt sich auch alles in der Start Funktion ab von daher sollte es damit keine Probleme geben. Ja die zweite Variante müsste doch so gehen, denn eine offene Position hat ja bei Close Time eine 0 als Wert. Ich versuchs gleich nochma bissi anders abzufragen, so wie du es geschrieben hattest. |
|
|||
ah, ok, da haben wir den Fehler! Du hast die Variable für die Tickets in der start()-Methode definiert! Wenn du das machst, dann ist die Var. jedes Mal leer, wenn die startMethode neu aufgerufen wird. Und das passiert bei jedem Tick. In deinem Fall ist eröffnung und mögliche Schließung der Position aber nicht im gleichen Tick.
D.h. es wird eröffnet um z.B. 16.00, dann hält die Var. für diesen Durchlauf der start()Methode den Ticketwert. Ab dem nächsten Tick ist der variablenwert wieder null. Du musst also ticket_long und -short außerhalb der Methoden deklarieren. Dann behalten sie den Wert, solange der EA nicht neu gestartet wird. |
Lesezeichen |
Stichworte |
ausgestoppt, close, mql4, order, programmierung, programmierung metatrader, trade |
Themen-Optionen | Thema durchsuchen |
Ansicht | |
|
|