Momentum-Breakout-Strategie

Schriftsteller:ChaoZhang, Datum: 2023-11-14 11:19:05
Tags:

img

Übersicht

Diese Strategie verwendet Bollinger-Bänder in Kombination mit ATR-Indikator und EMA-Linien, um Signale zu bestimmen. Es erzeugt Kaufsignale, wenn der Preis durch das obere Bollinger-Band bricht und schnell über die EMA-Linie geht. Es erzeugt Verkaufssignale, wenn der Preis durch das untere Bollinger-Band bricht und schnell unter die EMA-Linie geht.

Strategie Logik

  1. Berechnen Sie Bollinger-Mitte, Oberband und Unterband. Mittellinie ist n-Periode SMA, Oberband ist Mittellinie + mStandardabweichung für n-Perioden, unterer Band ist Mittellinie - mStandardabweichung für n Perioden.

  2. Berechnung des ATR-Indikators zur Verfolgung von Stop-Loss.

  3. Berechnen Sie EMA-Linien für einen Zeitraum und für n Perioden, um die Kursdynamik zu bestimmen.

  4. Wenn der Preis schnell über das obere Bollinger-Band und die EMA-Linie geht, wird ein Kaufsignal generiert.

  5. Wenn der Preis schnell unterhalb des unteren Bollingerbands und der EMA-Linie fällt, wird ein Verkaufssignal generiert.

  6. Der ATR-Indikator setzt Stop-Loss-Punkte und verfolgt die Kursrichtung, um nicht gefangen zu werden.

Analyse der Vorteile

  1. Bollinger-Bänder in Kombination mit ATR-Stop-Loss können das Risiko wirksam kontrollieren.

  2. Schnelle und langsame EMA-Linien bestimmen die Bewegungsrichtung und verhindern einen falschen Ausbruch.

  3. Einstellbare Parameter eignen sich für verschiedene Marktumgebungen.

  4. Übersichtliche Kauf-/Verkaufssignale mit hoher Handelsfrequenz, geeignet für den kurzfristigen Handel.

  5. Der ATR-Indikator verfolgt den Stop-Loss rechtzeitig.

Risikoanalyse

  1. Schmaler Bollinger-Band-Bereich kann zu lauten Trades führen.

  2. Die Einstellung des ATR-Parameters zu klein kann zu einem zu engen Stoppverlust führen, wodurch man eingeschlossen wird.

  3. Die EMA-Parameter müssen an unterschiedliche Zykluswirkungen angepasst werden.

  4. Ein schwankender Markt kann mehr Trades erzeugen, Vorsicht geboten.

  5. Das Verfolgen von Stop Loss kann manchmal zu aggressiv sein und zu einer Verlusterweiterung führen.

Optimierung

  1. Kombination mit anderen Indikatoren, um Handelssignale zu filtern, z. B. RSI für Überkauf/Überverkauf, KDJ für Divergenz usw.

  2. Es sollte in Betracht gezogen werden, die Bollinger-Parameter dynamisch an ATR anzupassen, damit sie den Kursschwankungen entsprechen.

  3. Versuche verschiedene EMA-Zyklusparameter für die beste Parameterkombination.

  4. Intelligente Anpassung der ATR-Parameter basierend auf der Volatilität, um einen aggressiven Stop-Loss zu vermeiden.

  5. Überlegen Sie, Deep Learning-Modelle zu integrieren, um die Kauf-/Verkaufsentscheidungen zu unterstützen.

Zusammenfassung

Diese Strategie hat eine klare Logik, die Bollinger-Bänder zur Erfassung des Preisbruchs, ATR zur Einstellung des Stop-Loss-Bereichs, EMA zur Bestimmung der Momentumrichtung für ein umfassendes Urteil über den Momentumbruch verwendet, das kurzfristige Preistrends effektiv erfassen kann. Die Kombination mehrerer Indikatoren für ein umfassendes Urteil kann die Signalqualität verbessern. Es gibt noch Raum für Optimierung durch Parameter-Tuning, Indikatorenkombinationen usw., um diese Strategie für mehr Stabilität und Elastizität weiter zu verfeinern.


/*backtest
start: 2022-11-07 00:00:00
end: 2023-11-13 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy(title="UT Bot Strategy", overlay = true)
//CREDITS to HPotter for the orginal code. The guy trying to sell this as his own is a scammer lol. 
// Inputs
a = input(1,     title = "Key Vaule. 'This changes the sensitivity'")
c = input(10,    title = "ATR Period")
h = input(false, title = "Signals from Heikin Ashi Candles")

src = h ? security(heikinashi(syminfo.tickerid), timeframe.period, close, lookahead = false) : close

length = input(20, minval=1)
mult = input(2.0, minval=0.001, maxval=50, title="StdDev")
basis = sma(src, length)
dev = mult * stdev(src, length)
upper = basis + dev
lower = basis - dev
bbr = (src - lower)/(upper - lower)
// plot(bbr, "Bollinger Bands %B", color=#26A69A)
// band1 = hline(1, "Overbought", color=#787B86, linestyle=hline.style_dashed)
// hline(0.5, "Middle Band", color=color.new(#787B86, 50))
// band0 = hline(0, "Oversold", color=#787B86, linestyle=hline.style_dashed)
// fill(band1, band0, color=color.rgb(38, 166, 154, 90), title="Background")








xATR  = atr(c)
nLoss = a * xATR




xATRTrailingStop = 0.0
xATRTrailingStop := iff(src > nz(xATRTrailingStop[1], 0) and src[1] > nz(xATRTrailingStop[1], 0), max(nz(xATRTrailingStop[1]), src - nLoss),
   iff(src < nz(xATRTrailingStop[1], 0) and src[1] < nz(xATRTrailingStop[1], 0), min(nz(xATRTrailingStop[1]), src + nLoss), 
   iff(src > nz(xATRTrailingStop[1], 0), src - nLoss, src + nLoss)))
 
pos = 0   
pos :=	iff(src[1] < nz(xATRTrailingStop[1], 0) and src > nz(xATRTrailingStop[1], 0), 1,
   iff(src[1] > nz(xATRTrailingStop[1], 0) and src < nz(xATRTrailingStop[1], 0), -1, nz(pos[1], 0))) 
   
xcolor = pos == -1 ? color.red: pos == 1 ? color.green : color.blue 

ema   = ema(src,1)
emaFast   = ema(src,144)
emaSlow   = ema(src,576)
sma       =  sma(src, c)

above = crossover(ema, xATRTrailingStop)
below = crossover(xATRTrailingStop, ema)

smaabove = crossover(src, sma)
smabelow = crossover(sma, src)


buy  = src > xATRTrailingStop and above and (bbr>20  or bbr<80)
sell = src < xATRTrailingStop and below  and  (bbr>20  or bbr<80)

// buy  = src > xATRTrailingStop 
// sell = src < xATRTrailingStop 


barbuy  = src > xATRTrailingStop 
barsell = src < xATRTrailingStop 

// plot(emaFast , color = color.rgb(243, 206, 127), title="emaFast")

plot(xATRTrailingStop, color = color.rgb(233, 233, 232), title="xATRTrailingStop")

plotshape(buy,  title = "Buy",  text = 'Buy',  style = shape.labelup,   location = location.belowbar, color= color.green, textcolor = color.white, transp = 0, size = size.tiny)
plotshape(sell, title = "Sell", text = 'Sell', style = shape.labeldown, location = location.abovebar, color= color.red,   textcolor = color.white, transp = 0, size = size.tiny)


// plotshape(buy,  title = "Sell",  text = 'Sell',  style = shape.labelup,   location = location.belowbar, color= color.green, textcolor = color.white, transp = 0, size = size.tiny)
// plotshape(sell, title = "buy", text = 'buy', style = shape.labeldown, location = location.abovebar, color= color.red,   textcolor = color.white, transp = 0, size = size.tiny)

barcolor(barbuy  ? color.green : na)
barcolor(barsell ? color.red   : na)

// strategy.entry("short",   false, when = buy)
// strategy.entry("long ", true, when = sell)


strategy.entry("long",   true, when = buy)
strategy.entry("short ", false, when = sell)

Mehr