EMA dan Stochastic RSI berdasarkan Trend Multi-timeframe Mengikuti Strategi Trading

Penulis:ChaoZhang, Tanggal: 2024-03-08 17:32:38
Tag:

img

Tinjauan Strategi

Strategi ini, yang diberi nama EMA dan Stochastic RSI berbasis Multi-timeframe Trend Following Trading Strategy, memanfaatkan dua rata-rata bergerak eksponensial (EMA) dengan periode yang berbeda dan indikator Stochastic RSI untuk menangkap tren pasar jangka menengah hingga panjang.

Prinsip Strategi

  1. Menghitung EMA cepat dan EMA lambat. Parameter default untuk EMA cepat adalah 12, dan 25 untuk EMA lambat. Ini dapat disesuaikan berdasarkan karakteristik pasar dan frekuensi perdagangan.

  2. Tentukan tren bullish/bearish:

  • Ketika EMA cepat melintasi di atas EMA lambat, itu menghasilkan sinyal bullish
  • Ketika EMA cepat melintasi di bawah EMA lambat, itu menghasilkan sinyal bearish
  1. Konfirmasi tren: Setelah sinyal bullish / bearish muncul, dibutuhkan 2 lilin bullish / bearish berturut-turut untuk mengkonfirmasi tren. Ini membantu menyaring sinyal palsu.

  2. Gunakan RSI Stokastik sebagai penilaian tambahan:

  • Ketika RSI Stochastic %K melintasi garis di atas garis %D, dan %K di bawah 20, itu menghasilkan sinyal oversold, menunjukkan potensi pembalikan bullish
  • Ketika RSI Stochastic %K melintasi di bawah garis %D, dan %K di atas 80, itu menghasilkan sinyal overbought, yang menunjukkan potensi pembalikan penurunan.
  1. Peraturan perdagangan:
  • Buka posisi panjang ketika EMA menghasilkan sinyal bullish dan Stochastic RSI tidak berada di wilayah overbought
  • Buka posisi short ketika EMA menghasilkan sinyal bearish dan Stochastic RSI tidak berada di wilayah oversold

Keuntungan Strategi

  1. Dengan menggunakan dua EMA dengan periode yang berbeda, strategi dapat lebih menyeimbangkan sensitivitas dan keandalan penangkapan tren.

  2. Mekanisme konfirmasi tren dapat secara efektif menyaring sebagian besar sinyal palsu dan meningkatkan tingkat kemenangan.

  3. Stochastic RSI berfungsi sebagai penilaian tambahan, membantu menilai kekuatan tren pada tahap awal dan memperingatkan potensi pembalikan pada tahap akhir.

  4. Logika strategi sederhana dengan beberapa parameter, membuatnya mudah dimengerti dan diimplementasikan.

Analisis Risiko

  1. EMA adalah indikator yang tertinggal dan dapat mengakibatkan slippage yang signifikan pada awal pembalikan tren.

  2. Strategi yang mengikuti tren biasanya berkinerja buruk di pasar yang berbelit-belit.

  3. Stochastic RSI dapat menghasilkan sinyal yang menyesatkan selama volatilitas pasar yang ekstrim, mempengaruhi kualitas penilaian.

  4. Parameter tetap mungkin tidak beradaptasi dengan semua kondisi pasar, yang membutuhkan penyesuaian dinamis berdasarkan karakteristik pasar.

Arahan Optimasi

  1. Memperkenalkan indikator volatilitas seperti ATR untuk menyesuaikan parameter EMA secara dinamis dan beradaptasi dengan irama pasar yang berbeda.

  2. Tambahkan penilaian untuk pasar yang terikat rentang, seperti menggabungkan lebar Bollinger Bands, untuk menghindari perdagangan yang sering dalam kondisi bergolak.

  3. Masukkan lebih banyak kriteria tambahan di atas Stochastic RSI, seperti perubahan volume, untuk meningkatkan keandalan sinyal.

  4. Mempertimbangkan korelasi pasar dan memperkenalkan sinyal antar pasar multi-aset untuk meningkatkan ketahanan risiko sistem.

Ringkasan

Strategi ini secara efektif memanfaatkan kekuatan EMA dan Stochastic RSI untuk membentuk pendekatan perdagangan jangka menengah hingga panjang berdasarkan tren mengikuti dan pembalikan momentum. Ini menangkap tren melalui silang EMA, mengkonfirmasi kekuatan tren dan memperingatkan pembalikan dengan Stochastic RSI, dan meningkatkan kualitas sinyal dengan mekanisme konfirmasi tren. Ketiga komponen secara organik menggabungkan untuk menciptakan kerangka strategi perdagangan kuantitatif yang sederhana dan efektif. Keuntungan utamanya terletak pada logika yang ringkas, beberapa parameter, kesulitan pelaksanaan yang rendah, dan penerapan luas. Namun, strategi ini juga memiliki keterbatasan yang melekat seperti slippage besar dan ketidakmampuan untuk beradaptasi dengan pasar yang berbelit-belit. Peningkatan masa depan dapat berfokus pada optimasi parameter dinamis, memperkenalkan kriteria tambahan, dan membangun mekanisme link antar pasar. Secara keseluruhan, ini adalah strategi perdagangan kuantitatif dengan ruang optimasi yang luas dan prospek aplikasi yang menjanjikan.


/*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')





Lebih banyak