Ini adalah strategi trend-following yang menggabungkan beberapa indikator teknis, terutama menggunakan crossover Exponential Moving Average (EMA), indikator Supertrend, dan Relative Strength Index (RSI) untuk mengidentifikasi peluang trading.
Strategi ini menggunakan mekanisme penyaringan tiga untuk menentukan sinyal perdagangan:
Strategi ini mencakup sistem stop-loss dan take-profit dinamis berbasis ATR yang secara otomatis menyesuaikan parameter manajemen risiko berdasarkan volatilitas pasar.
Strategi ini membangun sistem perdagangan yang relatif lengkap dengan menggabungkan beberapa indikator teknis dan kondisi penyaringan. Keuntungan utamanya terletak pada beberapa mekanisme konfirmasi dan manajemen risiko dinamis, sementara perhatian harus diberikan pada optimasi parameter dan biaya transaksi. Melalui optimasi dan perbaikan terus-menerus, strategi ini memiliki potensi untuk mempertahankan kinerja yang stabil di berbagai lingkungan pasar.
/*backtest start: 2024-11-19 00:00:00 end: 2024-12-18 08:00:00 period: 1h basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy(title="Supertrend + EMA Crossover with RSI Filter", shorttitle="ST_EMA_RSI", overlay=true) // Input parameters for EMA fastEMA = input.int(3, title="Fast EMA Period", minval=1) slowEMA = input.int(6, title="Slow EMA Period", minval=1) atrLength = input.int(3, title="ATR Length", minval=1) // Using a fixed multiplier for Supertrend calculation stMultiplier = 1 // Stop loss and take profit multipliers stopLossATR = input.float(2.5, title="Stop Loss ATR Multiplier", minval=0.1, step=0.1) takeProfitATR = input.float(4, title="Take Profit ATR Multiplier", minval=0.1, step=0.1) // RSI inputs rsiLength = input.int(10, title="RSI Length", minval=1) rsiOverbought = input.float(65, title="RSI Overbought Level", minval=50.0, maxval=100.0) rsiOversold = input.float(30.0, title="RSI Oversold Level", minval=0.0, maxval=50.0) // Declare the RSI plot toggle input as a global variable bool rsiPlotEnabled = input.bool(true, title="Show RSI in separate panel") // Time filter inputs i_startTime = input(title="Start Filter", defval=timestamp("01 Jan 2023 13:30 +0000"), group="Time Filter", tooltip="Start date & time to begin searching for setups") i_endTime = input(title="End Filter", defval=timestamp("28 Apr 2099 19:30 +0000"), group="Time Filter", tooltip="End date & time to stop searching for setups") // Date/time filtering logic inDateRange = true // Calculate EMAs fastEMALine = ta.ema(close, fastEMA) slowEMALine = ta.ema(close, slowEMA) // Calculate ATR atr = ta.atr(atrLength) // Calculate Supertrend using fixed multiplier up = high - (stMultiplier * atr) dn = low + (stMultiplier * atr) var float trendUp = na var float trendDown = na var int trend = na trendUp := na(trendUp[1]) ? up : (close[1] > trendUp[1] ? math.min(up, trendUp[1]) : up) trendDown := na(trendDown[1]) ? dn : (close[1] < trendDown[1] ? math.max(dn, trendDown[1]) : dn) trend := close > nz(trendUp[1]) ? 1 : close < nz(trendDown[1]) ? -1 : nz(trend[1], 1) supertrend = trend == 1 ? trendUp : trendDown // Calculate RSI myRSI = ta.rsi(close, rsiLength) // Entry conditions with RSI filter longEntryCondition = ta.crossover(fastEMALine, slowEMALine) and (trend == 1) and (myRSI < rsiOverbought) shortEntryCondition = ta.crossunder(fastEMALine, slowEMALine) and (trend == -1) and (myRSI > rsiOversold) // Strategy entries if inDateRange and longEntryCondition and strategy.position_size <= 0 strategy.entry("Long", strategy.long) if inDateRange and shortEntryCondition and strategy.position_size >= 0 strategy.entry("Short", strategy.short) // Stops and targets if strategy.position_size > 0 longStopLoss = strategy.position_avg_price - stopLossATR * atr longTakeProfit = strategy.position_avg_price + takeProfitATR * atr strategy.exit("Long SL/TP", "Long", stop=longStopLoss, limit=longTakeProfit) if strategy.position_size < 0 shortStopLoss = strategy.position_avg_price + stopLossATR * atr shortTakeProfit = strategy.position_avg_price - takeProfitATR * atr strategy.exit("Short SL/TP", "Short", stop=shortStopLoss, limit=shortTakeProfit) // Plot EMAs and Supertrend plot(fastEMALine, title="Fast EMA", color=color.new(color.blue, 0)) plot(slowEMALine, title="Slow EMA", color=color.new(color.red, 0)) plot(trend == 1 ? supertrend : na, title="Supertrend Up", color=color.green, style=plot.style_linebr) plot(trend == -1 ? supertrend : na, title="Supertrend Down", color=color.red, style=plot.style_linebr) // Plot RSI and hlines plot(rsiPlotEnabled ? myRSI : na, title="RSI", color=color.new(color.purple, 0)) hline(rsiOverbought, "Overbought", color=color.red, linestyle=hline.style_dotted) hline(rsiOversold, "Oversold", color=color.green, linestyle=hline.style_dotted) // Plot entry signals plotshape(longEntryCondition, title="Long Entry Signal", style=shape.triangleup, location=location.belowbar, size=size.tiny, color=color.new(color.green, 0)) plotshape(shortEntryCondition, title="Short Entry Signal", style=shape.triangledown, location=location.abovebar, size=size.tiny, color=color.new(color.red, 0))