Strategi ini, yang diberi nama
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.
Tentukan tren bullish/bearish:
Konfirmasi tren: Setelah sinyal bullish / bearish muncul, dibutuhkan 2 lilin bullish / bearish berturut-turut untuk mengkonfirmasi tren. Ini membantu menyaring sinyal palsu.
Gunakan RSI Stokastik sebagai penilaian tambahan:
Dengan menggunakan dua EMA dengan periode yang berbeda, strategi dapat lebih menyeimbangkan sensitivitas dan keandalan penangkapan tren.
Mekanisme konfirmasi tren dapat secara efektif menyaring sebagian besar sinyal palsu dan meningkatkan tingkat kemenangan.
Stochastic RSI berfungsi sebagai penilaian tambahan, membantu menilai kekuatan tren pada tahap awal dan memperingatkan potensi pembalikan pada tahap akhir.
Logika strategi sederhana dengan beberapa parameter, membuatnya mudah dimengerti dan diimplementasikan.
EMA adalah indikator yang tertinggal dan dapat mengakibatkan slippage yang signifikan pada awal pembalikan tren.
Strategi yang mengikuti tren biasanya berkinerja buruk di pasar yang berbelit-belit.
Stochastic RSI dapat menghasilkan sinyal yang menyesatkan selama volatilitas pasar yang ekstrim, mempengaruhi kualitas penilaian.
Parameter tetap mungkin tidak beradaptasi dengan semua kondisi pasar, yang membutuhkan penyesuaian dinamis berdasarkan karakteristik pasar.
Memperkenalkan indikator volatilitas seperti ATR untuk menyesuaikan parameter EMA secara dinamis dan beradaptasi dengan irama pasar yang berbeda.
Tambahkan penilaian untuk pasar yang terikat rentang, seperti menggabungkan lebar Bollinger Bands, untuk menghindari perdagangan yang sering dalam kondisi bergolak.
Masukkan lebih banyak kriteria tambahan di atas Stochastic RSI, seperti perubahan volume, untuk meningkatkan keandalan sinyal.
Mempertimbangkan korelasi pasar dan memperkenalkan sinyal antar pasar multi-aset untuk meningkatkan ketahanan risiko sistem.
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')