Exponential Moving Average Crossover Quantitative Handelsstrategie

Schriftsteller:ChaoZhang, Datum: 2024-03-29 10:59:57
Tags:

img

Übersicht

Diese Strategie verwendet die Überschneidung von zwei exponentiellen gleitenden Durchschnitten (EMA) als Kauf- und Verkaufssignale. Wenn die kurzfristige EMA über die längerfristige EMA von unten kreuzt, erzeugt sie ein Kaufsignal; umgekehrt, wenn die kurzfristige EMA unter die längerfristige EMA von oben kreuzt, erzeugt sie ein Verkaufssignal. Darüber hinaus bestimmt die Strategie, ob der Crossover-Punkt der höchste oder niedrigste Preis innerhalb der letzten 10 Handelsperioden ist, um die Stärke des Trends zu bestätigen. Wenn der Crossover-Punkt der höchste Preis ist, wird der Hintergrund grün gefärbt; wenn es der niedrigste Preis ist, wird er rot gefärbt. Außerdem zeigt die Strategie den Preis des Crossover-Punkts auf dem Chart an.

Strategieprinzipien

  1. Berechnen Sie zwei EMA mit unterschiedlichen Perioden, mit Ausfallzeiten von 5 und 10.
  2. Bestimmen Sie, ob sich die beiden EMA kreuzen. Wenn die kurzfristige EMA von unten über die langfristige EMA kreuzt, erzeugt sie ein Kaufsignal; wenn die kurzfristige EMA von oben unter die langfristige EMA kreuzt, erzeugt sie ein Verkaufssignal.
  3. Wenn ein Crossover-Signal auftritt, wird festgestellt, ob der aktuelle Crossover-Punkt der höchste oder niedrigste Preis innerhalb der letzten 10 Handelszeiten ist.
  4. Wenn ein Kaufsignal erzeugt wird und es keine aktuelle Position gibt, wird eine Long-Position eröffnet; wenn ein Verkaufssignal erzeugt wird und es keine aktuelle Position gibt, wird eine Short-Position eröffnet.
  5. Wenn eine Long-Position gehalten wird und die kurzfristige EMA von oben unter die langfristige EMA fällt, wird die Long-Position geschlossen; wenn eine Short-Position gehalten wird und die kurzfristige EMA von unten über die langfristige EMA fällt, wird die Short-Position geschlossen.

Strategische Vorteile

  1. Exponentielle gleitende Durchschnitte reagieren im Vergleich zu einfachen gleitenden Durchschnitten schneller auf Preisänderungen und erzeugen somit zeitnahere Handelssignale.
  2. Durch die Bestimmung, ob der Übergangspunkt der jüngste höchste oder niedrigste Preis ist, kann er Handelsmöglichkeiten mit größerer Trendstärke filtern und die Strategieprofitabilität verbessern.
  3. Die Markierung des Crossover-Punktpreises auf dem Diagramm bietet den Händlern intuitivere Handelsreferenzen.
  4. Die Code-Logik ist klar und leicht zu verstehen und umzusetzen.

Strategische Risiken

  1. Die durch EMA-Crossovers erzeugten Signale können sich verzögern, was dazu führt, dass die besten Handelsmöglichkeiten verpasst werden.
  2. In einem schwankenden Markt können EMA-Crossovers häufig auftreten, was zu einer übermäßigen Handelsfrequenz und erhöhten Handelskosten führt.
  3. Die Strategie verfügt nicht über Stop-Loss-Maßnahmen, sodass sie bei falschem Urteil möglicherweise einem höheren Abzugrisiko ausgesetzt ist.

Strategieoptimierungsrichtlinien

  1. Einführung technischer Indikatoren wie RSI, MACD usw., um die Trendstärke und -richtung zu beurteilen und die Signalgenauigkeit zu verbessern.
  2. Festlegen angemessener Stop-Loss- und Take-Profit-Niveaus zur Kontrolle des Single-Trade-Risikos.
  3. Optimierung von Handelsparametern wie EMA-Perioden und Übergangserklärungszeiten, um die Anpassungsfähigkeit der Strategie zu verbessern.
  4. Kombination von Marktstimmungsindikatoren wie VIX, um Handelssignale zu filtern und falsche Signale zu reduzieren.
  5. Es sollte in Betracht gezogen werden, Positionsmanagement- und Kapitalmanagementmodule hinzuzufügen, um den Betrag der Mittel für jeden Handel dynamisch anzupassen und die Effizienz der Kapitalverwendung zu verbessern.

Zusammenfassung

Diese Strategie verwendet exponentielle gleitende Durchschnitts-Kreuzungen als Kernlogik und berücksichtigt gleichzeitig die relative Position des Kreuzungspunktpreises in der jüngsten Periode, um die Trendstärke zu bestimmen. Insgesamt ist die Strategie-Logik klar, und die Vorteile sind offensichtlich, aber sie hat auch bestimmte Einschränkungen und Risiken. Durch die Einführung von mehr Hilfsbeurteilungsindikatoren, die Festlegung angemessener Risikokontrollmaßnahmen und die Optimierung der Schlüsselparameter können die Stabilität und Rentabilität dieser Strategie weiter verbessert werden.


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

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © ZenAndTheArtOfTrading
// @version=5
strategy("ema giao nhau", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100)

// Get user input
emaLength1 = input.int(title="EMA #1 Length", defval=5)
emaLength2 = input.int(title="EMA #2 Length", defval=10)

// Get MAs
ema1 = ta.ema(close, emaLength1)
ema2 = ta.ema(close, emaLength2)

// Draw MAs
plot(ema1, color=color.blue, title="EMA 1")
plot(ema2, color=color.red, title="EMA 2")

// Detect crossovers
bool crossOver = ta.crossover(ema1, ema2)
bool crossUnder = ta.crossunder(ema1, ema2)
bool cross = crossOver or crossUnder
//float crossPrice = ta.valuewhen(cross, close, 0)
float crossPrice = cross ? close : na

// Check if the crossover price is the highest price over the past 10 bars
bool highestPrice = crossOver
for i = 1 to 10
    if crossPrice <= close[i]
        highestPrice := false
        break

// Check if the crossover price is the lowest price over the past 10 bars
bool lowestPrice = crossUnder
for i = 1 to 10
    if crossPrice >= close[i]
        lowestPrice := false
        break

// Flag the bar if it is a high/low close
bgcolor(highestPrice ? color.new(color.green, 50) : na)
bgcolor(lowestPrice ? color.new(color.red, 50) : na)

// Display crossover price
if cross
    highestEmaPrice = ema1 > ema2 ? ema1 : ema2
    label myLabel = label.new(bar_index, highestEmaPrice, "CrossPrice=" + str.tostring(crossPrice), color=color.white)
    if highestPrice and strategy.position_size == 0
        strategy.entry(id="Buy", direction=strategy.long)
    if lowestPrice and strategy.position_size == 0
        strategy.entry(id="Sell", direction=strategy.short)

// Exit trades when short-term EMA is breached
if strategy.position_size > 0 and crossUnder
    strategy.close("Buy")
if strategy.position_size < 0 and crossOver
    strategy.close("Sell")

Mehr