Die Ressourcen sind geladen. Beförderung...

Doppel gleitender Durchschnittstrend nach Strategie mit ATR-basiertem Risikomanagementsystem

Schriftsteller:ChaoZhang, Datum: 2024-11-29 14:56:43
Tags:SMAATRTPSLHTF

img

Übersicht

Diese Strategie kombiniert klassische doppelte gleitende Durchschnittstrendverfolgung mit ATR-basiertem dynamischem Risikomanagement. Es bietet zwei Handelsmodi: einen grundlegenden Modus mit einfachen gleitenden Durchschnitts-Crossovers für Trendverfolgung und einen erweiterten Modus mit höherem Zeitrahmen-Trendfilterung und ATR-basierten dynamischen Stop-Loss-Mechanismen. Händler können über ein einfaches Dropdown-Menü zwischen den Modi wechseln, um sowohl Anfängern als auch erfahrenen Händlern die Bedürfnisse des Risikomanagements zu erfüllen.

Strategieprinzipien

Strategie 1 (Basic Mode) verwendet ein 21- und 49-Tage-Dual Moving Average-System, das lange Signale erzeugt, wenn der schnelle MA über den langsamen MA überschreitet. Gewinnziele können entweder als Prozentsatz oder Punkte festgelegt werden, mit einem optionalen Trailing-Stop, um Gewinne zu erzielen. Strategie 2 (Advanced Mode) fügt tägliche Zeitrahmen-Trendfilterung hinzu und ermöglicht nur Eingaben, wenn der Preis über dem höheren Zeitrahmen-Moving Average liegt. Es beinhaltet einen 14-Perioden-ATR-basierten dynamischen Stop-Loss, der sich an die Marktvolatilität anpasst und eine teilweise Gewinnnahme-Funktionalität zum Schutz von Gewinnen enthält.

Strategische Vorteile

  1. Eine hochgradig anpassungsfähige Strategie, die sich anhand der Erfahrungen der Händler und der Marktbedingungen anpassen kann
  2. Mehrzeitanalyse im erweiterten Modus verbessert die Signalqualität
  3. ATR-basierte dynamische Stopps passen sich der unterschiedlichen Marktvolatilität an
  4. Teilgewinnsalden Gewinnschutz bei fortgesetzter Entwicklung
  5. Flexible Parameterkonfiguration für verschiedene Merkmale des Marktes

Strategische Risiken

  1. Das Dual-MA-System kann häufige falsche Signale in verschiedenen Märkten erzeugen
  2. Trendfilterung kann Signalverzögerung verursachen und einige Handelsmöglichkeiten verpassen
  3. ATR-Stopps können sich möglicherweise nicht schnell genug an Volatilitätsspitzen anpassen
  4. Teilweise Gewinnentnahme könnte bei starken Trends zu früh die Positionsgröße reduzieren

Strategieoptimierungsrichtlinien

  1. Hinzufügen von Volumen- und Volatilitätsindikatoren, um falsche Signale zu filtern
  2. Überlegungen zur Umsetzung dynamischer Parameteranpassungen auf der Grundlage der Marktbedingungen
  3. Optimierung des ATR-Berechnungszeitraums, um Empfindlichkeit und Stabilität auszugleichen
  4. Hinzufügen eines Marktzustandserkennungsmoduls für die automatische Auswahl des Strategie-Modus
  5. Einführung von mehr Stop-Loss-Optionen wie Trailing-Stops und zeitbasierte Exits

Zusammenfassung

Dies ist ein gut konzipiertes und umfassendes Handelssystem. Die Kombination aus doppeltem gleitendem Durchschnittstrend und ATR-basiertem Risikomanagement gewährleistet sowohl Zuverlässigkeit als auch effektive Risikokontrolle. Das Dual-Mode-Design erfüllt die Bedürfnisse verschiedener Händlerniveaus, während reichhaltige Parameter-Einstellungen umfangreiche Optimierungsmöglichkeiten bieten. Händlern wird empfohlen, beim Live-Handel mit konservativen Parametern zu beginnen und nach und nach für beste Ergebnisse zu optimieren.


/*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


Verwandt

Mehr