RSI EMA Crossover Strategi

Penulis:ChaoZhang, Tarikh: 2023-10-25 11:46:49
Tag:

img

Ringkasan

Strategi ini menggunakan prinsip persilangan purata bergerak eksponensial (EMA), digabungkan dengan penunjuk RSI, untuk menentukan arah trend untuk kemasukan dan keluar.

Logika Strategi

Strategi ini menggunakan 3 garis EMA dengan tempoh yang berbeza - garis pantas, sederhana dan perlahan. Isyarat beli dihasilkan apabila EMA pantas melintasi EMA sederhana, dan isyarat jual dihasilkan apabila EMA pantas melintasi EMA sederhana.

Strategi ini juga menggabungkan penunjuk RSI untuk mengukur keadaan overbought dan oversold. RSI mengira nisbah rata-rata hari naik kepada rata-rata hari turun dalam tempoh untuk menunjukkan kekuatan relatif aset. Nilai di atas ambang ambang overbought menandakan keadaan overbought, sementara nilai di bawah ambang oversold menandakan keadaan oversold.

Syarat pembelian untuk strategi adalah:

  1. Penembusan harga di atas garis EMA pantas, sederhana dan perlahan
  2. RSI melintasi sempadan oversold

Syarat jualan adalah:

  1. EMA cepat melintasi EMA sederhana
  2. RSI melintasi di bawah garis sederhana

Menggunakan persilangan EMA untuk menentukan arah trend digabungkan dengan RSI untuk mengenal pasti peluang pembalikan jangka pendek, strategi ini menggunakan kedua-dua konsep trend berikut dan pembalikan purata.

Analisis Kelebihan

Strategi ini menggabungkan persilangan EMA dan RSI untuk mengukur kedua-dua trend dan tahap overbought / oversold, menapis pecah palsu dan perdagangan bising.

Tetapan RSI membolehkan strategi untuk masuk dan keluar pada kawasan overbought / oversold yang menguntungkan.

Keperluan untuk harga untuk memecahkan semua 3 garis EMA sebelum memasuki perdagangan membantu mengelakkan whipsawed.

Analisis Risiko

Seperti semua strategi backtested, strategi ini menghadapi risiko overfit backtest. Perubahan keadaan pasaran dalam perdagangan langsung boleh menjadikan parameter yang dioptimumkan tidak sesuai.

Dalam pasaran yang berbeza, strategi boleh menghasilkan isyarat palsu dan mengalami kerugian.

Penyesuaian parameter RSI yang buruk boleh menyebabkan peluang yang hilang atau isyarat palsu.

Peluang Peningkatan

  1. Pertimbangkan untuk menambah pengesahan pada jangka masa yang lebih tinggi untuk mengelakkan bunyi bising.

  2. Tunggu untuk menguji semula garis EMA sebelum memasuki perdagangan untuk mengesahkan isyarat.

  3. Masukkan penunjuk lain seperti MACD, Bollinger Bands untuk pengesahan isyarat gabungan.

  4. Gunakan pembelajaran mesin untuk mengoptimumkan parameter untuk ketahanan.

  5. Pertimbangkan untuk menambah stop loss untuk keluar dari trend yang tidak pasti dengan cepat.

Kesimpulan

Strategi ini menggabungkan persilangan EMA dan RSI untuk mengenal pasti trend sambil mengambil kesempatan daripada pembalikan jangka pendek. Ia menggunakan kedua-dua konsep trend berikut dan pembalikan purata dengan cekap. Terdapat ruang untuk pengoptimuman melalui pengesahan isyarat, penyesuaian parameter, stop loss dan sebagainya. Tetapi overfit backtest perlu dipertimbangkan, dan prestasi langsung harus dinilai. Secara keseluruhan, ini berfungsi sebagai rujukan yang berguna untuk pembelajaran, tetapi memerlukan pengesahan lanjut di pasaran langsung.


/*backtest
start: 2023-09-24 00:00:00
end: 2023-10-24 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © chadsadachai

//@version=5
strategy("EMA Cross V1", overlay= true)

//rsi
length = input.int(title = "Rsi Lenght" , defval=26 , minval=1, maxval=50)
overS = input.int(title = "Rsi OVS line" , defval=30 , minval=1, maxval=40)
overB = input.int(title = "Rsi OVB line" , defval=70 , minval=1, maxval=100)
mLine = input.int(title = "Rsi Medium line" , defval=42 , minval=1, maxval=60)
price = close
vrsi = ta.rsi(price, length)
co = vrsi >= mLine and vrsi < overB 
cu = ta.crossunder(vrsi, overB)
//ema
F = input.int(title = "EMA Fast" , defval=17 , minval=1, maxval=50)
M = input.int(title = "EMA Medium" , defval=35, minval=1, maxval=100)
S = input.int(title = "EMA Slow" , defval=142, minval=1, maxval=200)
emaF = ta.ema(price , F)
emaM = ta.ema(price , M)
emaS = ta.ema(price , S)

//plot
plot(emaF , color = color.green , linewidth=1)
plot(emaM , color = color.yellow , linewidth=1)
plot(emaS , color = color.red , linewidth=1)

//Time Stamp
start = timestamp(input.int(title = "Start Year" , defval=2011 , minval=2011, maxval=2025), input.int(title = "Start Month" , defval=1 , minval=1, maxval=12), input.int(title = "Start Day" , defval=1 , minval=1, maxval=31), 0, 0)
end = timestamp(input.int(title = "End Year" , defval=2025 , minval=2011, maxval=2025), input.int(title = "End Month" , defval=1 , minval=1, maxval=12), input.int(title = "End Day" , defval=1 , minval=1, maxval=31), 0, 0)
// years = input.int(title = "Year" , defval=2018 , minval=2011, maxval=2025)
// months = input.int(title = "Month" , defval=1 , minval=1, maxval=12)
// days = input.int(title = "Day" , defval=1 , minval=1, maxval=31)

//longCondition Default
// longCondition1 = EMA_Fast >= EMA_Slow and EMA_Fast >= EMA_Medium//ta.crossover(EMA_Fast, EMA_Slow)  EMA_Fast > EMA_Slow and EMA_Medium > EMA_Slow
// longCondition3 = price >= EMA_Medium and price > EMA_Slow
// longCondition2 = vrsi >= overSold and vrsi <= overBought 

//longCondition & shortCondition ETHUSD
// 1.price > emaF > emaM > emaS
// 2.rsi overcross overS
longC1 = price > emaF and price > emaM and price > emaS 
// longC1 = ta.crossover(emaF, emaM)
longC2 = if longC1
    co
// shortC1 = EMA_Fast < EMA_Medium //and EMA_Fast < EMA_Slow and EMA_Medium < EMA_Slow //and cu
// shortC2 = overBought > vrsi //and vrsi < overBought //overSold < vrsi and vrsi < mediumLine

// exitLong Condition
// 1.price < emaF < emaM < emaS
// 2.rsi overcross mediumLine
exitLong1 = ta.crossunder(emaF, emaM) //or emaF < emaM//and price < emaM and price < emaF
exitLong2 = ta.crossunder(vrsi,mLine)
//exitLong3 = price < emaM
//strategy.entry
if time >=start and time <=end
    strategy.entry("Buy", strategy.long , when = longC1 and longC2)

// if(exitLong1 or exitLong2)
strategy.close("Buy" , when = exitLong1 or exitLong2)
    
// exitShort1 = EMA_Fast > EMA_Medium
// //exitShort2 = ta.crossover(vrsi , mediumLine) 
// exitShort2 = ta.crossunder (vrsi,mediumLine)
// strategy.close("Short" , when = exitShort1 or exitShort2)
// //shortCondition = cu


// //if (shortCondition1 and shortCondition2)
//     //strategy.entry("My Short Entry Id", strategy.short)


Lebih lanjut