|
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 |
|
|||
Hallo zusammen,
kann mir keiner von den MQL4-Experten helfen?? LG, Michael |
|
|||
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 |
|
|||
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. |
|
|||
Zitat:
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); } } } |
|
|||
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. |
|
|||
Guten Abend traderdoc,
genau DAS hab ich noch nicht bedacht, das war auch der Fehler. Vielen Dank für diesen Hinweis! Lieben Gruß, Michael |
|
|||
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; 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) {... Danke gleich für eure Hilfe! Lieben Gruß, Michael |
|
|||
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:
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 |
|
||||
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
|
Lesezeichen |
Stichworte |
break-even, stop loss nachziehen |
Themen-Optionen | Thema durchsuchen |
Ansicht | |
|
|