Strategi ini disebut
Sinyal masuk dari strategi ini terutama ditentukan oleh indikator RSI dan crossover MA. Parameter RSI ditetapkan pada 2 periode untuk dengan cepat menangkap situasi overbought dan oversold untuk peluang pembalikan. MA cepat dan MA lambat ditetapkan pada 50 dan 200 periode masing-masing untuk mengidentifikasi arah tren. Secara khusus, logika masuk adalah:
Masuk panjang: MA cepat melintasi di atas MA lambat, harga di atas MA lambat, dan RSI di bawah tingkat oversold (default 10%); Entry pendek: MA cepat melintasi di bawah MA lambat, harga berada di bawah MA lambat, dan RSI berada di atas tingkat overbought (default 90%).
Selain itu, ada filter volatilitas opsional dalam strategi. Ini menghitung perbedaan antara kemiringan MAs cepat dan lambat. Posisi hanya akan dibuka ketika perbedaan melebihi ambang batas. Tujuannya adalah untuk menghindari membuka posisi ketika tidak ada arah yang jelas selama fluktuasi pasar.
Pada sisi keluar, strategi menggunakan persentase stop loss yang tertinggal. Berdasarkan persentase input, strategi ini menghitung harga stop loss dikombinasikan dengan ukuran tick, untuk menyesuaikan stop loss secara dinamis.
Keuntungan utama dari strategi ini adalah:
Ada juga beberapa risiko dalam strategi ini:
Arah optimasi untuk risiko adalah:
Arah optimasi untuk strategi ini adalah:
Secara umum, ini adalah tren yang relatif stabil mengikuti strategi. Dengan menggabungkan indikator RSI dan MA ganda, ini memastikan stabilitas tertentu sambil menangkap peluang pembalikan tren yang lebih jelas. Filter volatilitas menghindari beberapa risiko, dan persentase stop loss juga secara efektif mengendalikan kerugian perdagangan tunggal. Strategi ini dapat digunakan sebagai strategi generik multi-simbol, dan juga dapat dioptimalkan pada parameter dan model untuk simbol tertentu untuk mencapai hasil yang lebih baik.
/*backtest start: 2023-11-11 00:00:00 end: 2023-12-11 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // Scalping strategy // © Lukescream and Ninorigo // (original version by Lukescream - lastest versions by Ninorigo) - v1.3 // //@version=4 strategy(title="Scalping using RSI 2 indicator", shorttitle="RSI 2 Strategy", overlay=true, pyramiding=0, process_orders_on_close=false) var bool ConditionEntryL = false var bool ConditionEntryS = false //*********** // Costants //*********** def_start_date = timestamp("01 Jan 2021 07:30 +0000") def_end_date = timestamp("01 Dec 2024 07:30 +0000") def_rsi_length = 2 def_overbought_value = 90 def_oversold_value = 10 def_slow_ma_length = 200 def_fast_ma_length = 50 def_ma_choice = "EMA" def_tick = 0.5 def_filter = true def_trailing_stop = 1 //*********** // Change the optional parameters //*********** start_time = input(title="Start date", defval=def_start_date, type=input.time) end_time = input(title="End date", defval=def_end_date, type=input.time) // RSI src = input(title="Source", defval=close, type=input.source) rsi_length = input(title="RSI Length", defval=def_rsi_length, minval=1, type=input.integer) overbought_threshold = input(title="Overbought threshold", defval=def_overbought_value, type=input.float) oversold_threshold = input(title="Oversold threshold", defval=def_oversold_value, type=input.float) // Moving average slow_ma_length = input(title="Slow MA length", defval=def_slow_ma_length, type=input.integer) fast_ma_length = input(title="Fast MA length", defval=def_fast_ma_length, type=input.integer) ma_choice = input(title="MA choice", defval="EMA", options=["SMA", "EMA"]) // Input ticker tick = input(title="Ticker size", defval=def_tick, type=input.float) filter = input(title="Trend Filter", defval=def_filter, type=input.bool) // Trailing stop (%) ts_rate = input(title="Trailing Stop %", defval=def_trailing_stop, type=input.float) //*********** // RSI //*********** // Calculate RSI up = rma(max(change(src), 0), rsi_length) down = rma(-min(change(src), 0), rsi_length) rsi = (down == 0 ? 100 : (up == 0 ? 0 : 100-100/(1+up/down))) //*********** // Moving averages //*********** slow_ma = (ma_choice == "SMA" ? sma(close, slow_ma_length) : ema(close, slow_ma_length)) fast_ma = (ma_choice == "SMA" ? sma(close, fast_ma_length) : ema(close, fast_ma_length)) // Show the moving averages plot(slow_ma, color=color.white, title="Slow MA") plot(fast_ma, color=color.yellow, title="Fast MA") //*********** // Strategy //*********** if true // Determine the entry conditions (only market entry and market exit conditions) // Long position ConditionEntryL := (filter == true ? (fast_ma > slow_ma and close > slow_ma and rsi < oversold_threshold) : (fast_ma > slow_ma and rsi < oversold_threshold)) // Short position ConditionEntryS := (filter == true ? (fast_ma < slow_ma and close < slow_ma and rsi > overbought_threshold) : (fast_ma < slow_ma and rsi > overbought_threshold)) // Calculate the trailing stop ts_calc = close * (1/tick) * ts_rate * 0.01 // Submit the entry orders and the exit orders // Long position if ConditionEntryL strategy.entry("RSI Long", strategy.long) // Exit from a long position strategy.exit("Exit Long", "RSI Long", trail_points=0, trail_offset=ts_calc) // Short position if ConditionEntryS strategy.entry("RSI Short", strategy.short) // Exit from a short position strategy.exit("Exit Short", "RSI Short", trail_points=0, trail_offset=ts_calc) // Highlights long conditions bgcolor (ConditionEntryL ? color.navy : na, transp=60, offset=1, editable=true, title="Long position band") // Highlights short conditions bgcolor (ConditionEntryS ? color.olive : na, transp=60, offset=1, editable=true, title="Short position band")