Strategi perdagangan mengikuti tren multi-periode berdasarkan EMA dan Stochastic RSI


Tanggal Pembuatan: 2024-03-08 17:32:38 Akhirnya memodifikasi: 2024-03-08 17:32:38
menyalin: 3 Jumlah klik: 772
1
fokus pada
1617
Pengikut

Strategi perdagangan mengikuti tren multi-periode berdasarkan EMA dan Stochastic RSI

Tinjauan Strategi

Strategi ini disebut “strategi multi-siklus trend-following trading berdasarkan EMA dan RSI acak”, menggunakan indeks moving average (EMA) dan indikator RSI acak dari dua periode yang berbeda untuk menangkap tren jangka menengah dan panjang di pasar. Gagasan inti dari strategi ini adalah untuk menilai arah tren melalui persilangan EMA, sekaligus menggabungkan RSI acak sebagai konfirmasi tren dan sinyal peringatan reversal, untuk membangun posisi pada awal pembentukan tren dan posisi kosong pada akhir tren.

Prinsip Strategi

  1. Hitung EMA cepat dan EMA lambat. Parameter default EMA cepat adalah 12, parameter default EMA lambat adalah 25, yang dapat disesuaikan dengan karakteristik pasar dan frekuensi perdagangan dalam aplikasi nyata.

  2. Pertimbangan tentang tren overbooking:

  • Ketika EMA cepat melewati EMA lambat, menghasilkan sinyal ganda
  • Ketika EMA cepat melewati EMA lambat, menghasilkan sinyal kosong
  1. Konfirmasi tren: Setelah muncul sinyal over/under, perlu muncul 2 garis over/under K berturut-turut untuk mengkonfirmasi tren terbentuk. Ini membantu memfilter sinyal palsu.

  2. Menggunakan RSI acak sebagai penilaian tambahan:

  • Ketika RSI%K secara acak melewati%D, dan%K di bawah 20, sinyal oversold dihasilkan, yang menunjukkan kemungkinan reversal
  • Ketika RSI %K acak menembus %D, dan %K di atas 80, sinyal overbought dihasilkan, menunjukkan kemungkinan pembalikan penurunan
  1. Strategi perdagangan:
  • Ketika EMA menghasilkan sinyal melihat lebih banyak dan RSI acak tidak berada di zona overbought, buka lebih banyak posisi
  • Ketika EMA menghasilkan sinyal bullish dan RSI acak tidak berada di zona oversold, buka posisi kosong

Keunggulan Strategis

  1. Dengan menggunakan dua periode EMA yang berbeda pada saat yang sama, sensitivitas dan keandalan untuk menangkap tren dapat diimbangi dengan lebih baik. Analisis menunjukkan bahwa kombinasi EMA pada periode 1225 lebih baik untuk menangkap tren jangka menengah dan panjang.

  2. Mekanisme pengakuan tren dapat secara efektif memfilter sebagian besar sinyal palsu dan meningkatkan peluang strategi untuk menang.

  3. RSI acak sebagai penilaian tambahan, membantu menentukan kekuatan tren di awal tren, memperingatkan kemungkinan pembalikan tren di akhir tren.

  4. Logika strategi sederhana, parameter yang lebih sedikit, mudah dipahami dan diterapkan, dan berlaku untuk berbagai pasar dan varietas.

Analisis risiko

  1. EMA adalah indikator yang tertinggal, di mana pada awal pembalikan tren dapat terjadi slippage besar.

  2. Strategi trending biasanya dilakukan di pasar bergolak. Strategi ini tidak memiliki penilaian khusus untuk pasar bergolak.

  3. RSI acak dapat terdistorsi pada saat pasar bergejolak dan mempengaruhi kualitas penilaian.

  4. Parameter tetap mungkin tidak dapat disesuaikan dengan semua kondisi pasar dan perlu disesuaikan dengan dinamika karakteristik pasar.

Arah optimasi

  1. Memperkenalkan indikator volatilitas seperti ATR, menyesuaikan parameter EMA sesuai dengan dinamika volatilitas, untuk menyesuaikan dengan ritme pasar yang berbeda.

  2. Meningkatkan penilaian terhadap pasar yang bergoyang, misalnya dengan mengkombinasikan arah bukaan Brin Belt, dan lain-lain, untuk menghindari perdagangan yang sering terjadi di pasar yang bergoyang.

  3. Dengan mengintegrasikan lebih banyak penilaian tambahan, seperti perubahan volume lalu lintas, pada basis RSI acak, sinyal dapat diandalkan.

  4. Mempertimbangkan relevansi pasar, memperkenalkan berbagai jenis sinyal interkoneksi, dan meningkatkan ketahanan sistem terhadap risiko.

Meringkaskan

Strategi ini memanfaatkan sepenuhnya keuntungan dari EMA dan RSI acak, membentuk satu set strategi perdagangan jangka menengah dan panjang berdasarkan trend tracking dan reversal dinamis. Dengan trend capture cross-line, konfirmasi kekuatan tren acak RSI dan reversal peringatan, mekanisme konfirmasi tren meningkatkan kualitas sinyal, ketiganya digabungkan secara organik, membentuk kerangka strategi perdagangan kuantitatif yang sederhana dan efektif.

Kode Sumber Strategi
/*backtest
start: 2023-03-02 00:00:00
end: 2024-03-07 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy('[Jacky] Trader XO Macro Trend Scanner', overlay=true)

// Variables
var ok = 0
var countBuy = 0
var countSell = 0
src = input(close, title='OHLC Type')
i_fastEMA = input(12, title='Fast EMA')
i_slowEMA = input(25, title='Slow EMA')
i_defEMA = input(25, title='Consolidated EMA')

// Allow the option to show single or double EMA
i_bothEMAs = input(title='Show Both EMAs', defval=true)

// Define EMAs
v_fastEMA = ta.ema(src, i_fastEMA)
v_slowEMA = ta.ema(src, i_slowEMA)
v_biasEMA = ta.ema(src, i_defEMA)

// Color the EMAs
emaColor = v_fastEMA > v_slowEMA ? color.green : v_fastEMA < v_slowEMA ? color.red : #FF530D

// Plot EMAs
plot(i_bothEMAs ? na : v_biasEMA, color=emaColor, linewidth=3, title='Consolidated EMA')
plot(i_bothEMAs ? v_fastEMA : na, title='Fast EMA', color=emaColor)
plot(i_bothEMAs ? v_slowEMA : na, title='Slow EMA', color=emaColor)

// Colour the bars
buy = v_fastEMA > v_slowEMA
sell = v_fastEMA < v_slowEMA

if buy
    countBuy += 1
    countBuy

if buy
    countSell := 0
    countSell

if sell
    countSell += 1
    countSell

if sell
    countBuy := 0
    countBuy

buysignal = countBuy < 2 and countBuy > 0 and countSell < 1 and buy and not buy[1]
sellsignal = countSell > 0 and countSell < 2 and countBuy < 1 and sell and not sell[1]

barcolor(buysignal ? color.green : na)
barcolor(sellsignal ? color.red : na)

// Strategy backtest
if (buysignal)
    strategy.entry("Buy", strategy.long)

if (sellsignal)
    strategy.entry("Sell", strategy.short)

// Plot Bull/Bear

plotshape(buysignal, title='Bull', text='Bull', style=shape.triangleup, location=location.belowbar, color=color.new(color.green, 0), textcolor=color.new(color.black, 0), size=size.tiny)
plotshape(sellsignal, title='Bear', text='Bear', style=shape.triangledown, location=location.abovebar, color=color.new(color.red, 0), textcolor=color.new(color.black, 0), size=size.tiny)

bull = countBuy > 1
bear = countSell > 1

barcolor(bull ? color.green : na)
barcolor(bear ? color.red : na)

// Set Alerts

alertcondition(ta.crossover(v_fastEMA, v_slowEMA), title='Bullish EMA Cross', message='Bullish EMA crossover')
alertcondition(ta.crossunder(v_fastEMA, v_slowEMA), title='Bearish EMA Cross', message='Bearish EMA Crossover')

// Stoch RSI code

smoothK = input.int(3, 'K', minval=1)
smoothD = input.int(3, 'D', minval=1)
lengthRSI = input.int(14, 'RSI Length', minval=1)
lengthStoch = input.int(14, 'Stochastic Length', minval=1)

rsi1 = ta.rsi(src, lengthRSI)
k = ta.sma(ta.stoch(rsi1, rsi1, rsi1, lengthStoch), smoothK)
d = ta.sma(k, smoothD)

bandno0 = input.int(80, minval=1, title='Upper Band', group='Bands (change this instead of length in Style for Stoch RSI colour to work properly)')
bandno2 = input.int(50, minval=1, title='Middle Band', group='Bands (change this instead of length in Style for Stoch RSI colour to work properly)')
bandno1 = input.int(20, minval=1, title='Lower Band', group='Bands (change this instead of length in Style for Stoch RSI colour to work properly)')

// Alerts

crossoverAlertBgColourMidOnOff = input.bool(title='Crossover Alert Background Colour (Middle Level) [ON/OFF]', group='Crossover Alerts', defval=false)
crossoverAlertBgColourOBOSOnOff = input.bool(title='Crossover Alert Background Colour (OB/OS Level) [ON/OFF]', group='Crossover Alerts', defval=false)

crossoverAlertBgColourGreaterThanOnOff = input.bool(title='Crossover Alert >input [ON/OFF]', group='Crossover Alerts', defval=false)
crossoverAlertBgColourLessThanOnOff = input.bool(title='Crossover Alert <input [ON/OFF]', group='Crossover Alerts', defval=false)

maTypeChoice = input.string('EMA', title='MA Type', group='Moving Average', options=['EMA', 'WMA', 'SMA', 'None'])
maSrc = input.source(close, title='MA Source', group='Moving Average')
maLen = input.int(200, minval=1, title='MA Length', group='Moving Average')

maValue = if maTypeChoice == 'EMA'
    ta.ema(maSrc, maLen)
else if maTypeChoice == 'WMA'
    ta.wma(maSrc, maLen)
else if maTypeChoice == 'SMA'
    ta.sma(maSrc, maLen)
else
    0

crossupCHECK = maTypeChoice == 'None' or open > maValue and maTypeChoice != 'None'
crossdownCHECK = maTypeChoice == 'None' or open < maValue and maTypeChoice != 'None'

crossupalert = crossupCHECK and ta.crossover(k, d) and (k < bandno2 or d < bandno2)
crossdownalert = crossdownCHECK and ta.crossunder(k, d) and (k > bandno2 or d > bandno2)
crossupOSalert = crossupCHECK and ta.crossover(k, d) and (k < bandno1 or d < bandno1)
crossdownOBalert = crossdownCHECK and ta.crossunder(k, d) and (k > bandno0 or d > bandno0)

aboveBandalert = ta.crossunder(k, bandno0)
belowBandalert = ta.crossover(k, bandno1)

bgcolor(color=crossupalert and crossoverAlertBgColourMidOnOff ? #4CAF50 : crossdownalert and crossoverAlertBgColourMidOnOff ? #FF0000 : na, title='Crossover Alert Background Colour (Middle Level)', transp=70)
bgcolor(color=crossupOSalert and crossoverAlertBgColourOBOSOnOff ? #fbc02d : crossdownOBalert and crossoverAlertBgColourOBOSOnOff ? #000000 : na, title='Crossover Alert Background Colour (OB/OS Level)', transp=70)

bgcolor(color=aboveBandalert and crossoverAlertBgColourGreaterThanOnOff ? #ff0014 : crossdownalert and crossoverAlertBgColourMidOnOff ? #FF0000 : na, title='Crossover Alert - K > Upper level', transp=70)
bgcolor(color=belowBandalert and crossoverAlertBgColourLessThanOnOff ? #4CAF50 : crossdownalert and crossoverAlertBgColourMidOnOff ? #FF0000 : na, title='Crossover Alert - K < Lower level', transp=70)

alertcondition(crossupalert or crossdownalert, title='Stoch RSI Crossover', message='STOCH RSI CROSSOVER')