EMA-Prozentsatzkanal mit Bollinger-Band-Range-Handelsstrategie

Schriftsteller:ChaoZhang, Datum: 2023-11-13 17:38:01
Tags:

img

Übersicht

Diese Strategie basiert auf der Auswahl einer EMA und einem definierten Prozentsatzkanal durch den Benutzer. Es geht lang, wenn der Preis unterhalb des oberen Bandes liegt, und kurz, wenn der Preis über dem unteren Band liegt. Wenn der Preis einen Trend beginnt und sich außerhalb des Kanals bewegt, werden alle Positionen geschlossen, um Verluste zu vermeiden.

Für Trendmärkte sollte stattdessen der Schwesterkanal EMA Percentage Channel with Bollinger Band Trend Trading Strategy verwendet werden.

Grundsätze

  1. Berechnen Sie die 200-Perioden-EMA als Basis-EMA.

  2. Die oberen und unteren Bands werden anhand des vom Benutzer definierten Prozentsatzes berechnet: Der Wert der Verbriefung wird durch die Verbriefung der Verbriefungskapazität ermittelt. Unterer Bereich = EMA * (1 - Prozent)

  3. Berechnen Sie die 20-Perioden-Bollinger-Bänder, um den Kanalbereich darzustellen.

  4. Gehen Sie lang, wenn der Schlusskurs den unteren Bollinger Band von unten überschreitet. Gehen Sie kurz, wenn der Schlusskurs den oberen Bollinger Band von oben überschreitet.

  5. Verwenden Sie ATR zur Berechnung des Stop-Loss, um übermäßige Verluste zu vermeiden.

  6. Wenn sich der Preis außerhalb des definierten Prozentsatzkanalbereichs bewegt, schließen Sie alle Positionen, um weitere Verluste zu vermeiden.

Vorteile

  1. Die EMA-Baseline hilft, Trendumkehrpunkte besser zu erfassen.

  2. Der Prozentsatzkanal legt eine angemessene Handelsspanne fest, um einen Überhandel zu vermeiden.

  3. Die Bollinger-Bänder bieten Unterstützung und Widerstand, um den Eintrittszeitpunkt zu erleichtern.

  4. Der ATR-Trailing-Stop setzt den Stop-Loss dynamisch ein, um das Handelsrisiko effektiv zu kontrollieren.

  5. Alle Positionen zu schließen, wenn der Preis den Kanal überschreitet, kontrolliert schnell Verluste.

  6. Die anpassbaren Parameter sind flexibel für unterschiedliche Marktbedingungen.

Risiken

  1. Ein zu breiter Kanalbereich kann Trends verpassen oder den Stoppverlust verzögern.

  2. Eine zu enge Kanalbreite kann zu Überhandelungen führen und die Transaktionskosten erhöhen.

  3. Schlechte Bollinger Bands-Einstellungen können zu verpassten Handelsmöglichkeiten führen.

  4. Eine zu locker gesetzte Stop-Loss-Schwelle kann zu übermäßigen Verlusten pro Handel führen.

  5. Die Parameter müssen optimiert werden, um den optimalen Handelsbereich zu finden.

Optimierungsrichtlinien

  1. Versuche verschiedene EMA-Perioden, um den am besten geeigneten gleitenden Durchschnitt zu finden.

  2. Optimieren Sie die prozentualen Kanalparameter, um den optimalen Kanalbereich zu bestimmen.

  3. Anpassung der Bollinger-Bänder-Periode, um die Volatilität besser zu erfassen.

  4. Sie müssen die ATR-Periode und den Multiplikator einstellen, um die Stop-Loss-Strategie weiter zu verfeinern.

  5. Testen Sie Long-only über EMA-Bedingungen oder Short-only unter EMA-Bedingungen und sehen Sie, ob dies die Gewinnrate verbessert.

  6. Einbeziehung von Trendindikatoren, um festzustellen, ob ein vorzeitiger Austritt erforderlich ist.

Schlussfolgerung

Diese Strategie kombiniert die Stärken von gleitenden Durchschnitten, Kanälen, Volatilität und mehr, um ein relativ stabiles Range-Trading-System zu schaffen. Der Schlüssel besteht darin, die am besten geeigneten Parameter-Einstellungen für jeden bestimmten Markt zu finden, um Risiko und Gewinn auszugleichen. Zukünftige Verbesserungen können Regeln und Parameter weiter optimieren oder mit Trendstrategien kombinieren.


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

//@version=4
strategy(title="[mdeacey] EMA% Channel + BB Range Strategy", shorttitle="[mdeacey] EMA% Channel + BB Range Strategy", overlay=true)

//EMA 200

len = input(title="EMA Length", type=input.integer, defval=200)
srce = input(title="EMA Source", type=input.source, defval=close)

ema1= ema(srce,len)

percent = input(title="Channel Percentage (%)", type=input.float, defval= 1) 
valuee = (percent*ema1)/100
upperbande = ema1 + valuee
lowerbande = ema1 - valuee


plot(ema1, title='EMA200', color=color.gray, linewidth=1, style=plot.style_line )
plot(upperbande, title='EMA Upper Band', color=color.gray, linewidth=1, style=plot.style_line )
plot(lowerbande, title='EMA Lower Band', color=color.gray, linewidth=1, style=plot.style_line )

length = input(20, minval=2)
src = input(close, title="Close price")
mult = input(2.0, minval=0.001, maxval=50)

MA2 = sma(src, length)
dev = mult * stdev(src, length)
upper = MA2 + dev
lower = MA2 - dev

signalColor = crossunder(close, upper) ? color.red : crossover(close, lower) ? color.green : color.white

barcolor(color=signalColor)


upperBand = plot(upper, color=color.gray, linewidth=1)
lowerBand = plot(lower, color=color.gray, linewidth=1)
fill(upperBand, lowerBand,color=color.gray)
strategy.entry("Long",true,when = crossover(close,lower)  and close <upperbande and close>lowerbande)
strategy.close("Long",when = crossunder(close,lowerbande))
strategy.entry("Short",false,when = crossunder(close,upper)  and close <upperbande and close>lowerbande)
strategy.close("Short",when = crossover(close,upperbande))

//Inputs
atrPeriod = input(defval=14, title="ATR Period",group='ATR Settings', type=input.integer) // Adjust this to change the ATR calculation length
multiplierPeriod = input(defval=1.75, title="ATR Multiplier Period",group='ATR Settings',  type=input.float)// Adjust this to change the distance between your candles and the line

//ATR Calculation
pine_rma(x, y) =>
    alpha = y
    sum = 0.0
    sum := (x + (alpha - 1) * nz(sum[1])) / alpha

true_range() =>
    max(high - low, max(abs(high - close[1]), abs(low - close[1])))

//Long SL
plot(low - pine_rma(true_range() * multiplierPeriod, atrPeriod), "Long Stop", color=color.red, offset = 1)
// Short SL
plot(high +pine_rma(true_range() * multiplierPeriod, atrPeriod), "Short Stop", color=color.red, offset = 1)
strategy.exit("Exit Long","Long",limit=upper ,stop = low - pine_rma(true_range() * multiplierPeriod, atrPeriod)  )
strategy.exit("eExit Short","Short",limit=lower ,stop =high +pine_rma(true_range() * multiplierPeriod, atrPeriod)  )


Mehr