Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools
Zurück   Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools > Metatrader 4 > Programmierung MQL4

Programmierung MQL4 Hier gehts rund ums Programmieren in MQL4.

Login
Benutzername:
Kennwort:


Statistik
Themen: 4973
Beiträge: 43252
Benutzer: 7.219
Aktive Benutzer: 81
Links: 84
Wir begrüßen unseren neuesten Benutzer: Hopfen&Malz
Mit 2.475 Benutzern waren die meisten Benutzer gleichzeitig online (16.01.20 um 22:38).
Neue Benutzer:
vor einem Tag
- Hopfen&Mal...
vor 2 Tagen
- frankmicha...
vor einer Woche
- DFeck
vor einer Woche
- bb1107
vor 2 Wochen
- rg-trader

Onlineuser
'Wer ist online' anzeigen Benutzer: 0
Gäste: 243
Gesamt: 243
Team: 0
Team:  
Benutzer:  
Freunde anzeigen

Empfehlungen

Thema geschlossen
 
Themen-Optionen Thema durchsuchen Ansicht
  #1 (permalink)  
Alt 20.09.12
Neues Mitglied
 
Registriert seit: Sep 2012
Beiträge: 10
MarkusW befindet sich auf einem aufstrebenden Ast
Standard 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());
            }
Ich habe jetzt auf zwei wegen versucht herauszufinden, ob die jeweilige Position noch offen ist, oder ob sie bereits geschlossen wurde. Hier am beispiel der long Position:

Variante 1:
Code:
if(!(OrderSelect(ticket_long,SELECT_BY_TICKET,MODE_TRADES)))  // wenn long Position ausgestoppt wurde
         {
            Print("!! Long Position Ausgestoppt !!");
         }
Variante 2:

Code:
OrderSelect(ticket_long,SELECT_BY_TICKET,MODE_TRADES);
         closeTime=OrderCloseTime();
         
         if (closeTime!=0)
         {
            Print("!! Long Position Ausgestoppt !!");
         }
So bei Variante 1 sagt er immer die Position währe geschlossen, auch wenn sie offen ist.

Bei Variante 2 erkennt er nicht das sie geschlossen wurde.

Was mache ich falsch ?
  #2 (permalink)  
Alt 24.09.12
Mitglied
 
Registriert seit: Dec 2009
Beiträge: 96
Programmierer befindet sich auf einem aufstrebenden Ast
Standard

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.
  #3 (permalink)  
Alt 24.09.12
Neues Mitglied
 
Registriert seit: Sep 2012
Beiträge: 10
MarkusW befindet sich auf einem aufstrebenden Ast
Standard

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.
  #4 (permalink)  
Alt 24.09.12
Mitglied
 
Registriert seit: Dec 2009
Beiträge: 96
Programmierer befindet sich auf einem aufstrebenden Ast
Standard

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.
Thema geschlossen

Lesezeichen

Stichworte
ausgestoppt, close, mql4, order, programmierung, programmierung metatrader, trade

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are aus
Pingbacks are aus
Refbacks are aus




Alle Zeitangaben in WEZ +1. Es ist jetzt 12:04 Uhr.





Suchmaschine - Reisen - Wavesnode - Facebook Forum - Spam Firewall
-----------------------------------------------------------------------------------------------------------------------------
Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Powered by vBCMS® 2.7.0 ©2002 - 2024 vbdesigns.de
SEO by vBSEO 3.6.1
Copyright ©2009 - 2023 by Expert-Advisor.com - Das Metatrader Forum
MetaTrader bzw. MetaTrader 4 und MetaTrader 5 sind eingetragene Marken der MetaQuotes Software Corp.
-----------------------------------------------------------------------------------------------------------------------------