Adaptive exponentielle gleitende Durchschnittsbereichsstrategie


Erstellungsdatum: 2024-02-26 14:58:32 zuletzt geändert: 2024-02-26 14:58:32
Kopie: 2 Klicks: 650
1
konzentrieren Sie sich auf
1617
Anhänger

Adaptive exponentielle gleitende Durchschnittsbereichsstrategie

Überblick

Die Strategie verwendet eine schnellere Berechnung des Index-linear-gewichteten Durchschnitts (EHMA) und der Adaptive Channel, um eine Trend-Follow-Strategie zu erstellen. Da die EHMA schneller berechnet wird, kann die Trendentwicklung der Preise effektiv erkannt werden, um unnötige Handelssignale durch falsche Durchbrüche zu vermeiden. Die Adaptive Channel filtert jedoch teilweise Preisschwankungen und sendet nur Handelssignale aus, wenn der Preis den Kanal durchbricht, wodurch die Wahrscheinlichkeit für ineffiziente Geschäfte verringert und die Gewinnwahrscheinlichkeit erhöht wird.

Strategieprinzip

  1. Der Index-Linear-Gewogen-Durchschnittswert EHMA wird nach dem Parameter Period berechnet. Die EHMA-Berechnung ist schnell und ermöglicht eine effiziente Verfolgung der Preisentwicklung.

  2. Die EHMA erweitert nach dem Parameter RangeWidth einen Anpassungskanal. Der Trendwechsel wird nur dann als Trendwechsel angesehen, wenn der Preis über der Upper Channel-Linie oder unter der Downer Channel-Linie liegt und ein Handelssignal ausgegeben wird.

  3. Beurteilen Sie die Beziehung zwischen Preis und Kanal. Der Preis ist höher, wenn er in die Kanallinie eintritt, und der Preis ist niedriger, wenn er in die Kanallinie eintritt. Der Preis ist niedriger, wenn er in die Kanallinie eintritt.

Analyse der Stärken

Die Strategie hat folgende Vorteile gegenüber einer gewöhnlichen Moving-Average-Strategie:

  1. Die EHMA-Algorithmen berechnen die Durchschnittswerte. Die EHMA-Algorithmen sind empfindlicher auf Preisveränderungen reagierend und können Trendveränderungen effektiv erkennen, um unnötige Geschäfte durch falsche Durchbrüche zu vermeiden.

  2. Der Adaptive-Kanal kann Preisschwankungen effektiv filtern. Handelssignale werden nur erzeugt, wenn der Preis eine Trendänderung feststellt.

  3. Die Breite des Kanals kann flexibel an unterschiedliche Marktumgebungen angepasst werden. Ein breiter Kanal filtert mehr Schwankungen und reduziert die Handelsfrequenz. Ein schmaler Kanal kann Trends früher erkennen und die Handelsfrequenz erhöhen.

Risikoanalyse

Die Strategie birgt auch folgende Risiken:

  1. Es ist immer noch nicht möglich, einen False-Breakout vollständig zu vermeiden. Die Preise können sich ausbrechen, direkt über oder unter dem Gangband. Die Parameter müssen entsprechend angepasst werden, um das Risiko zu kontrollieren.

  2. Wenn die Kanäle zu breit sind, können einige Handelschancen verpasst werden. Die Kanäle können entsprechend eingeschränkt werden, um die Empfindlichkeit zu erhöhen.

  3. Wenn der Kanal zu eng ist, erhöht sich die Anzahl der ungültigen Transaktionen. Die Kanalbreite kann entsprechend erweitert werden, um die Stabilität zu verbessern.

Optimierungsrichtung

Diese Strategie kann in folgenden Bereichen optimiert werden:

  1. Optimierung des Parameters Period. Die Berechnung der Durchschnittszyklen wird an die Eigenschaften der verschiedenen Sorten und Periodenzellen angepasst.

  2. Optimierung des Parameters RangeWidth. Anpassung des Kanalbereichs an die Marktschwankungen und die persönlichen Risikopräferenzen.

  3. Erhöhung der Stop-Loss-Strategie. Ein angemessener Stop-Loss-Punkt wird bei der Positionshaltung festgelegt, um den maximalen Verlust eines einzelnen Handels effektiv zu kontrollieren.

  4. In Kombination mit anderen Indikatoren filtern Sie die Entries. Zum Beispiel erhöhen Sie den Umsatz und verringern Sie die Ineffizienz der Entries.

  5. Mehrsprachige Anwendungen mit Parameteroptimierung. Über mehrere Sorten und Perioden getestet und allgemeine Parameter optimiert.

Zusammenfassen

Die Strategie integriert EHMA-Indikatoren und Adaptive-Channel-Indikatoren, um eine Trend-Follow-Strategie zu bilden. Sie kann Markttrends effektiv identifizieren und gleichzeitig Preisschwankungen filtern, um unnötige Geschäfte zu vermeiden. Nach einer Reihe von Parameteroptimierungen und Risikokontrollen ist es möglich, stabile Gewinne in mehreren Sorten und Zyklen zu erzielen.

Strategiequellcode
/*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)