Aliran berbilang tempoh mengikut strategi dagangan berdasarkan EMA dan Stochastic RSI


Tarikh penciptaan: 2024-03-08 17:32:38 Akhirnya diubah suai: 2024-03-08 17:32:38
Salin: 3 Bilangan klik: 772
1
fokus pada
1617
Pengikut

Aliran berbilang tempoh mengikut strategi dagangan berdasarkan EMA dan Stochastic RSI

Gambaran Keseluruhan Strategi

Strategi ini dinamakan “strategi perdagangan trend mengikut trend pelbagai kitaran berdasarkan EMA dan RSI rawak”, menggunakan purata bergerak indeks (EMA) dan RSI rawak dari dua kitaran yang berbeza untuk menangkap trend jangka panjang dan sederhana di pasaran. Idea utama strategi ini adalah untuk menilai arah trend melalui persilangan EMA, sambil menggabungkan RSI rawak sebagai pengesahan trend dan isyarat amaran pembalikan, untuk membina kedudukan pada awal pembentukan trend dan posisi rata pada akhir trend.

Prinsip Strategi

  1. Hitung EMA pantas dan EMA perlahan. Parameter default EMA pantas adalah 12, parameter default EMA perlahan adalah 25, yang boleh disesuaikan dengan ciri-ciri pasaran dan kekerapan perdagangan dalam aplikasi sebenar.

  2. Untuk menilai kecenderungan kelembapan udara:

  • Apabila EMA pantas di atas EMA perlahan, menghasilkan tanda melihat lebih
  • Apabila EMA pantas di bawah EMA perlahan, menghasilkan isyarat kosong
  1. Pengesahan trend: Setelah munculnya isyarat melihat lebih / melihat lebih, 2 garis K yang muncul secara berturut-turut diperlukan untuk mengesahkan trend terbentuk. Ini membantu menyaring isyarat palsu.

  2. Menggunakan RSI rawak sebagai penilaian tambahan:

  • Apabila RSI% K secara rawak melintasi nilai% D dan nilai% K berada di bawah 20, ia menghasilkan isyarat oversold yang menunjukkan kemungkinan kenaikan
  • Apabila RSI %K rawak menembusi nilai %D dan nilai %K berada di atas 80, ia menghasilkan isyarat overbought yang menunjukkan kemungkinan pembalikan penurunan
  1. Strategi perdagangan:
  • Apabila EMA menghasilkan isyarat melihat lebih dan RSI secara rawak tidak berada di kawasan overbought, buka lebih banyak kedudukan
  • Apabila EMA menghasilkan isyarat bullish dan RSI rawak tidak berada di kawasan oversold, kosongkan kedudukan

Kelebihan Strategik

  1. Menggunakan EMA dua kitaran yang berbeza pada masa yang sama dapat menyeimbangkan sensitiviti dan kebolehpercayaan menangkap trend dengan lebih baik. Analisis menunjukkan bahawa gabungan EMA kitaran 1225 lebih baik untuk menangkap trend jangka panjang.

  2. Mekanisme pengesahan trend dapat menyaring kebanyakan isyarat palsu dan meningkatkan peluang strategi untuk menang.

  3. RSI rawak berfungsi sebagai penilaian tambahan, membantu menentukan kekuatan trend pada awal trend, dan memberi amaran terdahulu mengenai kemungkinan pembalikan trend pada akhir trend.

  4. Logik strategi mudah, parameter yang lebih sedikit, mudah difahami dan dilaksanakan, dan sesuai untuk pelbagai pasaran dan varieti.

Analisis risiko

  1. EMA adalah penunjuk ketinggalan, di mana terdapat kemungkinan penurunan yang lebih besar pada permulaan pembalikan trend.

  2. Strategi trend biasanya berlaku di bandar yang bergolak. Strategi ini tidak mempunyai penilaian khusus untuk bandar yang bergolak.

  3. RSI secara rawak boleh menjadi tidak benar apabila pasaran berubah-ubah dengan kuat, menjejaskan kualiti penghakiman.

  4. Parameter tetap mungkin tidak sesuai dengan semua keadaan pasaran dan perlu disesuaikan dengan dinamik ciri-ciri pasaran.

Arah pengoptimuman

  1. Memperkenalkan penunjuk kadar turun naik seperti ATR, menyesuaikan parameter EMA mengikut kadar turun naik yang dinamik, untuk menyesuaikan diri dengan irama pasaran yang berbeza.

  2. Tambah penghakiman terhadap pasaran goyah, seperti arah pembukaan Brin Belt, dan lain-lain, untuk mengelakkan perdagangan yang kerap di pasaran goyah.

  3. Mengintegrasikan lebih banyak kesimpulan tambahan, seperti perubahan jumlah lalu lintas, berdasarkan RSI rawak meningkatkan kebolehpercayaan isyarat.

  4. Mengambil kira keserasian pasaran, memperkenalkan pelbagai jenis isyarat sambungan, meningkatkan ketahanan sistem terhadap risiko.

ringkaskan

Strategi ini memanfaatkan sepenuhnya kelebihan EMA dan RSI secara rawak untuk membentuk satu set strategi perdagangan jangka menengah dan jangka panjang berdasarkan trend tracking dan pergerakan berbalik. Melalui trend capture crossover, pengesahan kekuatan trend RSI secara rawak dan pembalikan amaran, mekanisme pengesahan trend meningkatkan kualiti isyarat, ketiga-tiganya digabungkan secara organik, membentuk kerangka strategi perdagangan kuantitatif yang mudah dan berkesan.

Kod 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')