Exponentielle gleitende Durchschnitt-Crossover-Strategie für quantitatives Trading


Erstellungsdatum: 2024-03-29 10:59:57 zuletzt geändert: 2024-03-29 10:59:57
Kopie: 1 Klicks: 517
1
konzentrieren Sie sich auf
1617
Anhänger

Exponentielle gleitende Durchschnitt-Crossover-Strategie für quantitatives Trading

Überblick

Die Strategie nutzt die Kreuzung zweier Indizes, beispielsweise eines EMAs, als Kauf- und Verkaufssignal. Wenn die kurzfristige EMA von unten nach oben durch die längerfristige EMA geht, erzeugt sie ein Kaufsignal. Umgekehrt, wenn die kurzfristige EMA von oben nach unten durch die längerfristige EMA geht, erzeugt sie ein Verkaufssignal.

Strategieprinzip

  1. Berechnen Sie zwei EMAs mit unterschiedlichen Perioden, wobei die Standard-Perioden 5 und 10 sind.
  2. Beurteilen Sie, ob zwei EMAs sich kreuzen. Wenn ein kurzfristiger EMA den langfristigen EMA von unten nach oben durchquert, erzeugt dies ein Kaufsignal. Wenn ein kurzfristiger EMA den langfristigen EMA von oben nach unten durchquert, erzeugt dies ein Verkaufsignal.
  3. Beurteilen Sie bei der Erzeugung eines Kreuzungssignals, ob der aktuelle Kreuzungspunkt der höchste oder der niedrigste Preis der letzten 10 Handelszyklen ist. Wenn der höchste Preis ist, wird ein starker Aufwärtstrend angesehen; wenn der niedrigste Preis ist, wird ein starker Abwärtstrend angesehen.
  4. Wenn ein Kaufsignal erzeugt wird und keine aktuelle Position gehalten wird, wird ein Überkauf angeboten; wenn ein Verkaufsignal erzeugt wird und keine aktuelle Position gehalten wird, wird ein Leerkauf angeboten.
  5. Wenn bereits mehrere Positionen gehalten wurden und die kurzfristige EMA die langfristige EMA von oben nach unten durchquert hat, werden mehrere Positionen platziert; wenn bereits leere Positionen gehalten wurden und die kurzfristige EMA die langfristige EMA von unten nach oben durchquert hat, werden leere Positionen platziert.

Strategische Vorteile

  1. Indikatorische Moving Averages können schneller auf Preisänderungen reagieren als einfache Moving Averages, wodurch zeitnahere Handelssignale erzeugt werden können.
  2. Durch die Beurteilung, ob der Kreuzungspunkt der jüngste Höchst- oder Tiefstpreis ist, können Handelschancen mit höherer Trendstärke ausgesucht und die strategischen Gewinne erhöht werden.
  3. Die Preise an den Kreuzungspunkten werden auf den Diagrammen markiert, um den Händlern eine intuitivere Handelsreferenz zu bieten.
  4. Die Code-Logik ist klar, leicht zu verstehen und umzusetzen.

Strategisches Risiko

  1. Die Signalverzögerung bei EMA-Kreuzungen kann dazu führen, dass die optimale Handelszeit verpasst wird.
  2. EMA-Kreuzungen können häufig auftreten, was zu einer übermäßigen Anzahl von Transaktionen führt, die die Transaktionskosten erhöhen.
  3. Die Strategie fehlt an Stop-Loss-Maßnahmen, die bei Fehlentscheidungen ein höheres Risiko für Rücktritte darstellen können.

Richtung der Strategieoptimierung

  1. Die Einführung von mehr technischen Indikatoren wie RSI, MACD usw. zur Unterstützung der Beurteilung der Trendstärke und -richtung und zur Verbesserung der Signalgenauigkeit.
  2. Setzen Sie angemessene Stop-Loss- und Stop-Stop-Punkte und kontrollieren Sie das Risiko für einen einzelnen Handel.
  3. Optimierung von Handelsparametern wie EMA-Zyklen, Kreuzbestätigungszeitfenster usw. zur Erhöhung der Strategieadaptivität.
  4. In Kombination mit Marktmotiv-Indikatoren wie VIX und anderen wird das Handelssignal gefiltert, um falsche Signale zu reduzieren.
  5. Erwägen Sie die Einbindung von Positionsmanagement- und Kapitalmanagement-Modulen, um die Kapitalmenge pro Transaktion dynamisch anzupassen und die Kapitalnutzung zu verbessern.

Zusammenfassen

Die Strategie nutzt die Index-Moving-Average-Kreuzung als Kernlogik und kombiniert die relative Position der Preise an den Kreuzungspunkten in der jüngsten Zeit, um die Trendstärke zu beurteilen. Insgesamt ist die Strategie logisch klar, die Vorteile sind klar, aber es gibt auch einige Einschränkungen und Risiken. Durch die Einführung von mehr Hilfsmesswerten, angemessenen Risikokontrollen und Optimierung der Schlüsselparameter kann die Stabilität und Profitabilität der Strategie weiter verbessert werden.

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