Strategi Scalping berdasarkan Indikator RSI dengan Stop Loss Trailing

Penulis:ChaoZhang, Tarikh: 2023-12-12 15:46:49
Tag:

img

Ringkasan

Strategi ini dinamakan Scalping Strategy berdasarkan Indikator RSI dengan Trailing Stop Loss. Ia menggunakan penunjuk RSI untuk menentukan keadaan overbought dan oversold, digabungkan dengan Moving Averages (MA) yang cepat dan perlahan untuk menentukan arah trend, dan menetapkan syarat kemasukan. Ia juga menggunakan mekanisme stop loss berturut-turut peratusan untuk keluar dari kedudukan.

Logika Strategi

Sinyal kemasukan strategi ini terutamanya ditentukan oleh penunjuk RSI dan persilangan MA. Parameter RSI ditetapkan kepada 2 tempoh untuk menangkap dengan cepat situasi overbought dan oversold untuk peluang pembalikan. MA pantas dan MA perlahan ditetapkan kepada 50 dan 200 tempoh masing-masing untuk mengenal pasti arah trend. Khususnya, logik kemasukan adalah:

Masuk panjang: MA pantas melintasi di atas MA perlahan, harga di atas MA perlahan, dan RSI di bawah tahap oversold (default 10%); Pendaftaran pendek: MA pantas melintasi di bawah MA perlahan, harga di bawah MA perlahan, dan RSI di atas tahap overbought (default 90%).

Di samping itu, terdapat penapis turun naik pilihan dalam strategi. Ia mengira perbezaan antara cerun MAs cepat dan perlahan. Posisi hanya akan dibuka apabila perbezaan melebihi ambang. Tujuannya adalah untuk mengelakkan membuka kedudukan apabila tidak ada arah yang jelas semasa turun naik pasaran.

Di sisi keluar, strategi ini menggunakan peratusan kerugian berhenti. Berdasarkan peratusan input, ia mengira harga kerugian berhenti digabungkan dengan saiz tanda, untuk menyesuaikan kerugian berhenti secara dinamik.

Analisis Kelebihan

Kelebihan utama strategi ini ialah:

  1. RSI yang ditetapkan untuk 2 tempoh dapat dengan cepat menangkap situasi overbought dan oversold untuk peluang pembalikan.
  2. MAs yang cepat dan perlahan dapat mengenal pasti arah trend dan titik giliran dengan berkesan.
  3. Gabungan penunjuk RSI dan MA dua mengelakkan pecah palsu.
  4. Penapis turun naik mengelakkan membuka kedudukan apabila tidak ada arah yang jelas semasa turun naik.
  5. Peratusan stop loss boleh menyesuaikan tahap stop loss berdasarkan turun naik pasaran untuk mengawal risiko dengan berkesan.

Analisis Risiko

Terdapat juga beberapa risiko dalam strategi ini:

  1. Indikator RSI dan MA mempunyai beberapa kesan kelewatan, mungkin terlepas beberapa peluang pembalikan.
  2. Peratusan stop loss mungkin akan dicetuskan dalam penurunan jumlah yang rendah.
  3. Perubahan harga semalam dan sebelum pasaran yang signifikan tidak ditangani dengan berkesan.

Arah pengoptimuman untuk risiko adalah:

  1. Sesuaikan parameter RSI kepada 1 tempoh untuk mengurangkan kesan kelewatan.
  2. Mengoptimumkan tempoh MA berdasarkan ciri simbol.
  3. Sesuaikan tahap peratusan stop loss untuk mengimbangi antara stop loss dan toleransi fluktuasi.

Arahan pengoptimuman

Arah pengoptimuman untuk strategi ini adalah:

  1. Tambah penilaian penunjuk lain, seperti jumlah, untuk mengelakkan isyarat pecah palsu.
  2. Tambah ramalan model pembelajaran mesin untuk membantu pengambilan keputusan.
  3. Mengoptimumkan masa piramida dan saiz kedudukan untuk meningkatkan pulangan.
  4. Tetapkan penapis untuk turun naik harga semalam dan pra pasaran. Tentukan sama ada untuk mengambil bahagian dalam hari perdagangan seterusnya berdasarkan turun naik.

Kesimpulan

Secara amnya, ini adalah trend yang agak stabil mengikuti strategi. Dengan menggabungkan penunjuk RSI dan MA berganda, ia memastikan kestabilan tertentu sambil menangkap peluang pembalikan trend yang lebih jelas. Penapis turun naik mengelakkan beberapa risiko, dan kerugian peratusan juga mengawal kerugian perdagangan tunggal dengan berkesan. Strategi ini boleh digunakan sebagai strategi generik pelbagai simbol, dan juga boleh dioptimumkan 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")


Lebih lanjut