SMA RSI & Strategi Jual Beli Tiba-tiba

Penulis:ChaoZhang, Tanggal: 2023-12-20 17:33:04
Tag:

img

Gambaran umum

Strategi ini terutama menggunakan nilai rata-rata RSI dan perubahan harga mendadak untuk mengidentifikasi tren pasar dan titik pembalikan.

Prinsip-prinsip

  1. Menghitung SMA dari RSI. Ketika RSI SMA melintasi di atas 60 atau turun di bawah 40, itu dianggap overbought atau oversold, dan posisi terbalik akan dipertimbangkan.

  2. Ketika perubahan RSI melebihi nilai tertentu, hal itu dianggap sebagai perubahan tiba-tiba.

  3. Gunakan beberapa EMA untuk penyaringan. Hanya ketika harga melintasi di atas EMA periode pendek, posisi panjang akan dipertimbangkan. Hanya ketika harga turun di bawah EMA periode pendek, posisi pendek akan dipertimbangkan.

  4. Dengan menggabungkan penggunaan rata-rata RSI, perubahan mendadak dan penyaringan EMA, titik masuk yang lebih baik dapat diidentifikasi.

Analisis Keuntungan

  1. Menggunakan rata-rata RSI dapat dengan akurat menilai kondisi overbought dan oversold, yang kondusif untuk menangkap peluang pembalikan.

  2. Perubahan tiba-tiba sering berarti perubahan tren harga dan arah, menggunakan sinyal ini dapat meningkatkan ketepatan waktu entri.

  3. Penyaringan EMA multi-level dapat lebih menghindari sinyal palsu dan mengurangi kerugian yang tidak perlu.

  4. Kombinasi dari beberapa parameter sebagai kriteria keputusan dapat meningkatkan stabilitas dan keandalan strategi.

Risiko dan Pengurangan

  1. Kinerja RSI mungkin tidak stabil dan SMA hit rate mungkin rendah. Parameter RSI dapat dioptimalkan atau indikator lain dapat menggantinya.

  2. Perubahan tiba-tiba mungkin hanya fluktuasi jangka pendek daripada pembalikan yang sebenarnya.

  3. Ada keterlambatan dalam penyaringan arah EMA. Uji EMA jangka pendek untuk meningkatkan sensitivitas.

  4. Secara umum, strategi ini cukup sensitif terhadap penyesuaian parameter. pengujian hati-hati diperlukan untuk menemukan kombinasi parameter yang optimal. Gunakan stop loss untuk mengendalikan risiko.

Saran Optimalisasi

  1. Uji indikator lain seperti ADX, MACD dikombinasikan dengan RSI untuk menemukan titik masuk yang lebih baik.

  2. Meningkatkan algoritma pembelajaran mesin untuk menilai keaslian dan stabilitas sinyal beli / jual tiba-tiba.

  3. Meningkatkan lebih lanjut penyaringan arah EMA seperti menggunakan penilaian komposit dari EMA periode yang berbeda.

  4. Tambahkan strategi stop loss adaptif untuk menyesuaikan rentang stop loss secara dinamis berdasarkan volatilitas pasar.

  5. Lanjutkan pengoptimalan parameter untuk menemukan kombinasi parameter yang optimal. Kriteria evaluasi bisa menjadi rasio Sharpe dll.

Kesimpulan

Strategi ini pertama-tama menggunakan rata-rata RSI untuk menentukan kondisi overbought/oversold. Posisi terbalik kemudian ditetapkan ketika perubahan tiba-tiba terjadi. EMA juga digunakan sebagai filter tambahan. Dengan pengaturan parameter yang tepat, strategi ini dapat secara efektif menentukan pergeseran tren pasar. Secara keseluruhan, ia memiliki stabilitas dan nilai praktis yang baik. Masih ada ruang untuk perbaikan lebih lanjut, yang membutuhkan pengujian dan optimalisasi yang gigih.


/*backtest
start: 2023-12-12 00:00:00
end: 2023-12-19 00:00:00
period: 3m
basePeriod: 1m
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/
// © samwillington

//@version=5


strategy("sma RSI & sudden buy and sell Strategy v1", overlay=true)
price = close
length = input( 14 )
inst_length = input( 10 )
var rbc = 0
var float rsiBP = 0.0
var rsc = 0
var float rsiSP = 0.0
bars = input(10)

lookbackno2 = input.int(20)
rsi_buy = 0
rsi_sell = 0



//EMA inputs

input_ema20 = input.int(20)
ema20 = ta.ema(price, input_ema20)
input_ema50 = input.int(50)
ema50 = ta.ema(price, input_ema50)
input_ema100 = input.int(100)
ema100 = ta.ema(price, input_ema100)
input_ema200 = input.int(200)
ema200 = ta.ema(price, input_ema200)
input_ema400 = input.int(400)
ema400 = ta.ema(price, input_ema400)
input_ema800 = input.int(800)
ema800 = ta.ema(price, input_ema800)


vrsi = ta.rsi(price, length)


hi2 = ta.highest(price, lookbackno2)
lo2 = ta.lowest(price, lookbackno2)

buy_diff_rsi = vrsi - ta.rsi(close[1], length)
sell_diff_rsi = ta.rsi(close[1],length) - vrsi


//RSI high low

var int sudS = 0
var int sudB = 0
var float sudSO = 0.0
var float sudSC = 0.0
var float sudBO = 0.0
var float sudBC = 0.0
var sudBuy = 0
var sudSell = 0 
var countB = 0
var countS = 0



var co_800 = false
var co_400 = false
var co_200 = false
var co_100 = false
var co_50 = false
var co_20 = false

co_800 := ta.crossover(price , ema800)
co_400 := ta.crossover(price , ema400)
co_200 := ta.crossover(price , ema200)
co_100 := ta.crossover(price , ema100)
co_50 := ta.crossover(price , ema50)
co_20 := ta.crossover(price , ema20)

if(ta.crossunder(price , ema20))
    co_20 := false
if(ta.crossunder(price , ema50))
    co_50 := false
if(ta.crossunder(price , ema100))
    co_100 := false
if(ta.crossunder(price , ema200))
    co_200 := false
if(ta.crossunder(price , ema400))
    co_400 := false
if(ta.crossunder(price , ema800))
    co_800 := false
    
if((price> ema800) and (price > ema400))
    if(co_20)
        if(co_50)
            if(co_100)
                if(co_200)
                    strategy.close("Sell")
                    strategy.entry("Buy", strategy.long, comment="spl Buy")
                    co_20 := false
                    co_50 := false
                    co_100 := false
                    co_200 := false



// too much rsi

if(vrsi > 90)
    strategy.close("Buy")
    strategy.entry("Sell", strategy.short, comment="RSI too overbuy")
if(vrsi < 10)
    strategy.close("Sell")
    strategy.entry("Buy", strategy.long, comment="RSI too oversold")


var sudbcount = 0  // counting no. of bars till sudden rise
var sudscount = 0  // counting no. of bars till sudden decrease



if(sudB == 1)
    sudbcount := sudbcount + 1
if(sudS == 1)
    sudscount := sudscount + 1


if((buy_diff_rsi > inst_length) and (hi2 > price))
    sudB := 1
    sudBO := open
    sudBC := close
if((sell_diff_rsi > inst_length) )
    sudS := 1
    sudSO := open
    sudSC := close   

if(sudbcount == bars)
    if(sudBC < price)
        strategy.close("Sell")
        strategy.entry("Buy", strategy.long, comment="sudd buy")
        sudbcount := 0
        sudB := 0
    sudbcount := 0
    sudB := 0
if(sudscount == bars) 
    if(sudSC > price)
        strategy.close("Buy")
        strategy.entry("Sell", strategy.short, comment="sudd sell")
        sudscount := 0
        sudS := 0
    sudscount := 0
    sudS := 0


over40 = input( 40 )
over60 = input( 60 )
sma =ta.sma(vrsi, length)
coo = ta.crossover(sma, over60)
cuu = ta.crossunder(sma, over40)

if (coo)
    strategy.close("Sell")
	strategy.entry("Buy", strategy.long, comment="modified buy")
if (cuu)
    strategy.close("Buy")
	strategy.entry("Sell", strategy.short, comment="modefied sell")
//plot(strategy.equity, title="equity", color=color.red, linewidth=2, style=plot.style_areabr)

Lebih banyak