EMA doppelter gleitender Durchschnitt Crossover dynamische Stop-Profit und Stop-Loss quantitative Handelsstrategie

EMA
Erstellungsdatum: 2024-11-18 15:53:49 zuletzt geändert: 2024-11-18 15:53:49
Kopie: 5 Klicks: 611
1
konzentrieren Sie sich auf
1617
Anhänger

Überblick

Die Strategie ist ein quantitatives Handelssystem, das auf Gleichgewichtskreuzungen basiert, kombiniert mit einem dynamischen Stop-Loss-Mechanismus. Der Kern der Strategie ist die Identifizierung von Markttrends durch die Kreuzung von 10-Zyklus- und 26-Zyklus-Index-Moving Averages (EMA) und der Handel bei Rückschlägen.

Strategieprinzip

Die Strategie nutzt zwei unterschiedliche periodische EMAs als Kernindikatoren: die kurzfristige 10-Zyklus-EMA und die langfristige 26-Zyklus-EMA. Wenn die kurzfristige Mittellinie die langfristige Mittellinie aufwärts durchbricht, wird dies als Aufwärtstrend erkannt, was ein Kaufsignal erzeugt. Wenn die kurzfristige Mittellinie die langfristige Mittellinie nach unten durchbricht, wird dies als Abwärtstrend erkannt, was ein Verkaufsignal erzeugt.

Strategische Vorteile

  1. Signalklarheit: Die Verwendung von Linear-Crossing als Handelssignal, einfache Regeln, die klar sind und leicht umzusetzen und zu überwachen sind
  2. Risikokontrolle: Ein fester Stop-Loss-Punkt ermöglicht eine effektive Kontrolle des Risikos für jeden Handel
  3. Trend-Tracking: kombiniert mit Gleichgewichtskreuzungen und Preisrückgängen, um Trendbewegungen besser zu erfassen
  4. Hohe Automatisierungsstufe: klare Strategie-Logik und einfache Programmierung für automatisierte Transaktionen
  5. Anpassungsfähigkeit: für verschiedene Handelsarten, insbesondere für Arten mit hoher Volatilität

Strategisches Risiko

  1. Schwankungsrisiko: False Signals können häufig in schwankenden Märkten auftreten
  2. Schlupfrisiko: Bei starken Marktschwankungen können größere Schlupfpunkte auftreten
  3. Stop-Loss-Risiko: Fixed Stop-Loss-Levels können unter bestimmten Marktbedingungen nicht flexibel sein
  4. Signalverzögerung: Ein linearer Kreuzungssignal hat eine gewisse Verzögerung und kann den besten Einstiegspunkt verpassen
  5. Risikomanagement: Der Kapitalanteil pro Transaktion muss angemessen kontrolliert werden

Richtung der Strategieoptimierung

  1. Dynamische Stop-Losses: Eine dynamische Anpassung der Stop-Loss-Position an die Marktschwankungen kann in Betracht gezogen werden
  2. Signalfilterung: Zunahme des Verkehrsvolumens, Fluktuationsrate und andere Hilfsindikatoren, um falsche Signale zu filtern
  3. Zeit-Filter: Erhöhen Sie die Filterzeit für den Handel und vermeiden Sie schwankende Zeiten.
  4. Positionsverwaltung: Erhöhung der Teilstop-Mechanismen, die die Aufrechterhaltung von Positionen ermöglichen, um den Trend weiter zu verfolgen
  5. Geldverwaltung: Hinzufügung eines dynamischen Geldverwaltungssystems, das die Transaktionsgröße automatisch an den Kontowert anpasst

Zusammenfassen

Die Strategie baut ein vollständiges Handelssystem auf, indem sie EMA-Gleichgewichtskreuzungen und Preisrückstellungen kombiniert. Die Strategie ist einfach und intuitiv ausgelegt, die Risikokontrolle ist klar und eignet sich für handelsübergreifende Handelsarten. Durch eine vernünftige Optimierung und Parameteranpassung ist die Strategie berechtigt, einen stabilen Ertrag im Live-Handel zu erzielen.

Strategiequellcode
/*backtest
start: 2023-11-18 00:00:00
end: 2024-11-17 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("30 Pips Target & 15 Pips Stop-Loss with One Signal at a Time", overlay=true)

// Define settings for target and stop-loss in pips
target_in_pips = 30
stoploss_in_pips = 10

// Convert pips to price value based on market (for forex, 1 pip = 0.0001 for major pairs like GBP/JPY)
pip_value = syminfo.mintick * 10  // For forex, 1 pip = 0.0001 or 0.01 for JPY pairs
target_value = target_in_pips * pip_value
stoploss_value = stoploss_in_pips * pip_value

// Define EMAs (10-EMA and 26-EMA) for the crossover strategy
ema10 = ta.ema(close, 10)
ema26 = ta.ema(close, 26)

// Buy signal: when 10 EMA crosses above 26 EMA
longCondition = ta.crossover(ema10, ema26)
// Sell signal: when 10 EMA crosses below 26 EMA
shortCondition = ta.crossunder(ema10, ema26)

// Define price levels with explicit type float
var float long_entry_price = na
var float long_take_profit = na
var float long_stop_loss = na
var float short_entry_price = na
var float short_take_profit = na
var float short_stop_loss = na

// Variable to track if a trade is active
var bool inTrade = false

// Check if the trade hit stop loss or take profit
if (inTrade)
    if (not na(long_take_profit) and close >= long_take_profit)
        inTrade := false  // Exit the trade after hitting target
        long_entry_price := na
        long_take_profit := na
        long_stop_loss := na
        strategy.close("Long")

    if (not na(long_stop_loss) and close <= long_stop_loss)
        inTrade := false  // Exit the trade after hitting stoploss
        long_entry_price := na
        long_take_profit := na
        long_stop_loss := na
        strategy.close("Long")

    if (not na(short_take_profit) and close <= short_take_profit)
        inTrade := false  // Exit the trade after hitting target
        short_entry_price := na
        short_take_profit := na
        short_stop_loss := na
        strategy.close("Short")

    if (not na(short_stop_loss) and close >= short_stop_loss)
        inTrade := false  // Exit the trade after hitting stoploss
        short_entry_price := na
        short_take_profit := na
        short_stop_loss := na
        strategy.close("Short")

// Only generate new signals if not already in a trade
if (not inTrade)
    if (longCondition)
        long_entry_price := close
        long_take_profit := close + target_value
        long_stop_loss := close - stoploss_value
        strategy.entry("Long", strategy.long)  // Enter a long trade
        strategy.exit("Take Profit/Stop Loss", "Long", limit=long_take_profit, stop=long_stop_loss)
        inTrade := true  // Mark trade as active

    if (shortCondition)
        short_entry_price := close
        short_take_profit := close - target_value
        short_stop_loss := close + stoploss_value
        strategy.entry("Short", strategy.short)  // Enter a short trade
        strategy.exit("Take Profit/Stop Loss", "Short", limit=short_take_profit, stop=short_stop_loss)
        inTrade := true  // Mark trade as active

// Plot the levels on the chart only when in a trade
plot(inTrade and not na(long_take_profit) ? long_take_profit : na, color=color.green, linewidth=2, style=plot.style_linebr, title="Take Profit (Long)")
plot(inTrade and not na(long_stop_loss) ? long_stop_loss : na, color=color.red, linewidth=2, style=plot.style_linebr, title="Stop Loss (Long)")

plot(inTrade and not na(short_take_profit) ? short_take_profit : na, color=color.green, linewidth=2, style=plot.style_linebr, title="Take Profit (Short)")
plot(inTrade and not na(short_stop_loss) ? short_stop_loss : na, color=color.red, linewidth=2, style=plot.style_linebr, title="Stop Loss (Short)")

plotshape(series=longCondition and not inTrade, title="Buy Signal", location=location.belowbar, color=color.green, style=shape.labelup, text="Buy")
plotshape(series=shortCondition and not inTrade, title="Sell Signal", location=location.abovebar, color=color.red, style=shape.labeldown, text="Sell")