Strategi ini menentukan tren pasar dan sinyal masuk dengan silang indikator RSI dan dua rata-rata bergerak (MA) dari periode yang berbeda.
Strategi ini menggunakan dua MA dari 12 dan 26 periode. Ketika MA cepat 12 periode melintasi di atas MA lambat 26 periode, itu menandakan tren naik, dan sebaliknya. Strategi ini panjang pada perpindahan emas dan pendek pada perpindahan kematian dari dua MA.
Indikator RSI juga digunakan untuk menentukan zona overbought/oversold. Hanya ketika RSI lebih tinggi dari MA 26 periode, strategi akan membuka posisi panjang pada crossover emas. Dan hanya ketika RSI lebih rendah, ia akan membuka posisi pendek pada crossover kematian. Ini menghindari entri paksa terhadap situasi overbought/oversold dan dengan demikian mengontrol risiko.
Dengan menggabungkan MAs dan RSI untuk analisis tren dan waktu, strategi ini dapat secara efektif melacak tren. Filter RSI mengurangi frekuensi perdagangan dan menghindari whipsaws di pasar berkisar. Tidak menggunakan stop loss memungkinkan mengikuti tren penuh untuk pengembalian yang lebih tinggi.
Tanpa stop loss, kerugian dapat diperkuat pada sinyal yang salah. Gerakan celah besar juga dapat menyebabkan kerugian besar. Juga, filter RSI yang tidak diatur dengan benar dapat menyebabkan sinyal masuk yang baik hilang.
Pertimbangkan untuk menggunakan stop loss untuk mengontrol kerugian maksimum. fine tune parameter RSI untuk filter yang lebih baik. untuk pasar yang tidak stabil, gunakan MAs yang lebih lambat untuk menilai tren.
Strategi ini dapat ditingkatkan dalam hal berikut:
Uji kombinasi MA dari periode yang berbeda untuk menemukan parameter yang paling sesuai dengan kondisi pasar saat ini.
Optimalkan periode RSI dan logika filter untuk waktu masuk yang lebih baik.
Tambahkan indikator lain seperti volume untuk stabilitas sistem yang lebih baik.
Mengoptimalkan strategi stop loss untuk menyeimbangkan tren mengikuti dan pengendalian risiko, misalnya, trailing stop, stop persentase, stop dinamis dll.
Strategi ini relatif sederhana dan langsung, menggunakan MA crossover untuk menentukan tren dan RSI untuk menghindari entri paksa, sehingga melacak tren untuk pengembalian yang baik.
/*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)