Strategi ini adalah sistem perdagangan trend-mengikuti yang menggabungkan Eksponensial Moving Average (EMA) dan Average Directional Index (ADX). Ini menentukan arah perdagangan melalui EMA50 dan price crossover, menggunakan ADX untuk menyaring kekuatan tren, dan menggunakan metode stop-loss dinamis berdasarkan lilin menguntungkan berturut-turut. Pendekatan ini memungkinkan baik menangkap tren pasar utama dan keluar tepat waktu ketika tren melemah.
Logika inti didasarkan pada elemen kunci berikut:
Ini adalah strategi trend-following yang dirancang dengan baik yang secara efektif menangkap tren sambil mengendalikan risiko dengan menggabungkan keuntungan EMA dan ADX. Mekanisme stop-loss dinamis sangat inovatif, secara efektif menyeimbangkan perlindungan keuntungan dan penangkapan tren. Meskipun ada ruang untuk optimasi, kerangka kerja keseluruhan lengkap dan logis, menjadikannya sistem strategi yang layak divalidasi dalam perdagangan langsung.
/*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")