
Strategi ini adalah sistem perdagangan kuantitatif yang didasarkan pada sinyal oversold RSI dan stop loss ATR dinamis. Strategi ini menggunakan data tingkat garis harian, menggabungkan sinyal oversold RSI dan filter tren garis rata-rata 200 hari, untuk menangkap peluang bouncing saat pasar oversold. Strategi ini menggunakan mekanisme perlindungan ganda dari stop loss ATR dinamis dan stop loss persentase statis, dan menetapkan tujuan profit tiga kali lipat, untuk memaksimalkan keuntungan dengan mengurangi posisi secara bertahap.
Logika inti dari strategi ini mencakup elemen-elemen kunci berikut:
Tergantung pada tren: Strategi dapat sering memicu stop loss di pasar yang bergejolak. Saran: Anda bisa menambahkan indikator getaran untuk memfilter sinyal palsu.
Stop loss yang lebih besar: Stop loss tetap 25% dapat menyebabkan kerugian tunggal yang terlalu besar. Disarankan: Sesuaikan Stop Loss Ratio dengan kemampuan tanggung risiko individu.
Resiko penarikan: keuntungan terputus-putus dapat mengurangi posisi terlalu dini dalam situasi yang kuat. Saran: Anda dapat secara dinamis menyesuaikan target keuntungan, atau mempertahankan beberapa posisi untuk melacak tren.
Strategi ini membangun sistem perdagangan yang lengkap dengan menggabungkan sinyal oversold RSI dan penyaringan tren rata-rata, dengan stop loss ATR dinamis dan target profit tiga kali lipat. Keuntungan dari strategi ini adalah kontrol risiko yang fleksibel, manajemen keuntungan yang masuk akal, namun masih perlu disesuaikan secara optimal sesuai dengan kondisi pasar yang sebenarnya dan preferensi risiko pribadi. Dengan terus meningkatkan sistem sinyal, mekanisme stop loss dan strategi profit, sistem ini diharapkan dapat berkinerja lebih baik di bursa perdagangan nyata.
/*backtest
start: 2019-12-23 08:00:00
end: 2024-11-27 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
// This work is licensed under a Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA/4.0) https://creativecommons.org/licenses/by-nc-sa/4.0/
// © wielkieef
//@version=5
strategy("Simple RSI stock Strategy [1D] ", overlay=true, pyramiding=1, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=75, calc_on_order_fills=false, slippage=0, commission_type=strategy.commission.percent, commission_value=0.03)
// Rsi
oversoldLevel = input(30, title="Oversold Level")
overboughtLevel = input(70, title="Overbought Level")
rsi = ta.rsi(close, 5)
rsi_overbought = rsi > overboughtLevel
rsi_oversold = rsi < oversoldLevel
// Sma 200
lenghtSMA = input(200, title = "SMA lenght")
sma200 = ta.sma(close, lenghtSMA)
// ATR stop-loss
atrLength = input.int(20, title="ATR Length")
atrMultiplier = input.float(1.5, title="ATR Multiplier")
atrValue = ta.atr(atrLength)
var float long_stop_level = na
var float short_stop_level = na
var float tp1_level = na
var float tp2_level = na
var float tp3_level = na
// Strategy entry
long = (rsi_oversold ) and close > sma200
// Take Profit levels
tp_1 = input.float(5.0, "TP 1", minval=0.1, step=0.1)
tp_2 = input.float(10.0, "TP 2", minval=0.2, step=0.1)
tp_3 = input.float(15.0, "TP 3", minval=0.3, step=0.1)
if long
strategy.entry('Long', strategy.long)
long_stop_level := close - atrMultiplier * atrValue
tp1_level := strategy.position_avg_price * (1 + tp_1 / 100)
tp2_level := strategy.position_avg_price * (1 + tp_2 / 100)
tp3_level := strategy.position_avg_price * (1 + tp_3 / 100)
// basic SL - this code is from author RafaelZioni, modified by wielkieef
sl = input.float(25.0, 'Basic Stop Loss %', step=0.1)
per(procent) =>
strategy.position_size != 0 ? math.round(procent / 100 * strategy.position_avg_price / syminfo.mintick) : float(na)
// ATR SL
if (strategy.position_size > 0 and (close <= long_stop_level))
strategy.close("Long")
tp1_level := na
tp2_level := na
tp3_level := na
plot(long_stop_level, color=color.orange, linewidth=2, title="Long Stop Loss")
// TP levels
if (strategy.position_size > 0)
if (not na(tp1_level) and close >= tp1_level)
tp1_level := na
if (not na(tp2_level) and close >= tp2_level)
tp2_level := na
if (not na(tp3_level) and close >= tp3_level)
tp3_level := na
plot(strategy.position_size > 0 and not na(tp1_level) ? tp1_level : na, color=color.gray, style=plot.style_circles , linewidth=1, title="Take Profit 1")
plot(strategy.position_size > 0 and not na(tp2_level) ? tp2_level : na, color=color.gray, style=plot.style_circles , linewidth=1, title="Take Profit 2")
plot(strategy.position_size > 0 and not na(tp3_level) ? tp3_level : na, color=color.gray, style=plot.style_circles , linewidth=1, title="Take Profit 3")
// Strategy exit points for Take Profits
strategy.exit('TP 1', from_entry="Long", qty_percent=33, profit=per(tp_1), loss=per(sl))
strategy.exit('TP 2', from_entry="Long", qty_percent=66, profit=per(tp_2), loss=per(sl))
strategy.exit('TP 3', from_entry="Long", qty_percent=100, profit=per(tp_3), loss=per(sl))
// by wielkieef