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); Variante 1: Code:
if(!(OrderSelect(ticket_long,SELECT_BY_TICKET,MODE_TRADES))) // wenn long Position ausgestoppt wurde Code:
OrderSelect(ticket_long,SELECT_BY_TICKET,MODE_TRADES); 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. |
Alle Zeitangaben in WEZ +2. Es ist jetzt 06:26 Uhr. |
Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
SEO by vBSEO 3.6.1
Powered by vBCMS® 2.7.0 ©2002 - 2024 vbdesigns.de
Copyright ©2009 - 2023 by Expert-Advisor.com - Das Metatrader Forum