Diese Strategie ist ein Trend-Folgende Handelssystem, das den Exponential Moving Average (EMA) und den Average Directional Index (ADX) kombiniert. Es bestimmt die Handelsrichtung durch EMA50 und Preiskreuzungen, verwendet ADX, um die Trendstärke zu filtern, und verwendet eine dynamische Stop-Loss-Methode, die auf aufeinanderfolgenden profitablen Kerzen basiert. Dieser Ansatz ermöglicht sowohl die Erfassung wichtiger Markttrends als auch zeitnahe Ausstiege, wenn Trends schwächen.
Die Kernlogik beruht auf folgenden Schlüsselelementen:
Dies ist eine gut konzipierte Trend-Folge-Strategie, die Trends effektiv erfasst und gleichzeitig Risiken kontrolliert, indem sie die Vorteile von EMA und ADX kombiniert. Der dynamische Stop-Loss-Mechanismus ist besonders innovativ und gleicht Gewinnschutz und Trend-Fang effektiv aus. Während es Raum für Optimierung gibt, ist der Gesamtrahmen vollständig und logisch solide, was es zu einem Strategiesystem macht, das im Live-Handel validiert werden sollte.
/*backtest start: 2019-12-23 08:00:00 end: 2025-01-04 08:00:00 period: 1d basePeriod: 1d exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=6 strategy("Simple EMA 50 Strategy with ADX Filter", overlay=true) // Input parameters emaLength = input.int(50, title="EMA Length") adxThreshold = input.float(20, title="ADX Threshold", minval=0) // Calculate EMA and ADX ema50 = ta.ema(close, emaLength) adxSmoothing = input.int(20, title="ADX Smoothing") [diPlus, diMinus, adx] = ta.dmi(20, adxSmoothing) // Conditions for long and short entries adxCondition = adx > adxThreshold longCondition = adxCondition and close > ema50 // Check if candle closes above EMA shortCondition = adxCondition and close < ema50 // Check if candle closes below EMA // Exit conditions based on 4 consecutive profitable candles var float longSL = na var float shortSL = na var longCandleCounter = 0 var shortCandleCounter = 0 // Increment counters if positions are open and profitable if (strategy.position_size > 0 and close > strategy.position_avg_price) longCandleCounter += 1 if (longCandleCounter >= 4) longSL := na(longSL) ? close : math.max(longSL, close) // Update SL dynamically else longCandleCounter := 0 longSL := na if (strategy.position_size < 0 and close < strategy.position_avg_price) shortCandleCounter += 1 if (shortCandleCounter >= 4) shortSL := na(shortSL) ? close : math.min(shortSL, close) // Update SL dynamically else shortCandleCounter := 0 shortSL := na // Exit based on trailing SL if (strategy.position_size > 0 and not na(longSL) and close < longSL) strategy.close("Buy", comment="Candle-based SL") if (strategy.position_size < 0 and not na(shortSL) and close > shortSL) strategy.close("Sell", comment="Candle-based SL") // Entry logic: Check every candle for new positions if (longCondition) strategy.entry("Buy", strategy.long) if (shortCondition) strategy.entry("Sell", strategy.short) // Plot EMA and ADX for reference plot(ema50, color=color.blue, title="EMA 50") plot(adx, color=color.orange, title="ADX", style=plot.style_stepline, linewidth=1) plot(longSL, color=color.green, title="Long SL", style=plot.style_cross, linewidth=1) plot(shortSL, color=color.red, title="Short SL", style=plot.style_cross, linewidth=1) // Plot signals plotshape(series=longCondition, location=location.belowbar, color=color.green, style=shape.labelup, title="Buy Signal") plotshape(series=shortCondition, location=location.abovebar, color=color.red, style=shape.labeldown, title="Sell Signal")