Die Ressourcen sind geladen. Beförderung...

EMA-Multi-DCA-Strategie mit Trailing Stop Loss und Gewinnziel

Schriftsteller:ChaoZhang, Datum: 2024-01-19 15:16:53
Tags:

img

Übersicht

Diese Strategie nutzt dynamische mehrere EMAs als Einstiegssignale in Kombination mit Trailing Stop Loss und Gewinnzielmechanismen für das Risikomanagement. Sie nutzt die glättende Natur von EMAs, um Trends zu identifizieren und die Kosten über Multi-DCA-Einträge zu steuern. Darüber hinaus verbessert die Integration von adaptiven Stop Loss- und Gewinnnahmefunktionen den Automatisierungsprozess.

Strategie Logik

Indikatoren

  • Durchschnittliche tatsächliche Reichweite (ATR)

Eintrittssignale

Die EMA-Strategie wird von den EMA-Perioden verwendet, in denen der Kurs innerhalb einer Reihe von EMA-Perioden überschreitet oder bewegt.

Risikomanagement

Sie beinhaltet mehrere Risikokontrollmechanismen:

  1. ATR Stop Loss: Alle Positionen schließen, wenn ATR den Schwellenwert überschreitet
  2. Grenze der Eingabefrequenz: Kontrolle der Höchstzahl der Eingaben
  3. Der Wert des Vermögenswertes, der für die Berechnung der Vermögenswerte verwendet wird.

Gewinngewinn

Festlegung von Gewinnzielpreisen für Exits

Vorteile

  1. Identifizierung von Trends unter Verwendung von EMAs mit Lärmfilterung
  2. Kostendurchschnitt über mehrere DCA-Einträge
  3. Verbesserte Eintrittssignale unter Verwendung von EMA-Combos
  4. Adaptiver Stop-Loss-Mechanismus
  5. Gewinnkontrolle zum Gewinnschutz

Risiken und Verbesserungen

  1. EMA-Ausrichtung muss für verschiedene Märkte optimiert werden
  2. Übermäßige DCA-Einträge können zu viel Kapital einnehmen
  3. Stopp-Loss-Prozentsatz muss zurück getestet werden

Verbesserungsstrategien

  1. Optimierung der DCA-Frequenz und des Stop-Loss-Prozentsatzes für mehrere Variablen
  2. Einbeziehung von Modellen des maschinellen Lernens für Preisänderungsprognosen
  3. Integration eines Positionsgrößenmoduls zur Verwaltung der Gesamtverwertung des Kapitals

Schlussfolgerung


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

//@version=4
strategy("EMA DCA Strategy with Trailing Stop and Profit Target", overlay=true )

// Define the investment amount for when the condition is met
investment_per_condition = 6

// Define the EMAs
ema5 = ema(close, 5)
ema10 = ema(close, 10)
ema20 = ema(close, 20)
ema50 = ema(close, 50)
ema100 = ema(close, 100)
ema200 = ema(close, 200)

// Define ATR sell threshold
atr_sell_threshold = input(title="ATR Sell Threshold", type=input.integer, defval=10, minval=1)

// Helper function to find if the price is within 1% of the EMA
isWithin1Percent(price, ema) =>
    ema_min = ema * 0.99
    ema_max = ema * 1.01
    price >= ema_min and price <= ema_max

// Control the number of buys
var int buy_count = 0
buy_limit = input(title="Buy Limit", type=input.integer, defval=3000)

// Calculate trailing stop and profit target levels
trail_percent = input(title="Trailing Stop Percentage", type=input.integer, defval=1, minval=0, maxval=10)
profit_target_percent = input(title="Profit Target Percentage", type=input.integer, defval=3, minval=1, maxval=10)

// Determine if the conditions are met and execute the strategy
checkConditionAndBuy(emaValue, emaName) =>
    var int local_buy_count = 0 // Create a local mutable variable
    if isWithin1Percent(close, emaValue) and local_buy_count < buy_limit
        strategy.entry("Buy at " + emaName, strategy.long, qty=investment_per_condition / close, alert_message ="Buy condition met for " + emaName)
        local_buy_count := local_buy_count + 1
        // alert("Buy Condition", "Buy condition met for ", freq_once_per_bar_close)
        
    local_buy_count // Return the updated local_buy_count

// Add ATR sell condition
atr_condition = atr(20) > atr_sell_threshold
if atr_condition
    strategy.close_all()
    buy_count := 0 // Reset the global buy_count when selling

// Strategy execution
buy_count := checkConditionAndBuy(ema5, "EMA5")
buy_count := checkConditionAndBuy(ema10, "EMA10")
buy_count := checkConditionAndBuy(ema20, "EMA20")
buy_count := checkConditionAndBuy(ema50, "EMA50")
buy_count := checkConditionAndBuy(ema100, "EMA100")
buy_count := checkConditionAndBuy(ema200, "EMA200")

// Calculate trailing stop level
trail_offset = close * trail_percent / 100
trail_level = close - trail_offset

// Set profit target level
profit_target_level = close * (1 + profit_target_percent / 100)

// Exit strategy: Trailing Stop and Profit Target
strategy.exit("TrailingStop", from_entry="Buy at EMA", trail_offset=trail_offset, trail_price=trail_level)
strategy.exit("ProfitTarget", from_entry="Buy at EMA",  when=close >= profit_target_level)

// Plot EMAs
plot(ema5, title="EMA 5", color=color.red)
plot(ema10, title="EMA 10", color=color.orange)
plot(ema20, title="EMA 20", color=color.yellow)
plot(ema50, title="EMA 50", color=color.green)
plot(ema100, title="EMA 100", color=color.blue)
plot(ema200, title="EMA 200", color=color.purple)


Mehr