Mehrfache gleitende Durchschnittstrendverfolgung und dynamische Volatilitätsfilterstrategie

EMA TR ATR
Erstellungsdatum: 2025-01-17 15:00:37 zuletzt geändert: 2025-01-17 15:00:37
Kopie: 3 Klicks: 303
1
konzentrieren Sie sich auf
1617
Anhänger

Mehrfache gleitende Durchschnittstrendverfolgung und dynamische Volatilitätsfilterstrategie

Überblick

Die Strategie ist ein intelligentes Handelssystem, das Trendfolge und Volatilitätsfilterung kombiniert. Es identifiziert Markttrends durch den Exponential Moving Average (EMA), verwendet den True Range (TR) und dynamische Volatilitätsfilter, um den Einstiegszeitpunkt zu bestimmen, und verwaltet das Risiko mit einem dynamischen Stop-Profit- und Stop-Loss-Mechanismus basierend auf der Volatilität. Die Strategie unterstützt zwei Handelsmodi: Scalp und Swing, die je nach Marktumgebung und Handelsstil flexibel umgeschaltet werden können.

Strategieprinzip

Die Kernlogik der Strategie umfasst die folgenden Schlüsselkomponenten:

  1. Trenderkennung: Verwenden Sie den 50-Perioden-EMA als Trendfilter und gehen Sie nur dann long, wenn der Preis über dem EMA liegt, und gehen Sie short, wenn er unter dem EMA liegt.
  2. Volatilitätsfilterung: Berechnet den EMA des True Range (TR) und verwendet einen einstellbaren Filterfaktor (Standard 1,5), um Marktrauschen herauszufiltern.
  3. Einstiegsbedingungen: Kombiniert mit der morphologischen Analyse von drei aufeinanderfolgenden K-Linien muss die Preisbewegung kontinuierlich und beschleunigt sein.
  4. Take Profit und Stop Loss: Im Kurzzeitmodus werden sie auf Grundlage des aktuellen TR festgelegt, im Bandmodus auf Grundlage der vorherigen Hoch- und Tiefpunkte, um ein dynamisches Risikomanagement zu erreichen.

Strategische Vorteile

  1. Starke Anpassungsfähigkeit: Durch die Kombination aus dynamischer Volatilitätsfilterung und Trendverfolgung kann es sich an unterschiedliche Marktumgebungen anpassen.
  2. Perfektes Risikomanagement: Bereitstellung dynamischer Stop-Profit- und Stop-Loss-Mechanismen für zwei Handelsmodi, die je nach Markteigenschaften flexibel ausgewählt werden können.
  3. Gute Parameteranpassbarkeit: Schlüsselparameter wie Filterkoeffizient, Trendzyklus usw. können entsprechend den Eigenschaften der Handelsprodukte optimiert werden.
  4. Guter Visualisierungseffekt: Bietet klare Kauf- und Verkaufssignalmarkierungen und Stop-Profit- und Stop-Loss-Positionsanzeigen, um die Transaktionsüberwachung zu erleichtern.

Strategisches Risiko

  1. Trendumkehrrisiko: An Trendwendepunkten kann es zu aufeinanderfolgenden Stopps kommen.
  2. Risiko falscher Ausbrüche: Bei plötzlich steigender Volatilität können falsche Signale ausgelöst werden.
  3. Parameterempfindlichkeit: Eine falsche Einstellung der Filterkoeffizienten kann zu einem zu starken oder zu schwachen Signal führen.
  4. Auswirkungen von Slippage: In einem schnellen Markt kann es zu großen Slippages kommen, die die Leistung Ihrer Strategie beeinträchtigen können.

Richtung der Strategieoptimierung

  1. Filterung der Trendstärke hinzufügen: Indikatoren wie ADX können eingeführt werden, um die Trendstärke zu bewerten und Trendverfolgungseffekte zu verbessern.
  2. Take-Profit und Stop-Loss optimieren: Erwägen Sie die Einführung eines gleitenden Stop-Loss, um mehr Gewinne zu sichern.
  3. Verbesserung des Swing-Trading-Modells: Es können weitere Swing-Trading-spezifische Beurteilungsbedingungen hinzugefügt werden, um die mittel- und langfristigen Haltemöglichkeiten zu verbessern.
  4. Volumenanalyse hinzufügen: Kombinieren Sie Volumenänderungen, um die Gültigkeit des Durchbruchs zu bestätigen.

Zusammenfassen

Diese Strategie konstruiert ein komplettes Handelssystem durch die organische Kombination von Trendverfolgung, Volatilitätsfilterung und dynamischem Risikomanagement. Der Vorteil der Strategie liegt darin, dass sie höchst anpassungsfähig und risikokontrolliert ist und gleichzeitig viel Spielraum für Optimierungen bietet. Durch sinnvolles Festlegen der Parameter und Auswählen geeigneter Handelsmodi kann die Strategie in unterschiedlichen Marktumgebungen eine stabile Leistung aufrechterhalten. Es wird Händlern empfohlen, vor der tatsächlichen Verwendung ausreichende Backtests und Parameteroptimierungen durchzuführen und entsprechende Anpassungen basierend auf den Merkmalen bestimmter Handelsprodukte vorzunehmen.

Strategiequellcode
/*backtest
start: 2024-12-17 00:00:00
end: 2025-01-15 08:00:00
period: 2h
basePeriod: 2h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT","balance":49999}]
*/

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

//@version=5
strategy("Scalp Slayer (I)", overlay=true)

// Input Parameters
filterNumber = input.float(1.5, "Filter Number", minval=1.0, maxval=10.0, tooltip="Higher = More aggressive Filter, Lower = Less aggressive")
emaTrendPeriod = input.int(50, "EMA Trend Period", minval=1, tooltip="Period for the EMA used for trend filtering")
lookbackPeriod = input.int(20, "Lookback Period for Highs/Lows", minval=1, tooltip="Period for determining recent highs/lows")
colorTP = input.color(title='Take Profit Color', defval=color.orange)
colorSL = input.color(title='Stop Loss Color', defval=color.red)

// Inputs for visibility
showBuyLabels = input.bool(true, title="Show Buy Labels")
showSellLabels = input.bool(true, title="Show Sell Labels")

// Alert Options
alertOnCondition = input.bool(true, title="Alert on Condition Met", tooltip="Enable to alert when condition is met")

// Trade Mode Toggle
tradeMode = input.bool(false, title="Trade Mode (ON = Swing, OFF = Scalp)", tooltip="Swing-mode you can use your own TP/SL.")

// Calculations
tr = high - low
ema = filterNumber * ta.ema(tr, 50)
trendEma = ta.ema(close, emaTrendPeriod)  // Calculate the EMA for the trend filter

// Highest and lowest high/low within lookback period for swing logic
swingHigh = ta.highest(high, lookbackPeriod)
swingLow = ta.lowest(low, lookbackPeriod)

// Variables to track the entry prices and SL/TP levels
var float entryPriceLong = na
var float entryPriceShort = na
var float targetPriceLong = na
var float targetPriceShort = na
var float stopLossLong = na
var float stopLossShort = na
var bool tradeActive = false

// Buy and Sell Conditions with Trend Filter
buyCondition = close > trendEma and  // Buy only if above the trend EMA
      close[2] > open[2] and close[1] > open[1] and close > open and 
      (math.abs(close[2] - open[2]) > math.abs(close[1] - open[1])) and 
      (math.abs(close - open) > math.abs(close[1] - open[1])) and 
      close > close[1] and close[1] > close[2] and tr > ema

sellCondition = close < trendEma and  // Sell only if below the trend EMA
       close[2] < open[2] and close[1] < open[1] and close < open and 
       (math.abs(close[2] - open[2]) > math.abs(close[1] - open[1])) and 
       (math.abs(close - open) > math.abs(close[1] - open[1])) and 
       close < close[1] and close[1] < close[2] and tr > ema

// Entry Rules
if (buyCondition and not tradeActive)
    entryPriceLong := close  // Track entry price for long position
    stopLossLong := tradeMode ? ta.lowest(low, lookbackPeriod) : swingLow  // Scalping: recent low, Swing: lowest low of lookback period
    targetPriceLong := tradeMode ? close + tr : swingHigh  // Scalping: close + ATR, Swing: highest high of lookback period
    tradeActive := true

if (sellCondition and not tradeActive)
    entryPriceShort := close  // Track entry price for short position
    stopLossShort := tradeMode ? ta.highest(high, lookbackPeriod) : swingHigh  // Scalping: recent high, Swing: highest high of lookback period
    targetPriceShort := tradeMode ? close - tr : swingLow  // Scalping: close - ATR, Swing: lowest low of lookback period
    tradeActive := true

// Take Profit and Stop Loss Logic
signalBuyTPPrint = (not na(entryPriceLong) and close >= targetPriceLong)
signalSellTPPrint = (not na(entryPriceShort) and close <= targetPriceShort)

signalBuySLPrint = (not na(entryPriceLong) and close <= stopLossLong)
signalSellSLPrint = (not na(entryPriceShort) and close >= stopLossShort)

if (signalBuyTPPrint or signalBuySLPrint)
    entryPriceLong := na  // Reset entry price for long position
    targetPriceLong := na  // Reset target price for long position
    stopLossLong := na  // Reset stop-loss for long position
    tradeActive := false

if (signalSellTPPrint or signalSellSLPrint)
    entryPriceShort := na  // Reset entry price for short position
    targetPriceShort := na  // Reset target price for short position
    stopLossShort := na  // Reset stop-loss for short position
    tradeActive := false

// Plot Buy and Sell Labels with Visibility Conditions
plotshape(showBuyLabels and buyCondition, "Buy", shape.labelup, location=location.belowbar, color=color.green, text="BUY", textcolor=color.white, size=size.tiny)
plotshape(showSellLabels and sellCondition, "Sell", shape.labeldown, location=location.abovebar, color=color.red, text="SELL", textcolor=color.white, size=size.tiny)

// Plot Take Profit Flags
plotshape(showBuyLabels and signalBuyTPPrint, title="Take Profit (buys)", text="TP", style=shape.flag, location=location.abovebar, color=colorTP, textcolor=color.white, size=size.tiny)
plotshape(showSellLabels and signalSellTPPrint, title="Take Profit (sells)", text="TP", style=shape.flag, location=location.belowbar, color=colorTP, textcolor=color.white, size=size.tiny)

// Plot Stop Loss "X" Marker
plotshape(showBuyLabels and signalBuySLPrint, title="Stop Loss (buys)", text="X", style=shape.xcross, location=location.belowbar, color=colorSL, textcolor=color.white, size=size.tiny)
plotshape(showSellLabels and signalSellSLPrint, title="Stop Loss (sells)", text="X", style=shape.xcross, location=location.abovebar, color=colorSL, textcolor=color.white, size=size.tiny)

// Alerts

alertcondition(buyCondition and alertOnCondition, title="Buy Alert", message='{"content": "Buy {{ticker}} at {{close}}"}')
alertcondition(sellCondition and alertOnCondition, title="Sell Alert", message='{"content": "Sell {{ticker}} at {{close}}"}')
alertcondition(signalBuyTPPrint and alertOnCondition, title="Buy TP Alert", message='{"content": "Buy TP {{ticker}} at {{close}}"}')
alertcondition(signalSellTPPrint and alertOnCondition, title="Sell TP Alert", message='{"content": "Sell TP {{ticker}} at {{close}}"}')
alertcondition(signalBuySLPrint and alertOnCondition, title="Buy SL Alert", message='{"content": "Buy SL {{ticker}} at {{close}}"}')
alertcondition(signalSellSLPrint and alertOnCondition, title="Sell SL Alert", message='{"content": "Sell SL {{ticker}} at {{close}}"}')

if buyCondition
    strategy.entry("Enter Long", strategy.long)
else if sellCondition
    strategy.entry("Enter Short", strategy.short)