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: 4536
Beiträge: 41167
Benutzer: 6.932
Aktive Benutzer: 232
Links: 80
Wir begrüßen unseren neuesten Benutzer: traderotor
Mit 2.475 Benutzern waren die meisten Benutzer gleichzeitig online (16.01.20 um 22:38).
Neue Benutzer:
vor einem Tag
- traderotor
vor 2 Tagen
- Brummi
vor 4 Tagen
- Fussellien...
vor 4 Tagen
- ZHannes82
vor 4 Tagen
- LigthofGod

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

Empfehlungen

Antwort
 
Themen-Optionen Thema durchsuchen Ansicht
  #11 (permalink)  
Alt 25.06.20
Mitglied
 
Registriert seit: Jun 2020
Beiträge: 33
Michael_ befindet sich auf einem aufstrebenden Ast
Standard

Hallo zusammen,

kann mir keiner von den MQL4-Experten helfen??

LG,
Michael
Mit Zitat antworten
  #12 (permalink)  
Alt 30.06.20
Mitglied
 
Registriert seit: Jun 2020
Beiträge: 33
Michael_ befindet sich auf einem aufstrebenden Ast
Standard

Hallo und guten Abend zusammen,

ich hab den Fehler heute gefunden, es war wieder das Thema mit der 10. oder 11. Nachkommastelle (@traderdoc danke für den Hinweis zuvor!).

Eine letzte Frage zu diesem Thema: Ich ziehe den SL ja per Trailing Stop nach, und zwar zu jeder neuen M1-Kerze. @traderdoc ich weiß auch mittlerweile, warum der Strategietester nur ein einziges Mal den Fehler vorfindet: Und zwar deswegen, weil bei einem Trade der TP bei exakt einem M1-Close stattfindet (auf die Sekunde genau). Obwohl im EA so programmiert, dass er zuerst nach einer Order suchen soll und erst dann den SL bei Bedarf nachzieht, macht der Strategietester es umgekehrt. Er schließt den Trade im TP und will danach direkt nachziehen, gibt aber einen Fehler aus, weil die Order ja bereits geschlossen wurde.

Würde dieser Fehler auch "Live" passieren oder soll ich da was noch ändern am EA?

Danke gleich!

Lieben Gruß,
Michael
Mit Zitat antworten
  #13 (permalink)  
Alt 30.06.20
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.415
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

Das umgeht man, indem immer zuerst nach der Order gefragt (gesucht) wird, wenn z.B. getrailt werden soll. Ist die Order nicht mehr im Kasten der offenen Orders, ja dann braucht (kann) auch nicht mehr getrailt werden.

traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis.
Mit Zitat antworten
  #14 (permalink)  
Alt 01.07.20
Mitglied
 
Registriert seit: Jun 2020
Beiträge: 33
Michael_ befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von traderdoc Beitrag anzeigen
Das umgeht man, indem immer zuerst nach der Order gefragt (gesucht) wird, wenn z.B. getrailt werden soll. Ist die Order nicht mehr im Kasten der offenen Orders, ja dann braucht (kann) auch nicht mehr getrailt werden.

traderdoc
Hallo traderdoc,

naja das ist ja das merkwürdige: Ich frage zuerst mit einer if-Schleife ab, ob die Order noch vorhanden ist, und erst dann frage ich in dieser Schleife, ob der Trailing-Stop notwendig ist.

Hier der Code:

HTML-Code:
if(OrderSelect(LongOrder1,SELECT_BY_TICKET)==true)
   { 
      //Trailing-Stop für LongOrder1:

      static datetime timestamp;
      datetime time = iTime(NULL, PERIOD_M1, 0);                        //Nachziehen des Trailing Stops nur bei jeder neuen M1-Kerze und NICHT jedem Tick!
      if(timestamp != time)
      {
      timestamp = time;

       double norm_iHigh = NormalizeDouble(iHigh(NULL,0,1),1);
                  
       double Initial_SL_Long = (OrderTakeProfit() - OrderOpenPrice()) * SL_Prozent/TP_Prozent1;           //Ursprünglicher SL in Punkten
       double TS_Long_Punkte = Initial_SL_Long * TS_Faktor;                                                //Trailing Stop in Punkten;
       double TS_Long_Kurs = NormalizeDouble(OrderStopLoss() + TS_Long_Punkte,1);

        if(OrderType() == OP_BUY && norm_iHigh > TS_Long_Kurs)
         {
  	     bool TS_Long = OrderModify(OrderTicket(), OrderOpenPrice(), norm_iHigh - TS_Long_Punkte, OrderTakeProfit(), 0);
         }
      }
   }
Mach ich da was falsch?
Mit Zitat antworten
  #15 (permalink)  
Alt 01.07.20
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.415
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

Ja, denn mit SELECT_BY_TICKET sucht man prinzipiell nach der TicketNumber.
Die besitzt sowohl eine offene als auch eine geschlossene Order.
Bei einer offenen Order ist jedoch OrderCloseTime() = 0.
D.h. entweder per SELECT_BY_TICKET und der Abfrage, ob OrderCloseTime() = 0, dann muss die Order noch offen sein oder die Selektion über den Pool der offenen Orders per
SELECT_BY_POS mit MODE_TRADES
Dann werden nur die offenen Orders durchsucht, jedoch unter Benutzung des Index i.

traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis.
Mit Zitat antworten
  #16 (permalink)  
Alt 01.07.20
Mitglied
 
Registriert seit: Jun 2020
Beiträge: 33
Michael_ befindet sich auf einem aufstrebenden Ast
Standard

Guten Abend traderdoc,

genau DAS hab ich noch nicht bedacht, das war auch der Fehler.
Vielen Dank für diesen Hinweis!

Lieben Gruß,
Michael
Mit Zitat antworten
  #17 (permalink)  
Alt vor 4 Wochen
Mitglied
 
Registriert seit: Jun 2020
Beiträge: 33
Michael_ befindet sich auf einem aufstrebenden Ast
Standard

Hallo zusammen,

eine Frage zu diesem Thema hab ich noch: Und zwar errechne ich den ursprünglich gesetzten SL mit folgender Funktion:

Code:
double Initial_SL_Long1 = (OrderTakeProfit() - OrderOpenPrice()) * SL_Prozent/TP_Prozent1;
double Initial_SL_Long2 = (OrderTakeProfit() - OrderOpenPrice()) * SL_Prozent/TP_Prozent2;
Die Variable "Initial_SL_Long" benötige ich für den Trailing Stop.

Jetzt zur Frage: Kann ich den ursprünglichen SL einer Order auch anders rausfinden? Grund ist der, dass ich alle Orders mit einer for-Schleife auswähle und für jede Order checken will, ob nachgezgen werden soll oder nicht. Also mit folgendem Code:

Code:
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true && OrderCloseTime() == 0 && OrderType() == OP_BUY)
               {...
Wichtig dabei (wie vorher schon erwähnt): Es gibt immer 2 Long-Orders, die erste hat einen näheren TP (z.B. 3fache des SL) und die zweite Long-Order einen weiteren TP (z.B. 5fache des SL).

Danke gleich für eure Hilfe!

Lieben Gruß,
Michael
Mit Zitat antworten
  #18 (permalink)  
Alt vor 4 Wochen
Benutzerbild von Indikator-Trading
Mitglied
 
Registriert seit: May 2020
Ort: Bielefeld
Beiträge: 109
Indikator-Trading befindet sich auf einem aufstrebenden Ast
Standard

Ich kenne leider keine Funktion, welche dir den initialen SL ausgeben könnte.

Solange dein EA wirklich immer nur zwei Longorders gleichzeitig behandelt würde ich das einfach über zwei Variablen machen, welche du direkt nach OrderSend() mit dem SL setzt und dann nicht mehr änderst.

Du kannst aber auch einfach den Trailingwert (Punktwert, welchen du vom jeweiligen aktuellen Preis entfernt liegen willst um den SL zu versetzten) speichern und mit dem die neuen Level für deinen SL berechnen.

So würde man eigentlich einen TrailingsStop umsetzen.

Gruß Timo
Mit Zitat antworten
  #19 (permalink)  
Alt vor 4 Wochen
Mitglied
 
Registriert seit: Jun 2020
Beiträge: 33
Michael_ befindet sich auf einem aufstrebenden Ast
Standard

Hallo,

ja so wie du es beschreibst, mach ich den Trailing Stop auch: Ich errechne mir den Punktwert, mit der der SL nachgezogen werden soll. Aber dieser Punktwert ist abhängig vom urpsprünglich gesetzten SL. Als Beispiel: Bei einer Order hab ich einen SL von 30 Punkten, bei einer neuen Order sind es 40 Punkte, und bei einer weiteren sind es 25 Punkte. Und aufgrund der Entfernung zwischen Open Price und Stop Loss errechne ich mir den TP (z.B. 3fache Entfernung + 5fache Entfernung).

Beispiel:
  • Ich kaufe im DAX bei einem Long-Signal 0.7 Lots + 0.3 Lots bei 13.100 Punkten (ich mach immer 2 Orders auf), der SL bei beiden ist bei 13.070. Der TP für den Long1 ist dementsprechend bei 13.190 (3facher SL) und für Long2 bei 13.250 (5facher SL).
  • Angenommen, der Kurs pendelt und es ergibt sich ein weiteres Long-Signal, dann mach ich wieder 2 Longs auf, z.B. bei 13.150. Bei den neuen Orders ist der SL bei 13.100 und daher der TP1 bei 13.250 und 13.350.

Und genau DAS ist der Grund, warum ich die einzelnen Orders ansprechen will bzw. den ursprünglichen SL benötige: Ohne diesen Wert weiß ich nicht, wo ich trailen soll, da ja die Orders einerseits einen unterschiedlich weit entfernten SL in Punkten haben, und andererseits unterschiedlich weit entfernte TPs (TP1 und TP2).

Ist jetzt leider etwas viel Text geworden. Aber gibt's irgendwie die Möglichkeit, wie ich da "richtig" trailen kann?

Lieben Gruß,
Michael
Mit Zitat antworten
  #20 (permalink)  
Alt vor 4 Wochen
Benutzerbild von Indikator-Trading
Mitglied
 
Registriert seit: May 2020
Ort: Bielefeld
Beiträge: 109
Indikator-Trading befindet sich auf einem aufstrebenden Ast
Standard

Umständlich und nicht schön, aber wenn du dir den Initialen SL nicht über Variablen speichern willst, sondern nur über die Order selbst erfahren, dann könntest du auch den Comment dazu nutzen. Dort schreibst du dann den Wert des Initialen SL raus und kannst ihn jederzeit mit OrderComment() auslesen und über eine Konvertierung zu Double nutzen. Gruß Timo
Mit Zitat antworten
Antwort

Lesezeichen

Stichworte
break-even, stop loss nachziehen

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 +2. Es ist jetzt 04:37 Uhr.





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