Trend nach Strategie basierend auf Entfernung mit Trailing Stop Loss

Schriftsteller:ChaoZhang, Datum: 15.11.2023
Tags:

img

Übersicht

Diese Strategie nutzt den Distance Close Bars (DCB) Indikator, um den Preistrend und den schnellen RSI Indikator als Filter zu bestimmen, implementiert einen Trailing Stop Loss für den Trend nach dem Handel.

Grundsätze

  1. Berechnen Sie lastg und lastr, die den letzten grünen und letzten roten Schlusspunkt darstellen.

  2. Berechnet dist als Differenz zwischen lastg und lastr.

  3. Berechnen Sie die Adist als 30-Perioden-SMA von dist.

  4. Erzeugen Sie ein Handelssignal, wenn die Dist mehr als das 2-fache der Adist beträgt.

  5. Verwenden Sie den schnellen RSI-Indikator, um das Signal zu filtern, um einen falschen Ausbruch zu vermeiden.

  6. Eintritt der Handel zu einem festen Anteil am Eigenkapital, wenn das Signal keine Position aufweist.

  7. Martingale nach dem Verlust.

  8. Schließung einer Position, wenn ein Stop-Loss oder ein Take-Profit ausgelöst wird.

Vorteile

  1. Der DCB-Indikator erfasst effektiv mittelfristige und langfristige Trends.

  2. Der schnelle RSI-Filter vermeidet Verluste durch falsche Ausbrüche.

  3. Ein Trailing-Stop verringert die Gewinne und kontrolliert die Risiken.

  4. Martingale erhöht die Position nach Verlust für einen höheren Gewinn.

  5. Vernünftige Parameter-Einstellungen eignen sich für verschiedene Marktumgebungen.

Risiken

  1. DCB kann falsche Signale erzeugen, braucht andere Filter.

  2. Martingale kann Verluste vergrößern, erfordert ein strenges Risikomanagement.

  3. Eine unsachgemäße Einstellung des Stop-Loss kann zu einem übermäßigen Verlust führen.

  4. Die Positionsgröße sollte begrenzt sein, um eine übermäßige Hebelwirkung zu vermeiden.

  5. Falsche Vertragseinstellungen können zu großen Verlusten auf dem Extremmarkt führen.

Optimierung

  1. Optimieren Sie die DCB-Parameter für die beste Kombination.

  2. Versuchen Sie andere Indikatoren, um den schnellen RSI-Filter zu ersetzen.

  3. Optimieren Sie den Stop-Loss und nehmen Sie Profit für eine höhere Gewinnrate.

  4. Optimieren Sie die Martingale-Parameter, um das Risiko zu reduzieren.

  5. Test auf verschiedenen Produkten für eine optimale Vermögensallokation.

  6. Verwenden Sie maschinelles Lernen, um Parameter dynamisch zu optimieren.

Zusammenfassung

Dies ist eine allgemeine ausgereifte Trendfolgestrategie. DCB bestimmt die Trendrichtung und filtert schnelle RSI-Signale, um falsche Einträge zu vermeiden. Stop-Loss und Take-Profit kontrollieren effektiv Einzelhandelsverluste. Aber es gibt immer noch Risiken, Parameter müssen weiter optimiert werden, um das Risiko zu reduzieren und die Stabilität zu verbessern. Die Logik ist klar und leicht zu verstehen, geeignet für mittelfristige Trendhändler.


/*backtest
start: 2023-11-07 00:00:00
end: 2023-11-14 00:00:00
period: 3m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Noro
//2018

//@version=2
strategy(title = "Noro's Distance Strategy v1.0", shorttitle = "Distance str 1.0", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 10)

//Settings 
needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
usemar = input(true, defval = true, title = "Use Martingale")
capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Capital, %")
usersi = input(true, defval = true, title = "Use RSI-Filter")
periodrsi = input(7, defval = 7, minval = 2, maxval = 50, title = "RSI Period")
limitrsi = input(30, defval = 30, minval = 1, maxval = 50, title = "RSI Limit")
fromyear = input(2018, defval = 2018, minval = 1900, maxval = 2100, title = "From Year")
toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year")
frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month")
tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month")
fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day")
today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day")

//Fast RSI
fastup = rma(max(change(close), 0), periodrsi)
fastdown = rma(-min(change(close), 0), periodrsi)
fastrsi = fastdown == 0 ? 100 : fastup == 0 ? 0 : 100 - (100 / (1 + fastup / fastdown))

//Distance
bar = close > open ? 1 : close < open ? -1 : 0
lastg = bar == 1 ? close : lastg[1]
lastr = bar == -1 ? close : lastr[1]
dist = lastg - lastr
adist = sma(dist, 30)
plot(lastg, linewidth = 3, color = lime)
plot(lastr, linewidth = 3, color = red)
up = bar == -1 and dist > adist * 2
dn = bar == 1 and dist > adist * 2

//RSI Filter
rsidn = fastrsi < limitrsi or usersi == false
rsiup = fastrsi > 100 - limitrsi or usersi == false

//Signals
up1 = up and rsidn
dn1 = dn and rsiup
exit = ((strategy.position_size > 0 and close > open) or (strategy.position_size < 0 and close < open))

//Arrows
plotarrow(up1 ? 1 : na, colorup = blue, colordown = blue)
plotarrow(dn1 ? -1 : na, colorup = blue, colordown = blue)

//Trading
profit = exit ? ((strategy.position_size > 0 and close > strategy.position_avg_price) or (strategy.position_size < 0 and close < strategy.position_avg_price)) ? 1 : -1 : profit[1]
mult = usemar ? exit ? profit == -1 ? mult[1] * 2 : 1 : mult[1] : 1
lot = strategy.position_size == 0 ? strategy.equity / close * capital / 100 * mult : lot[1]

signalup = up1
if signalup
    if strategy.position_size < 0
        strategy.close_all()
        
    strategy.entry("long", strategy.long, needlong == false ? 0 : lot, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))

signaldn = dn1
if signaldn
    if strategy.position_size > 0
        strategy.close_all()
        
    strategy.entry("Short", strategy.short, needshort == false ? 0 : lot, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))
    
if time > timestamp(toyear, tomonth, today, 23, 59) or exit
    strategy.close_all()

Mehr