Strategie für den Crossover-Handel mit gleitendem Durchschnitt

Schriftsteller:ChaoZhang, Datum: 2024-01-24 14:59:44
Tags:

img

Übersicht

Die gleitende Durchschnitts-Crossover-Handelsstrategie ist eine relativ verbreitete quantitative Handelsstrategie. Diese Strategie erzeugt Handelssignale, indem sie gleitende Durchschnitte verschiedener Perioden und entsprechend ihren Crossover-Situationen berechnet. Insbesondere berechnet sie die exponentiellen gleitenden Durchschnitte (EMA) von 4 Perioden, 8 Perioden und 20 Perioden. Wenn die kurzfristige EMA über die langfristige EMA überschreitet, gehen Sie lang; wenn die kurzfristige EMA unter die langfristige EMA überschreitet, gehen Sie kurz.

Strategie Logik

Die Kernlogik dieser Strategie lautet:

  1. Berechnen Sie die EMA-Linien von 4 Perioden, 8 Perioden und 20 Perioden.
  2. Beurteilen Sie die Beziehung zwischen der 4-Perioden-EMA-Linie und der 8-Perioden-EMA-Linie:
    1. Wenn die 4-Perioden-EMA-Linie über die 8-Perioden-EMA-Linie kreuzt, bedeutet dies, dass sich der Kurstrend stärkt, was ein bullisches Signal ist.
    2. Wenn die 4-Perioden-EMA unter die 8-Perioden-EMA fällt, bedeutet dies, dass sich der Kurstrend abschwächt, was ein bärisches Signal ist.
  3. Beurteilen Sie gleichzeitig die Richtung der 20-Perioden-EMA-Linie:
    1. Wenn die 20-Perioden-EMA-Linie nach oben geht, dann geben Sie Long ein.
    2. Wenn die 20-Perioden-EMA-Linie nach unten geht, geben Sie Short ein.
  4. Wenn sich die Beziehung zwischen der 4-Perioden-EMA-Linie und der 8-Perioden-EMA-Linie umkehrt, bereiten Sie den Ausgang vor.
  5. Wenn sich die Richtung der 20-Perioden-EMA-Linie umkehrt, verlassen Sie jetzt.

Durch diese Methode nutzen wir das Crossover zwischen verschiedenen Perioden gleitenden Durchschnitten, um Marktsignale zu beurteilen, und verwenden die Richtung des längsten Perioden gleitenden Durchschnitts, um falsche Signale zu filtern und eine stabile Handelsstrategie zu konstruieren.

Vorteile der Strategie

Die wichtigsten Vorteile dieser Strategie sind:

  1. Die Strategielogik ist einfach und klar, leicht verständlich und umsetzbar.
  2. Die doppelte Zustandsfilterung kann falsche Signale reduzieren.
  3. Die Erhöhung der 20-Perioden-EMA kann wichtige Trends erkennen und die Stabilität verbessern.
  4. Anpassbare Parameter zur Anpassung der Handelsfrequenz.
  5. Einfach mit anderen Indikatoren oder Modellen zu kombinieren, um komplexe Strategien zu entwickeln.

Risiken der Strategie

Diese Strategie birgt auch einige Risiken:

  1. Doppelte gleitende Durchschnittsstrategien neigen dazu, falsche Signale zu erzeugen.
  2. Festgelegte Zeiträume können sich nicht an Marktveränderungen anpassen.
  3. Bei Marktschwankungen kann man leicht Verluste verursachen.

Die wichtigsten Lösungen sind:

  1. Die Haltedauer entsprechend verkürzen und den Verlust rechtzeitig stoppen.
  2. Dynamische Optimierung der Parameter und Anpassung der gleitenden Durchschnittsperioden.
  3. Kombination mit anderen Indikatoren oder Modellen zur Erstellung komplexer Strategien.

Optimierungsrichtlinien

Die Strategie kann in folgenden Aspekten optimiert werden:

  1. Periodenoptimierung: Bestimmung der optimalen Kombination von MA-Perioden für verschiedene Sorten.

  2. Stop-Loss-Optimierung: Grundsätzliche Festlegung von Stop-Loss-Punkten zur Kontrolle einzelner Verluste.

  3. Parameteroptimierung: Dynamische Optimierung von Parametern mit Hilfe von genetischen Algorithmen, Markov-Ketten usw.

  4. Modellfusion: Integration mit LSTM, RNN und anderen Deep-Learning-Modellen, um mehr Alpha zu extrahieren.

  5. Optimierung des Portfolios: Kombination mit anderen Strategien für technische Indikatoren zur Erstellung von Strategieportfolios.

Zusammenfassung

Im Allgemeinen ist die gleitende Durchschnitts-Crossover-Strategie eine relativ klassische und häufig verwendete quantitative Handelsstrategie. Diese Strategie hat eine einfache Logik und ist leicht zu verstehen und zu implementieren, mit einer gewissen Stabilität. Aber es gibt auch einige Probleme, wie die Erzeugung falscher Signale, die Unfähigkeit, sich an Marktveränderungen anzupassen, usw. Diese Probleme können durch Parameteroptimierung, Stop-Loss-Optimierung, Modellfusion und andere Methoden verbessert werden. Insgesamt kann die gleitende Durchschnittsstrategie als Grundmodul in der Strategie-Toolbox verwendet werden, kombiniert mit komplexeren Strategien, um robuste komplexe Strategien zu erstellen.


/*backtest
start: 2023-12-01 00:00:00
end: 2023-12-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
//future strategy
//strategy(title = "stub", default_qty_type = strategy.fixed, default_qty_value = 1,  overlay = true, commission_type=strategy.commission.cash_per_contract,commission_value=2.05)
//stock strategy
strategy(title = "stub",   overlay = true)
//forex strategy
//strategy(title = "stub", default_qty_type = strategy.percent_of_equity, default_qty_value = 100,  overlay = true)
//crypto strategy
//strategy(title = "stub", default_qty_type = strategy.percent_of_equity, default_qty_value = 100,  overlay = true, commission_type=strategy.commission.percent,commission_value=.0,default_qty_value=10000)


testStartYear = input(1900, "Backtest Start Year")
testStartMonth = input(1, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0)

testEndYear = input(2018, "Backtest Start Year")
testEndMonth = input(12, "Backtest Start Month")
testEndDay = input(1, "Backtest Start Day")
testPeriodEnd = timestamp(testStartYear,testStartMonth,testStartDay,0,0)


testPeriod() => true

ema1 = ema(close,4)
ema2 = ema(close,8)
ema3 = ema(close,20)

go_long = ema1[0] > ema2[0] and ema3[0] > ema3[1]
exit_long = ema1[0] < ema2[0] or ema3[0] < ema3[1]

go_short = ema1[0] < ema2[0] and ema3[0] < ema3[1]
exit_short = ema1[0] > ema2[0] or ema3[0] > ema3[1]

 
if testPeriod()
    strategy.entry("simpleBuy", strategy.long, when=go_long)
    strategy.exit("simpleBuy", "simpleSell",when=exit_long)
    
    strategy.entry("simpleSell", strategy.short,when=go_short)
    strategy.exit("simpleSell", "simpleSell",when=exit_short)
        
    


Mehr