Adaptiver exponentieller gleitender Durchschnittsbereich

Schriftsteller:ChaoZhang, Datum: 2024-02-26 14:58:32
Tags:

img

Übersicht

Diese Strategie verwendet den schnelleren Exponential Hull Moving Average (EHMA) und einen anpassungsfähigen Kanal, um eine Trendfolgestrategie zu erstellen. Da EHMA schneller berechnet, kann es effektiv Preistrendänderungen erkennen und unnötige Trades durch falsche Ausbrüche vermeiden. Gleichzeitig kann der anpassungsfähige Kanal einige Preisschwankungen herausfiltern. Trades werden nur ausgelöst, wenn der Preis durch den Kanal bricht, wodurch die Wahrscheinlichkeit von ineffektiven Trades reduziert und die Rentabilität erhöht wird.

Strategieprinzip

  1. Berechnen Sie den exponentiell gewichteten gleitenden Durchschnitt EHMA basierend auf dem Periode-Parameter.

  2. Nur wenn der Preis über die obere Kanallinie steigt oder unter die untere Kanallinie fällt, gilt der Trend als geändert und Handelssignale werden ausgelöst.

  3. Ermitteln Sie die Preisbeziehung zum Kanal. Long, wenn der Preis die obere Linie durchbricht, short, wenn er die untere Linie durchbricht. Close Long Position, wenn der Preis unter der oberen Linie kreuzt, close short Position, wenn der Preis über der unteren Linie kreuzt.

Analyse der Vorteile

Im Vergleich zu gewöhnlichen gleitenden Durchschnittsstrategien hat diese Strategie folgende Vorteile:

  1. Der EHMA-Algorithmus wird verwendet, um den gleitenden Durchschnitt zu berechnen. Der EHMA reagiert empfindlicher auf Preisänderungen und kann Trendenänderungen effektiv erkennen, um unnötige Trades durch falsche Ausbrüche zu vermeiden.

  2. Der adaptive Kanal kann Preisschwankungen effektiv filtern. Handelssignale werden nur ausgelöst, wenn sich der Preistrend stark verändert hat. Dies könnte einige ineffektive Trades filtern und die Rentabilität verbessern.

  3. Die Breite des Kanals kann flexibel angepasst werden, um sich an verschiedene Marktbedingungen anzupassen. Breitere Kanäle können mehr Schwankungen filtern und die Handelsfrequenz reduzieren. Engere Kanäle können Trendänderungen früher erkennen und die Handelsfrequenz erhöhen.

Risikoanalyse

Diese Strategie birgt auch einige Risiken:

  1. Es ist nicht möglich, falsche Ausbrüche vollständig zu vermeiden. Die Preise können über den Kanal hinaus liegen.

  2. Einige Handelsmöglichkeiten können verpasst werden, wenn der Kanal zu breit ist.

  3. Zu enge Kanäle können zu ineffektiven Geschäften führen.

Optimierungsrichtlinien

Diese Strategie kann in folgenden Aspekten optimiert werden:

  1. Optimieren Sie den Periodenparameter und passen Sie den Berechnungszyklus des gleitenden Durchschnitts an unterschiedliche Produkte und Zeitrahmen an.

  2. Optimieren Sie den RangeWidth-Parameter, passen Sie den Kanalumfang an, basierend auf Marktvolatilität und persönlichen Risikopräferenzen.

  3. Setzen Sie angemessene Stop-Loss-Punkte während der Haltepositionen, um den maximalen Verlust pro Handel effektiv zu kontrollieren.

  4. Kombination mit anderen Indikatoren für die Filterung von Einträgen. Zum Beispiel, Volumen hinzufügen, um falsche Einträge zu reduzieren.

  5. Diversifizieren Sie Strategieanwendungen und optimieren Sie Parameter. Testen und optimieren Sie universelle Parameter für mehr Produkte und Zeitrahmen.

Zusammenfassung

Diese Strategie kombiniert den EHMA-Indikator und den adaptive Kanal-Indikator, um eine Trendfolgestrategie zu bilden. Sie kann Markttrends effektiv identifizieren und Preisschwankungen filtern, um unnötige Trades zu vermeiden. Nach einer Reihe von Parameteroptimierungen und Risikokontrolle können stabile Gewinne über verschiedene Produkte und Zeitrahmen hinweg erzielt werden.


/*backtest
start: 2023-02-25 00:00:00
end: 2024-02-25 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
args: [["v_input_1",1]]
*/

// Credit is due where credit is due:
// Hull Moving Average: developed by Alan Hull
// EHMA: coded by Twitter @borserman
// I've built on their work in an attempt to create a strategy more robust to fake moves
// @0xLetoII

//@version=4
strategy(
  title="EHMA Range Strategy",
  process_orders_on_close=true,
  explicit_plot_zorder=true,
  overlay=true, 
  initial_capital=1500, 
  default_qty_type=strategy.percent_of_equity, 
  commission_type=strategy.commission.percent, 
  commission_value=0.085,
  default_qty_value=100
  )
  

// Position Type
pos_type = input(defval = "Long", title="Position Type", options=["Both", "Long", "Short"])

// Inputs
Period = input(defval=180, title="Length")
RangeWidth = input(defval=0.02, step=0.01, title="Range Width")
sqrtPeriod = sqrt(Period)

// Function for the Borserman EMA
borserman_ema(x, y) =>
    alpha = 2 / (y + 1)
    sum = 0.0
    sum := alpha * x + (1 - alpha) * nz(sum[1])

// Calculate the Exponential Hull Moving Average
EHMA = borserman_ema(2 * borserman_ema(close, Period / 2) - borserman_ema(close, Period), sqrtPeriod)

// Create upper & lower bounds around the EHMA for broader entries & exits
upper = EHMA + (EHMA * RangeWidth)
lower = EHMA - (EHMA * RangeWidth)

// Plots
EHMAcolor = (close > EHMA ? color.green : color.red)
plot(EHMA, color=EHMAcolor, linewidth=2)
plot(lower, color=color.orange, linewidth=2)
plot(upper, color=color.blue, linewidth=2)


// Strategy
long = close > upper
exit_long = close < lower
short = close < lower
exit_short = close > upper


// Calculate start/end date and time condition
startDate  = input(timestamp("2017-01-01T00:00:00"))
finishDate = input(timestamp("2029-01-01T00:00:00"))
 
time_cond  = true


// Entries & Exits
if pos_type == "Both"
    strategy.entry("Long", strategy.long, comment="Long", when=long and time_cond)
    strategy.close("Long", comment="Exit Long", when=exit_long and time_cond)
    strategy.entry("Short", strategy.short, comment="Short", when=short and time_cond)
    strategy.close("Short", comment="Exit Short", when=exit_short and time_cond)
if pos_type == "Long"
    strategy.entry("Long", strategy.long, comment="Long", when=long and time_cond)
    strategy.close("Long", comment="Exit Long", when=exit_long and time_cond)
if pos_type == "Short"
    strategy.entry("Short", strategy.short, comment="Short", when=short and time_cond)
    strategy.close("Short", comment="Exit Short", when=exit_short and time_cond)
    

Mehr