
Strategi ini dinamakan sebagai strategi tracking trend based on RSI stop loss. Strategi ini menggunakan RSI untuk menentukan keadaan overbought dan oversold, digabungkan dengan indikator MA untuk menentukan arah trend, dan menetapkan syarat masuk.
Strategi ini terutamanya melalui RSI dan MA untuk menentukan masa masuk. Parameter RSI ditetapkan untuk 2 kitaran, untuk menentukan keadaan overbought dan oversold. MA perlahan-lahan ditetapkan untuk 50 kitaran dan 200 kitaran, untuk menentukan arah trend.
Masuk dengan banyak mata: berbelanja lebih banyak apabila MA pantas berada di atas MA perlahan, dan harga lebih tinggi daripada MA perlahan, dan RSI berada di bawah kawasan oversold (default 10%);
Kemasukan kosong: Kemasukan kosong apabila MA pantas berada di bawah MA perlahan dan harga lebih rendah daripada MA perlahan, sementara RSI lebih tinggi daripada zon overbought (default 90%).
Selain itu, strategi ini juga menetapkan penapis kadar turun naik yang boleh dipilih. Penapis ini mengira selisih kemerosotan MA secara perlahan-lahan, dan hanya akan membuka kedudukan apabila selisih melebihi nilai terhad yang ditetapkan. Ia bertujuan untuk mengelakkan pembukaan kedudukan ketika tidak ada arah yang jelas dalam tempoh pergerakan harga.
Pada exit, strategi ini menggunakan peratusan untuk menjejaki hentian. Berdasarkan peratusan hentian input, gabungan setiap perbezaan harga melompat untuk mengira harga hentian, untuk mencapai hentian penyesuaian dinamik.
Strategi ini mempunyai kelebihan utama:
Strategi ini juga mempunyai risiko, terutamanya:
Menghadapi risiko di atas, anda boleh mengoptimumkan:
Strategi ini boleh dioptimumkan dengan:
Strategi ini secara keseluruhan merupakan strategi pengesanan trend yang lebih stabil. Ia menggabungkan penilaian RSI dan MA ganda, sambil menjamin kestabilan tertentu, ia juga dapat menangkap peluang pembalikan trend yang lebih jelas. Pada masa yang sama, penapis kadar turun naik dapat mengelakkan sebahagian risiko, dan peratusan stop loss juga dapat mengawal kerugian tunggal dengan berkesan.
/*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")