Strategi ini adalah sistem perdagangan komposit yang menggabungkan indikator momentum RSI dengan indikator tren EMA. Beroperasi pada jangka waktu 1 menit dan 5 menit, ia membuat keputusan perdagangan berdasarkan sinyal overbought / oversold RSI dan penentuan tren EMA tiga kali lipat. Strategi ini menggabungkan kedua tren berikut dan karakteristik reversi rata-rata, yang memungkinkan untuk menangkap peluang perdagangan di lingkungan pasar yang berbeda.
Strategi ini menggunakan EMA tiga hari 21/50/200 sebagai tolok ukur penilaian tren, dikombinasikan dengan indikator RSI yang dimodifikasi (dihitung menggunakan metode Chebyshev) untuk mengidentifikasi kondisi pasar yang terlalu banyak dibeli / terlalu banyak dijual. Pada jangka waktu 1 menit, ia memulai posisi pendek ketika RSI melanggar di atas 94 dan ditutup ketika jatuh di bawah 4, dengan titik impas ditetapkan ketika RSI kembali ke 50. Pada jangka waktu 5 menit, ia memulai posisi panjang ketika harga bangkit setelah jatuh di bawah EMA 200 hari, menutup posisi ketika RSI terlalu banyak dibeli atau melanggar di bawah median. Variabel manajemen posisi diPositionLong dan inPositionShort mencegah entri berulang.
Strategi ini meningkatkan stabilitas dan keandalan perdagangan melalui kombinasi beberapa indikator teknis dan analisis multi-frame waktu. Meskipun ada risiko tertentu, mereka dapat dikendalikan secara efektif melalui manajemen posisi yang tepat dan mekanisme stop-loss. Strategi ini memiliki potensi optimasi yang signifikan, dan kinerjanya dapat ditingkatkan lebih lanjut dengan memperkenalkan indikator teknis tambahan dan mengoptimalkan parameter.
/*backtest start: 2023-11-12 00:00:00 end: 2024-07-10 00:00:00 period: 1d basePeriod: 1d exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("Combined RSI Primed and 3 EMA Strategy", overlay=true) // Input for EMA lengths emaLength1 = input(21, title="EMA Length 1") emaLength2 = input(50, title="EMA Length 2") emaLength3 = input(200, title="EMA Length 3") // Input for RSI settings rsiLength = input(14, title="RSI Length") rsiOverbought = input(94, title="RSI Overbought Level") rsiNeutral = input(50, title="RSI Neutral Level") rsiOversold = input(4, title="RSI Oversold Level") // Calculate EMAs ema1 = ta.ema(close, emaLength1) ema2 = ta.ema(close, emaLength2) ema3 = ta.ema(close, emaLength3) // Calculate RSI using Chebyshev method from RSI Primed rsi(source) => up = math.max(ta.change(source), 0) down = -math.min(ta.change(source), 0) rs = up / down rsiValue = down == 0 ? 100 : 100 - (100 / (1 + rs)) rsiValue rsiValue = rsi(close) // Plot EMAs plot(ema1, color=color.red, title="EMA 21") plot(ema2, color=color.white, title="EMA 50") plot(ema3, color=color.blue, title="EMA 200") // Plot RSI for visual reference hline(rsiOverbought, "Overbought", color=color.red) hline(rsiNeutral, "Neutral", color=color.gray) hline(rsiOversold, "Oversold", color=color.green) plot(rsiValue, color=color.blue, title="RSI") // Trading logic with position management var bool inPositionShort = false var bool inPositionLong = false // Trading logic for 1-minute timeframe if (rsiValue > rsiOverbought and not inPositionShort) strategy.entry("Sell", strategy.short) inPositionShort := true if (rsiValue < rsiOversold and inPositionShort) strategy.close("Sell") inPositionShort := false if (ta.crossover(rsiValue, rsiNeutral) and inPositionShort) strategy.exit("Break Even", "Sell", stop=close) // Trading logic for 5-minute timeframe var float lastBearishClose = na if (close < ema3 and close[1] >= ema3) // Check if the current close is below EMA200 lastBearishClose := close if (not na(lastBearishClose) and close > lastBearishClose and not inPositionLong) strategy.entry("Buy", strategy.long) inPositionLong := true if (rsiValue > rsiOverbought and inPositionLong) strategy.close("Buy") inPositionLong := false if (ta.crossunder(rsiValue, rsiNeutral) and inPositionLong) strategy.exit("Break Even", "Buy", stop=close) lastBearishClose := na // Reset after trade execution