Adaptive Handelsstrategie zur Trendverfolgung mit doppeltem gleitendem Durchschnitt und ATR-Risikokontrolle

SMA ATR TP SL HTF
Erstellungsdatum: 2024-11-29 14:56:43 zuletzt geändert: 2024-11-29 14:56:43
Kopie: 0 Klicks: 522
1
konzentrieren Sie sich auf
1617
Anhänger

Adaptive Handelsstrategie zur Trendverfolgung mit doppeltem gleitendem Durchschnitt und ATR-Risikokontrolle

Überblick

Die Strategie ist ein adaptives Handelssystem, das klassische Binär-Trend-Tracking und ATR-Dynamiken kombiniert. Die Strategie bietet zwei Handelsmodelle: Das Basismodell verwendet eine einfache Binär-Trend-Kreuzung für die Trendverfolgung, das Advanced-Modell fügt eine Trendfilterung für höhere Zeitrahmen und eine dynamische Stop-Loss-Mechanismus auf Basis von ATR hinzu. Die Strategie kann über ein einfaches Dropdown-Menü zwischen den beiden Modellen wechseln, um sowohl die Benutzerfreundlichkeit der Anfänger zu berücksichtigen als auch die Bedürfnisse der Risikokontrolle für erfahrene Händler zu erfüllen.

Strategieprinzip

Strategie 1 ((Basismodus) verwendet ein 21- und 49-Tage-Doppel-Gleichgewichtssystem, das mehrere Signale erzeugt, wenn der schnelle Mittelwert den langsamen Mittelwert aufwärts durchquert. Die Gewinnziele können prozentual oder punktmäßig gewählt werden und bieten optional eine mobile Stop-Loss-Funktion, um die Gewinne zu sperren. Strategie 2 ((Advanced Modus) erweitert den Trendfilter auf der Ebene der Tageslinie auf der Basis des Doppel-Gleichgewichtssystems und erlaubt den Einstieg nur, wenn der Preis über dem höheren Zeitrahmengleichgewicht liegt.

Strategische Vorteile

  1. Strategie ist sehr anpassungsfähig und kann flexibel je nach Erfahrungsniveau des Händlers und Marktumfeld gewechselt werden
  2. Mehrzeitframe-Analysen im Hochmodus verbessern die Signalqualität
  3. ATR-Dynamische Stop-Losses können sich an unterschiedliche Marktbedingungen anpassen
  4. Ein Teil des Profitmechanismus balanciert zwischen Gewinnschutz und Trendfortführung
  5. Flexible Parameterkonfiguration für die Optimierung nach verschiedenen Markteigenschaften

Strategisches Risiko

  1. Doppel-Einheitlichkeits-Systeme können in Schwankungen häufig falsche Signale erzeugen.
  2. Trend-Filter könnten zu Signalverzögerungen führen und einige Handelschancen verpassen
  3. ATR-Stopp kann bei Schwankungen der Schwankungen nicht rechtzeitig sein
  4. Einige Gewinne könnten zu früh zurückgehen und die Trendgewinne beeinträchtigen.

Richtung der Strategieoptimierung

  1. Filterung von Falschsignalen zur Erhöhung des Transaktionsvolumens und der Schwankungen
  2. Erwägen Sie die Einführung eines Anpassungsmechanismus für dynamische Parameter, der die Linienzyklus automatisch an die Marktlage anpasst
  3. Optimierung des ATR-Rechenzyklus, um Sensitivität und Stabilität zu balancieren
  4. Erweiterung des Moduls zur Erkennung von Marktzuständen und automatische Auswahl der optimalen Strategie
  5. Einführung von Optionen zur Verringerung von Verlusten, z. B. Verlustverfolgung, Verlustverzögerung

Zusammenfassen

Es ist ein vernünftig gestaltetes und funktionsfähiges Handelsstrategie-System. Durch die Kombination von Dual-Linear-Trend-Tracking und ATR-Wind-Kontrolle wird sowohl die Zuverlässigkeit der Strategie gewährleistet als auch ein gutes Risikomanagement bereitgestellt. Das Dual-Modell-Design entspricht den Bedürfnissen von Händlern auf verschiedenen Ebenen und bietet eine reichhaltige Parameter-Einstellung.

Strategiequellcode
/*backtest
start: 2019-12-23 08:00:00
end: 2024-11-27 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © shaashish1

//@version=5
strategy("Dual Strategy Selector V2 - Cryptogyani", overlay=true, pyramiding=0, 
         default_qty_type=strategy.percent_of_equity, default_qty_value=100, initial_capital=100000)

//#region STRATEGY SELECTION
strategyOptions = input.string(title="Select Strategy", defval="Strategy 1", options=["Strategy 1", "Strategy 2"], group="Strategy Selection")
//#endregion STRATEGY SELECTION

// ####################### STRATEGY 1: Original Logic ########################
//#region STRATEGY 1 INPUTS
s1_fastMALen = input.int(defval=21, title="Fast SMA Length (S1)", minval=1, group="Strategy 1 Settings", inline="S1 MA")
s1_slowMALen = input.int(defval=49, title="Slow SMA Length (S1)", minval=1, group="Strategy 1 Settings", inline="S1 MA")
s1_takeProfitMode = input.string(defval="Percentage", title="Take Profit Mode (S1)", options=["Percentage", "Pips"], group="Strategy 1 Settings")
s1_takeProfitPerc = input.float(defval=7.0, title="Take Profit % (S1)", minval=0.05, step=0.05, group="Strategy 1 Settings") / 100
s1_takeProfitPips = input.float(defval=50, title="Take Profit Pips (S1)", minval=1, step=1, group="Strategy 1 Settings")
s1_trailingTakeProfitEnabled = input.bool(defval=false, title="Enable Trailing (S1)", group="Strategy 1 Settings")
//#endregion STRATEGY 1 INPUTS

// ####################### STRATEGY 2: Enhanced with Recommendations ########################
//#region STRATEGY 2 INPUTS
s2_fastMALen = input.int(defval=20, title="Fast SMA Length (S2)", minval=1, group="Strategy 2 Settings", inline="S2 MA")
s2_slowMALen = input.int(defval=50, title="Slow SMA Length (S2)", minval=1, group="Strategy 2 Settings", inline="S2 MA")
s2_atrLength = input.int(defval=14, title="ATR Length (S2)", group="Strategy 2 Settings", inline="ATR")
s2_atrMultiplier = input.float(defval=1.5, title="ATR Multiplier for Stop-Loss (S2)", group="Strategy 2 Settings", inline="ATR")
s2_partialTakeProfitPerc = input.float(defval=50.0, title="Partial Take Profit % (S2)", minval=10, maxval=100, step=10, group="Strategy 2 Settings")
s2_timeframeTrend = input.timeframe(defval="1D", title="Higher Timeframe for Trend Filter (S2)", group="Strategy 2 Settings")
//#endregion STRATEGY 2 INPUTS

// ####################### GLOBAL VARIABLES ########################
var float takeProfitPrice = na
var float stopLossPrice = na
var float trailingStopPrice = na
var float fastMA = na
var float slowMA = na
var float higherTimeframeTrendMA = na
var bool validOpenLongPosition = false

// Precalculate higher timeframe values (global scope for Strategy 2)
higherTimeframeTrendMA := request.security(syminfo.tickerid, s2_timeframeTrend, ta.sma(close, s2_slowMALen))

// ####################### LOGIC ########################
if (strategyOptions == "Strategy 1")
    // Strategy 1 Logic (Original Logic Preserved)
    fastMA := ta.sma(close, s1_fastMALen)
    slowMA := ta.sma(close, s1_slowMALen)
    openLongPosition = ta.crossover(fastMA, slowMA)
    validOpenLongPosition := openLongPosition and strategy.opentrades.size(strategy.opentrades - 1) == 0
    
    // Take Profit Price
    takeProfitPrice := if (s1_takeProfitMode == "Percentage")
        close * (1 + s1_takeProfitPerc)
    else
        close + (s1_takeProfitPips * syminfo.mintick)

    // Trailing Stop Price (if enabled)
    if (strategy.position_size > 0 and s1_trailingTakeProfitEnabled)
        trailingStopPrice := high - (s1_takeProfitPips * syminfo.mintick)
    else
        trailingStopPrice := na

else if (strategyOptions == "Strategy 2")
    // Strategy 2 Logic with Recommendations
    fastMA := ta.sma(close, s2_fastMALen)
    slowMA := ta.sma(close, s2_slowMALen)
    openLongPosition = ta.crossover(fastMA, slowMA) and close > higherTimeframeTrendMA
    validOpenLongPosition := openLongPosition and strategy.opentrades.size(strategy.opentrades - 1) == 0

    // ATR-Based Stop-Loss
    atr = ta.atr(s2_atrLength)
    stopLossPrice := close - (atr * s2_atrMultiplier)

    // Partial Take Profit Logic
    takeProfitPrice := close * (1 + (s2_partialTakeProfitPerc / 100))
//#endregion STRATEGY LOGIC

// ####################### PLOTTING ########################
plot(series=fastMA, title="Fast SMA", color=color.yellow, linewidth=1)
plot(series=slowMA, title="Slow SMA", color=color.orange, linewidth=1)
plot(series=takeProfitPrice, title="Take Profit Price", color=color.teal, linewidth=1, style=plot.style_linebr)

// Trailing Stop and ATR Stop-Loss Plots (Global Scope)
plot(series=(strategyOptions == "Strategy 1" and s1_trailingTakeProfitEnabled) ? trailingStopPrice : na, title="Trailing Stop", color=color.red, linewidth=1, style=plot.style_linebr)
plot(series=(strategyOptions == "Strategy 2") ? stopLossPrice : na, title="ATR Stop-Loss", color=color.red, linewidth=1, style=plot.style_linebr)
//#endregion PLOTTING

// ####################### POSITION ORDERS ########################
//#region POSITION ORDERS
if (validOpenLongPosition)
    strategy.entry(id="Long Entry", direction=strategy.long)

if (strategyOptions == "Strategy 1")
    if (strategy.position_size > 0)
        if (s1_trailingTakeProfitEnabled)
            strategy.exit(id="Trailing Take Profit", from_entry="Long Entry", stop=trailingStopPrice)
        else
            strategy.exit(id="Take Profit", from_entry="Long Entry", limit=takeProfitPrice)

else if (strategyOptions == "Strategy 2")
    if (strategy.position_size > 0)
        strategy.exit(id="Partial Take Profit", from_entry="Long Entry", qty_percent=s2_partialTakeProfitPerc, limit=takeProfitPrice)
        strategy.exit(id="Stop Loss", from_entry="Long Entry", stop=stopLossPrice)
//#endregion POSITION ORDERS