Hallo,
eine Frage hätte ich noch, komme nicht ganz klar.
Wenn ich einen dynamischen Stoploss programmieren will, auf Basis eines EMA oder vom ATR… wie schreibe ich das?
Also zum Beispiel:
ifshortonmarket stoploss 20 Punkte über EMA50
iflongonmarket Stoploss 20 Punkte unter EMA50
ATR Stop sollte doch so funktionieren:
set stop ptrailing ATR*x
wie macht man sowas bei einem EMA?
Ema50 (wie jedes MA) ist ein Preis, ein Durchschnitt der Preise, SET STOP LOSS erfordert eine Distanz, die in Preis ausgedrückt wird (wie ATR), SET STOP pLOSS erfordert eine Differenz, die in Pips ausgedrückt wird, es ist dasselbe für Instrumente wie DAX, während es ist Nicht dasselbe gilt für Währungen, bei denen die ATR mit PIPSIZE multipliziert werden müsste, damit letztere korrekt funktionieren.
Da Sie eine Differenz benötigen, ist eine Subtraktion erforderlich. Sie wissen, zu welchem Preis Sie eingegeben haben (oder zu welchem Preis Sie bei ausstehenden Bestellungen eingeben möchten), sodass Sie Ema50 davon abziehen können:
MyStopLoss = abs(EntryPrice - Ema50)
Jetzt behält die Variable MyStopLoss die Differenz zwischen zwei Preisen und kann mit LOSS verwendet werden:
SET STOP LOSS MyStopLoss
Wenn Sie pLOSS bevorzugen, müssen Sie schreiben:
SET STOP pLOSS MyStopLoss * pipsize
Ok, das klingt gut. Werde ich demnächst mal so versuchen.
Danke.
@robertogozzi
könnte ich Ihnen vielleicht eins meiner Systeme zuschicken und Sie sagen mir Ihre Einschätzung dazu?
Ja, du kannst es hier posten. Ich werde es mir nach dem Wochenende ansehen.
@robertogozzi
Hier ein Code von mir mit einer recht guten Performance auf den Dax. Eine Art Scalper durch Ausbruch. Vielleicht hast Du eine Meinung dazu oder einen Vorschlag zur Verbesserung. Ich nutze mehrer Abwandlungen dieses Systems bis jetzt erfolgreich im Livehandel.
Das wäre super.
// Festlegen der Code-Parameter
DEFPARAM CumulateOrders = False // Kumulieren von Positionen deaktiviert
// Verhindert das Platzieren von neuen Ordern zum Markteintritt oder Vergrößern von Positionen vor einer bestimmten Uhrzeit
noEntryBeforeTime = 090000
timeEnterBefore = time >= noEntryBeforeTime
// Verhindert das Platzieren von neuen Ordern zum Markteintritt oder Vergrößern von Positionen nach einer bestimmten Uhrzeit
noEntryAfterTime = 120000
timeEnterAfter = time < noEntryAfterTime
// Verhindert das Trading an bestimmten Wochentagen
daysForbiddenEntry = OpenDayOfWeek = 6 OR OpenDayOfWeek = 0
// Bedingungen zum Einstieg in Long-Positionen
indicator1 = DIplus[14](close)
c1 = (indicator1 CROSSES OVER 30)
indicator2 = SuperTrend[3,10]
c2 = (close > indicator2)
indicator3 = RSI[14](close)
c3 = (indicator3 CROSSES OVER 70)
IF (c1 AND c2 AND c3) AND timeEnterBefore AND timeEnterAfter AND not daysForbiddenEntry THEN
BUY 1 CONTRACT AT MARKET
ENDIF
// Bedingungen zum Einstieg in Short-Positionen
indicator4 = SuperTrend[3,10]
c4 = (close < indicator4)
indicator5 = DIminus[14](close)
c5 = (indicator5 CROSSES OVER 30)
indicator6 = RSI[14](close)
c6 = (indicator6 CROSSES UNDER 30)
IF (c4 AND c5 AND c6) AND timeEnterBefore AND timeEnterAfter AND not daysForbiddenEntry THEN
SELLSHORT 1 CONTRACT AT MARKET
ENDIF
// Stops und Targets
SET STOP pLOSS 90
SET TARGET pPROFIT 16
Bitte verwenden Sie nicht das @ -Zeichen, da es die empfangenen E-Mail-Nachrichten verdoppelt.
Es sollte selten und nur dann verwendet werden, wenn Sie sich auf jemanden unter den vielen beziehen müssen. Dies ist nicht der Fall.
Ich werde morgen einen Blick auf Ihren Code werfen.
Sorry, lag nicht in meiner Absicht.
Wie gesagt, vielleicht haben Sie ein paar Vorschläge zur Verbesserung der Performance.
Ich persönlich bevorzuge es, dass mein Zielgewinn größer ist als mein Stop-Loss. Deshalb habe ich Ihre beiden letzten Zeilen durch Folgendes ersetzt:
SET STOP pLOSS 70 //90
SET TARGET pPROFIT 15 //16
dann habe ich Nicolas ‘Trailing Stop-Code am Ende (nach den beiden vorhergehenden Zeilen) hinzugefügt ( https://www.prorealcode.com/blog/trading/complete-trailing-stop-code-function/ ):
//************************************************************************
//trailing stop function
trailingstart = 10 //10 trailing will start @trailinstart points profit
trailingstep = 10 //10 trailing step to move the "stoploss"
//reset the stoploss value
IF NOT ONMARKET THEN
newSL=0
ENDIF
//manage long positions
IF LONGONMARKET THEN
//first move (breakeven)
IF newSL=0 AND close-tradeprice(1)>=trailingstart*pipsize THEN
newSL = tradeprice(1)+trailingstep*pipsize
ENDIF
//next moves
IF newSL>0 AND close-newSL>=trailingstep*pipsize THEN
newSL = newSL+trailingstep*pipsize
ENDIF
ENDIF
//manage short positions
IF SHORTONMARKET THEN
//first move (breakeven)
IF newSL=0 AND tradeprice(1)-close>=trailingstart*pipsize THEN
newSL = tradeprice(1)-trailingstep*pipsize
ENDIF
//next moves
IF newSL>0 AND newSL-close>=trailingstep*pipsize THEN
newSL = newSL-trailingstep*pipsize
ENDIF
ENDIF
//stop order to exit the positions
IF newSL>0 THEN
SELL AT newSL STOP
EXITSHORT AT newSL STOP
ENDIF
und führen Sie es von einem 1-Minuten-DAX-Chart mit 100K-Balken aus.
Ich habe TP, SL und Trailing Stop optimiert. Sie können Ihre eigenen Tests machen und “walk forward”.
Wenn Sie der Meinung sind, dass es in Ordnung ist, können Sie es 6-12 Monate lang auf Ihrem Demokonto ausführen, bevor Sie entscheiden, ob es sich lohnt, es zu behalten oder in den Papierkorb zu werfen. Viel Spaß beim Handeln!
Super, danke für Ihre Arbeit.
Natürlich sieht man jetzt das der Scalper auf den Uptrend der letzten Wochen zugeschnitten ist. Indem ich die Periodenlänge vom RSI anpasse, würden jetzt in der momentanen Schiebezone vom DAX und des zu erwartenden Downtrends die Ergebnisse weiter verbessert werden können.
Macht das Sinn? Oder sollte man so einen Code lieber allgemein halten und ihn nicht ständig der Marktlage angleichen?
Normalerweise passe ich es regelmäßig an, es hängt von deiner TF ab. Auf einem 1-Minuten-Chart optimiere ich meinen Code normalerweise etwa einmal im Monat oder alle zwei Wochen neu. Bei einem höheren TF können Sie dies etwa alle zwei Monate tun.
Es ist immer eine persönliche Entscheidung, hauptsächlich basierend auf Erfahrung und Tests.
Ich bin ja noch relativ neu in dem Thema.
Aufgrund Ihrer Erfahrung, sollte man einen 1 minute code etwa einmal im Monat mit allen Werten optimieren oder nur Stop und Target?
Alle Werte, meiner Meinung nach.
Hallo,
ich komme mit der Zuweisung von entryprice nicht zurecht.
MyStopLoss = abs(EntryPrice - Ema50)
Wie muss ich entryprice zuweisen damit ich das in der Art als Stop nutzen kann?