Strategi mengikuti tren untuk persilangan RSI dan MA


Tanggal Pembuatan: 2024-02-20 15:31:15 Akhirnya memodifikasi: 2024-02-20 15:31:15
menyalin: 1 Jumlah klik: 850
1
fokus pada
1617
Pengikut

Strategi mengikuti tren untuk persilangan RSI dan MA

Ringkasan

Strategi ini menilai tren pasar dan waktu masuk entrada melalui persilangan indikator RSI dengan rata-rata MA dari dua periode yang berbeda. Strategi ini hanya melakukan over trade ketika RSI lebih tinggi dari rata-rata 26 periode sendiri, dan mengambil posisi kosong ketika RSI lebih rendah dari rata-rata 26 periode sendiri, untuk mengendalikan risiko.

Prinsip Strategi

Strategi ini menggunakan dua garis rata-rata MA 12 siklus dan 26 siklus. Ketika 12 siklus cepat melewati 26 siklus lambat, pasar dianggap masuk ke tren naik; Ketika cepat melewati garis lambat, pasar dianggap masuk ke tren turun.

Pada saat yang sama, strategi memperkenalkan indikator RSI untuk menilai zona overbought dan oversold. Hanya jika RSI lebih tinggi dari 26 siklus rata-rata sendiri, maka posisi overbought akan dibuka pada saat persimpangan emas terjadi pada rata-rata; hanya jika RSI lebih rendah dari 26 siklus rata-rata sendiri, maka posisi overbought akan dibuka pada saat persimpangan mati terjadi pada rata-rata.

Analisis Keunggulan

Strategi ini menggabungkan garis rata-rata dan indikator RSI untuk menilai tren dan waktu masuk, yang dapat secara efektif melacak tren. Menggunakan indikator RSI sebagai kondisi penyaringan, dapat mengurangi jumlah posisi yang dibuka, dan menghindari terjebak dalam situasi yang bergolak. Tidak menetapkan stop loss, dapat sepenuhnya melacak tren untuk mendapatkan keuntungan yang lebih tinggi.

Analisis risiko

Karena tidak menetapkan stop loss, jika penilaian salah, kerugian dapat diperbesar. Jika pasar mengalami lonjakan besar, kerugian yang lebih besar juga dapat terjadi. Selain itu, kondisi penyaringan RSI jika tidak diatur dengan benar, kemungkinan kehilangan waktu masuk yang lebih baik.

Anda dapat mempertimbangkan untuk mengatur stop loss untuk mengontrol kerugian maksimum. Anda dapat menyesuaikan parameter RSI dengan tepat untuk mencari kondisi penyaringan yang lebih baik. Anda dapat menyesuaikan parameter rata-rata dengan tepat jika ada banyak fluktuasi pasar, dan menggunakan rata-rata yang lebih lambat untuk menilai tren.

Arah optimasi

Strategi ini dapat dioptimalkan dalam beberapa hal:

  1. Uji kombinasi garis rata-rata MA dari periode yang berbeda untuk mencari parameter garis rata-rata yang lebih cocok dengan karakteristik pasar saat ini.

  2. Uji parameter siklus RSI yang berbeda, kondisi penyaringan yang berbeda, optimasi waktu masuk.

  3. Menambahkan indikator lain atau kondisi penyaringan untuk meningkatkan stabilitas sistem. Sebagai contoh, menambahkan indikator kuantitatif, indikator volume transaksi, dan lain-lain yang terkait dengan penilaian tren.

  4. Mengoptimalkan strategi stop loss, mengendalikan risiko sambil mengikuti tren. Anda dapat menguji strategi stop loss seperti stop loss tracking, stop loss persentase, dan stop loss dinamis.

Meringkaskan

Strategi ini secara keseluruhan lebih sederhana dan langsung, dengan menilai tren dengan garis rata, RSI menghindari membuka posisi secara paksa, sehingga mengikuti tren untuk mendapatkan keuntungan yang lebih baik. Strategi ini dapat disempurnakan lebih lanjut dengan cara mengoptimalkan parameter, menambahkan indikator lain, dan lain-lain, sehingga lebih cocok untuk lingkungan pasar yang kompleks dan berubah-ubah.

Kode Sumber Strategi
/*backtest
start: 2023-02-13 00:00:00
end: 2024-02-19 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2

strategy(title = "EMA Cross Strategy", shorttitle = "EMA Cross",calc_on_order_fills=true,calc_on_every_tick =true, initial_capital=21000,commission_value=.25,overlay = true,default_qty_type = strategy.percent_of_equity, default_qty_value = 100)
StartYear = input(2018, "Backtest Start Year")
StartMonth = input(1, "Backtest Start Month")
StartDay = input(1, "Backtest Start Day")
UseStopLoss = input(false,"UseStopLoss")
//rsiLong = true
rsi1 = rsi(close, 14)

window() => true

stopLoss = input(20, title = "Stop loss percentage(0.1%)")
//stopLoss = input(200, title = "Stop loss percentage(0.1%)")

maFastSource   = input(defval = open, title = "Fast MA Source")
maFastLength   = input(defval = 12, title = "Fast MA Period", minval = 1)
// long ma
maSlowSource   = input(defval = open, title = "Slow MA Source")
maSlowLength   = input(defval = 26, title = "Slow MA Period", minval = 1)

maFast = ema(maFastSource, maFastLength)
maSlow = ema(maSlowSource, maSlowLength)

//12 and 26=9%; 3 and8=2%; 26 and 55=2%; when selling on a cross under
//maFastRSI = ema(rsi1, 12)
//maSlowRSI = ema(rsi1, 26)

fast = plot(maFast, title = "Fast MA", color = #7a8598, linewidth = 2, style = line, transp = 50)
slow = plot(maSlow, title = "Slow MA", color = #e08937, linewidth = 2, style = line, transp = 50)


longEMA = crossover(maFast, maSlow)
exitLong = crossunder(maFast, maSlow) // 5% in 2018
//exitLong = crossunder(close, maFast) // 15% in 2018
//exitLong = crossunder(rsi1, maFastRSI) // 13%

shortEMA = crossover(maSlow, maFast)
exitShort = crossover(maFast, maSlow)

//if (rsi1 < ema(rsi1,7))
//rsiLong = false

//if (longEMA and (rsi1 >= highest(rsi1,10)))
//if (longEMA)
if (longEMA and (rsi1 > ema(rsi1,26)))  //RSI ema values optimal from 19 to 35
    strategy.entry("LongId", strategy.long, when=window())

//strategy.close_all(when = rsi1 > 60) // 80=26%, 90=n/a, 70=15%, 60=16% long only
//strategy.close_all(when = (shortEMA and (rsi1 <= ema(rsi1,26)))) //10% gain in 2018 long only
//strategy.close_all(when = (rsi1 <= ema(rsi1,120))) //26=17% 14=2% 42=15%
//strategy.close_all(when = (shortEMA)) // 5% gain in 2018 long only
//strategy.close_all(when = exitLong) 

//if (shortEMA and not(rsiLong))
//if (shortEMA)
if (shortEMA and (rsi1 <= ema(rsi1,26)))
    strategy.entry("ShortId", strategy.short, when=window())

if (UseStopLoss)
    strategy.exit("StopLoss", "LongId", loss = close * stopLoss / 1000 / syminfo.mintick)
    strategy.exit("StopLoss", "ShortId", loss = close * stopLoss / 1000 / syminfo.mintick)