Profit Trailing (bei Abschluss) ... wie konvertiert man Tick für Tick?!
23 Antworten
Gaudio Fx
vor 8 Jahren #115026
mikeyc
vor 8 Jahren #136500
//+------------------------------------------------------------------+ /** * Handel verwalten - SL auf Break Even oder Trailing Stop verschieben */ void manageStop() { if(!sqIsBarOpen) return; ... Rest des Codes
Wenn Sie das auskommentieren:
if(!sqIsBarOpen) return;
Zeile als:
// if(!sqIsBarOpen) return;
Dann wird die manageStop-Funktion für jeden Tick ausgeführt, und alle Arten von Stop-Loss-Bewegungen werden bei Bedarf jeden Tick ausgeführt. Dies wird eine viel größere CPU-Last auf dem Computer aber machen.
geektrader
vor 8 Jahren #136504
.... und es wird Ihre Strategie ruinieren. Sie werden sehen, dass in 99% der Fälle das Ausführen einer Strategie mit Trailing per Tick statt per Bar Open (wie sie von SQ erstellt wurde) zu einer negativen Equity-Kurve führt. Das liegt ganz einfach daran, dass die Strategie von SQ mit einem Trailing auf dem Balken gefunden und auf diese Weise erstellt wurde. Wenn Sie das Trailing so beschleunigen, wird sich die gesamte Strategie komplett ändern und Ihnen nichts nützen, aber Sie werden sehen, was ich meine, wenn Sie Ihre Tests im MT4 mit Trailing by tick statt bar open durchführen;)
Gaudio Fx
vor 8 Jahren #136505
//+------------------------------------------------------------------+ /** * Handel verwalten - SL auf Break Even oder Trailing Stop verschieben */ void manageStop() { if(!sqIsBarOpen) return; ... Rest des CodesWenn Sie das auskommentieren:
if(!sqIsBarOpen) return;
Zeile als:
// if(!sqIsBarOpen) return;
Dann wird die manageStop-Funktion für jeden Tick ausgeführt, und alle Arten von Stop-Loss-Bewegungen werden bei Bedarf jeden Tick ausgeführt. Dies wird eine viel größere CPU-Last auf dem Computer aber machen.
Danke für die Antwort mein Freund.. so habe ich Kommentar aus "if(!sqlsBarOpen) return;" mit " // " und das Ergebnis ist diese :
aus diesem Standardcode ...
an diesem :
mikeyc
vor 8 Jahren #136510
Nur die getProfitTrailingByTick Funktion wirkt sich nur dann aus, wenn sie mit einer Anzahl von Pips als Rückgabewert definiert ist (diese Funktion ist leer, also tut sie nichts).
double getProfitTrailingByTick() { if (OrderType() == OP_BUY) { // langer Wert hier } else if (OrderType() == OP_SELL) { // hier kurzer Wert } return(0); }
Die andere Art des Stop-Trailing (die einen oder mehrere Indikatoren verwendet) wird immer noch beim Abschluss nachgezogen, da sich der Indikatorwert nur bei jedem Balken ändert:
double getStopTrailingByClose() { double Wert = 0; if (OrderType() == OP_BUY) { value = iCustom(NULL,0, "Pivots", 0, 0, 15, 0, 0, 0, 0, 0, 0, 1) + (0.8) * (MathAbs(iIchimoku(NULL, 0, 9, 26, 52, MODE_KIJUNSEN, 1) - iMA(NULL, 0, 1872, 0, MODE_LWMA, PRICE_CLOSE, 1))); } else if (OrderType() == OP_SELL) { value = iCustom(NULL,0, "Pivots", 0, 0, 15, 0, 0, 0, 0, 0, 0, 1) + (-0.8) * (MathAbs(iIchimoku(NULL, 0, 9, 26, 52, MODE_KIJUNSEN, 1) - iMA(NULL, 0, 1872, 0, MODE_LWMA, PRICE_CLOSE, 1))); } return(value); }
Gaudio Fx
vor 8 Jahren #136513
Nur die getProfitTrailingByTick Funktion wirkt sich nur dann aus, wenn sie mit einer Anzahl von Pips als Rückgabewert definiert ist (diese Funktion ist leer, also tut sie nichts).
double getProfitTrailingByTick() { if (OrderType() == OP_BUY) { // langer Wert hier } else if (OrderType() == OP_SELL) { // hier kurzer Wert } return(0); }Die andere Art des Stop-Trailing (die einen oder mehrere Indikatoren verwendet) wird immer noch beim Abschluss nachgezogen, da sich der Indikatorwert nur bei jedem Balken ändert:
double getStopTrailingByClose() { double Wert = 0; if (OrderType() == OP_BUY) { value = iCustom(NULL,0, "Pivots", 0, 0, 15, 0, 0, 0, 0, 0, 0, 1) + (0.8) * (MathAbs(iIchimoku(NULL, 0, 9, 26, 52, MODE_KIJUNSEN, 1) - iMA(NULL, 0, 1872, 0, MODE_LWMA, PRICE_CLOSE, 1))); } else if (OrderType() == OP_SELL) { value = iCustom(NULL,0, "Pivots", 0, 0, 15, 0, 0, 0, 0, 0, 0, 1) + (-0.8) * (MathAbs(iIchimoku(NULL, 0, 9, 26, 52, MODE_KIJUNSEN, 1) - iMA(NULL, 0, 1872, 0, MODE_LWMA, PRICE_CLOSE, 1))); } return(value); }
Sorry.. aber nicht durch tick 🙁 ich kompilieren auf diese Weise, aber nicht eine nachlaufende durch tick .. es ist nicht richtig?
mikeyc
vor 8 Jahren #136514
Okay, es ist etwas komplizierter, weil die Funktion manageStop Close[1] als aktuellen Kurs verwendet. Natürlich ändert sich dieser Preis nur jeden Balken, so dass der Stop nur jeden Balken verschoben wird.
//------------------------------ // Gewinn-Trailing auf TICK!!!!! trailingStopValue = getProfitTrailingByTick(); if(trailingStopValue > 0) { if(OrderType() == OP_BUY) { tsLevel = Bid - trailingStopValue; } else { tsLevel = Ask + trailingStopValue; }
Ändern Sie den Code wie oben gezeigt, indem Sie close durch Bid und Ask ersetzen.
Gaudio Fx
vor 8 Jahren #136515
Okay, es ist etwas komplizierter, weil die Funktion manageStop Close[1] als aktuellen Kurs verwendet. Natürlich ändert sich dieser Preis nur jeden Balken, so dass der Stop nur jeden Balken verschoben wird.//------------------------------ // Gewinn-Trailing auf TICK!!!!! trailingStopValue = getProfitTrailingByTick(); if(trailingStopValue > 0) { if(OrderType() == OP_BUY) { tsLevel = Bid - trailingStopValue; } else { tsLevel = Ask + trailingStopValue; }Ändern Sie den Code wie oben gezeigt, indem Sie close durch Bid und Ask ersetzen.
Ich habe in Bid & Ask ändern .. aber nie geändert.. nicht Spur 🙁
mikeyc
vor 8 Jahren #136516
Ich habe diese Änderungen vorgenommen, und das "Trailing by tick" hat funktioniert:
211 2015.08.24 02:45 buy 11 1.00 1.56723 0.00000 0.00000 0.00 9788.26
212 2015.08.24 02:45 ändern 11 1.00 1.56723 1.54657 0.00000 0.00 9788.26
213 2015.08.24 02:50 ändern 11 1.00 1.56723 1.56723 0.00000 0.00 9788.26
214 2015.08.24 02:52 ändern 11 1.00 1.56723 1.56724 0.00000 0.00 9788.26
215 2015.08.24 02:52 ändern 11 1.00 1.56723 1.56725 0.00000 0.00 9788.26
216 2015.08.24 02:52 ändern 11 1.00 1.56723 1.56726 0.00000 0.00 9788.26
217 2015.08.24 02:52 ändern 11 1.00 1.56723 1.56727 0.00000 0.00 9788.26
218 2015.08.24 02:52 ändern 11 1.00 1.56723 1.56728 0.00000 0.00 9788.26
219 2015.08.24 02:53 ändern 11 1.00 1.56723 1.56729 0.00000 0.00 9788.26
220 2015.08.24 02:53 ändern 11 1.00 1.56723 1.56732 0.00000 0.00 9788.26
221 2015.08.24 02:53 ändern 11 1.00 1.56723 1.56734 0.00000 0.00 9788.26
222 2015.08.24 02:53 ändern 11 1.00 1.56723 1.56737 0.00000 0.00 9788.26
223 2015.08.24 02:53 ändern 11 1.00 1.56723 1.56739 0.00000 0.00 9788.26
224 2015.08.24 02:53 ändern 11 1.00 1.56723 1.56740 0.00000 0.00 9788.26
225 2015.08.24 02:56 s/l 11 1,00 1,56740 1,56740 0,00000 10,73 9798,99
Gaudio Fx
vor 8 Jahren #136519
geektrader
vor 8 Jahren #136530
Sie müssen auch die Zeile "if (OrderOpenTime() >= Time[0])..." entfernen, da die Funktion sonst an dieser Stelle beendet wird, solange die Order nicht mindestens 1 Takt lang geöffnet wurde. Es wird also erst 1 Takt nach Eröffnung der Order mit dem Trailing (in Ihrem Fall durch Tick) begonnen. Wenn Sie diese Zeile entfernen, beginnt sie sofort 1 Tick nach der Auftragseröffnung.
Ich sage Ihnen immer noch, dass dies zu nichts führt, was profitabler ist als Ihre ursprüngliche Strategie. Es ist schlimmer, viel schlimmer, wenn die Strategie mit On-Bar-Trailing erstellt wurde. Auf diese Weise machen Sie die gesamte Strategie zunichte, da auch die nächsten Aufträge durch das frühere Schließen der vorherigen Aufträge beeinflusst werden. Es ist der perfekte Weg, um Ihr Geld loszuwerden, das zu tun, aber scheint, dass Sie auf die harte Tour lernen müssen:)
geektrader
vor 8 Jahren #136532
//+------------------------------------------------------------------+ /** * Handel verwalten - SL auf Break Even oder Trailing Stop verschieben */ void manageStop() { //if(!sqIsBarOpen) return; double trailingStopValue, moveSLValue; double orderSL, normalOrderSL, orderOpen; double close = Close[0]; double tsLevel, newSL; for(int i=0; i= Time[0]) continue; // exit, wenn die Order gerade eröffnet wurde //------------------------------ // Gewinn-Trailing beim Schließen trailingStopValue = getProfitTrailingByTick(); if(trailingStopValue > 0) { if(OrderType() == OP_BUY) { tsLevel = close - trailingStopValue; } else { tsLevel = close + trailingStopValue; } orderSL = OrderStopLoss(); normalOrderSL = getNormalSL(orderSL); newSL = getSpecialSL(tsLevel); if(OrderType() == OP_BUY) { if(isSLCorrect(tsLevel) && (orderSL == 0 || normalOrderSL tsLevel) && !doublesAreEqual(orderSL, newSL)) { rettmp = OrderModify(OrderTicket(), OrderOpenPrice(), newSL, OrderTakeProfit(), 0); } } } //-------------------------------------------------------- // Stop-Trailing nach Schluss verwalten trailingStopValue = getStopTrailingByClose(); if(trailingStopValue > 0) { orderOpen = OrderOpenPrice(); orderSL = OrderStopLoss(); normalOrderSL = getNormalSL(orderSL); newSL = getSpecialSL(trailingStopValue); if(OrderType() == OP_BUY) { if(isSLCorrect(trailingStopValue) && (orderSL == 0 || normalOrderSL trailingStopValue) && !doublesAreEqual(orderSL, newSL)) { rettmp = OrderModify(OrderTicket(), OrderOpenPrice(), newSL, OrderTakeProfit(), 0); } } } //-------------------------------------------------------- // SL 2 BE verwalten (nach Tick) moveSLValue = getMoveSLValueByTick(); if(moveSLValue > 0) { orderSL = OrderStopLoss(); normalOrderSL = getNormalSL(orderSL); orderOpen = OrderOpenPrice(); newSL = getSpecialSL(orderOpen); if(OrderType() == OP_BUY) { if(isSLCorrect(orderOpen) && (close - orderOpen >= moveSLValue) && (orderSL == 0 || normalOrderSL = moveSLValue) && (orderSL == 0 || normalOrderSL > orderOpen) && !doublesAreEqual(orderSL, newSL)) { rettmp = OrderModify(OrderTicket(), orderOpen, newSL, OrderTakeProfit(), 0); } } } } } } //+------------------------------------------------------------------+
Dies ist der komplette Code, der zu ersetzen ist, dies wird Ihre Bestellung dann Tick für Tick verfolgen.
Gaudio Fx
vor 8 Jahren #136542
...vielen Dank geektrader 😀 ... ich werde das einmal ausprobieren und dir Bescheid geben
Gaudio Fx
vor 8 Jahren #136545
Gaudio Fx
vor 8 Jahren #136616
geektrader
vor 8 Jahren #136634
NEIN, SQ wird nur Strategien mit Trailing auf BAR CLOSE erstellen, wie bereits mehrfach hier und in anderen Threads erklärt. Das einzige, was Sie tun können, ist ein EA für MT4 zu exportieren, die Trails ON TICK durch Ändern der MQL4-Code in der Art und Weise, die wir es für Sie bereits ein paar Mal in diesem Thread gepostet haben. Dies wird NICHTS an der Tatsache ändern, dass SQ STILL nur Strategien mit Trailing auf Bar schließen nur erstellen wird. Und warum das der Fall ist, wurde auch im Forum (von mir und anderen) ein paar Mal erklärt.