Dies ist eine quantitative Handelsstrategie, die die Querschnittswerte des exponentiellen gleitenden Durchschnitts (EMA) mit einem Filter für den durchschnittlichen wahren Bereich (ATR) kombiniert. Die Strategie zielt darauf ab, starke Trends zu identifizieren und Trades in marktbedingten Bedingungen mit hoher Volatilität auszuführen, wodurch die Sharpe-Ratio und die Gesamtleistung effektiv verbessert werden. Sie verwendet 50-Perioden- und 200-Perioden-EMAs, um mittelfristige bis langfristige Trends zu erfassen, während der ATR-Indikator zur Bewertung der Marktvolatilität verwendet wird.
Die Kernlogik besteht aus zwei Hauptkomponenten: Trendbestimmung und Volatilitätsfilterung. Für die Trendbestimmung verwendet die Strategie eine 50-Perioden-EMA als schnelle Linie und eine 200-Perioden-EMA als langsame Linie und erzeugt lange Signale, wenn die schnelle Linie über die langsame Linie überschreitet, und kurze Signale, wenn sie darunter überschreitet. Für die Volatilitätsfilterung berechnet die Strategie den 14-Perioden-ATR-Wert und wandelt ihn in einen Prozentsatz des Preises um und erlaubt nur Positionen, wenn der ATR-Prozentsatz einen vorgegebenen Schwellenwert überschreitet (Standard 2%).
Diese Strategie kombiniert klassische technische Indikatoren mit modernen Risikomanagementkonzepten. Durch die Verwendung von EMA-Crossovers, um Trends zu erfassen und gleichzeitig einen ATR-Filter zur Steuerung des Handelszeitplans zu verwenden, bleibt die Strategie einfach und erreicht gleichzeitig eine starke Praktikabilität.
/*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"}] */ //@version=5 strategy("EMA Crossover with ATR Filter", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=10) // Inputs for Moving Averages fastLength = input.int(50, title="Fast EMA Length") slowLength = input.int(200, title="Slow EMA Length") // Inputs for ATR Filter atrLength = input.int(14, title="ATR Length") atrMultiplier = input.float(1.5, title="ATR Multiplier") atrThreshold = input.float(0.02, title="ATR Threshold (%)") // Calculate EMAs fastEMA = ta.ema(close, fastLength) slowEMA = ta.ema(close, slowLength) // Calculate ATR atr = ta.atr(atrLength) // Convert ATR to a percentage of price atrPct = atr / close // Define Long Condition (Cross and ATR filter) longCondition = ta.crossover(fastEMA, slowEMA) and atrPct > atrThreshold / 100 // Define Short Condition shortCondition = ta.crossunder(fastEMA, slowEMA) and atrPct > atrThreshold / 100 // Define Exit Conditions exitConditionLong = ta.crossunder(fastEMA, slowEMA) exitConditionShort = ta.crossover(fastEMA, slowEMA) // Long Entry if (longCondition) strategy.entry("Long", strategy.long) // Short Entry if (shortCondition) strategy.entry("Short", strategy.short) // Long Exit if (exitConditionLong) strategy.close("Long") // Short Exit if (exitConditionShort) strategy.close("Short") // Plot EMAs for visual reference plot(fastEMA, title="50 EMA", color=color.blue) plot(slowEMA, title="200 EMA", color=color.red) // Plot ATR for reference plot(atrPct, title="ATR Percentage", color=color.orange, style=plot.style_line) hline(atrThreshold / 100, "ATR Threshold", color=color.green)