
Strategi ini menilai trend pasaran dan masa masuk entrada dengan membezakan RSI dengan purata MA dari dua tempoh yang berbeza. Strategi ini hanya melakukan lebih banyak apabila RSI lebih tinggi daripada purata 26 tempohnya sendiri, dan mengambil posisi kosong apabila RSI lebih rendah daripada purata 26 tempohnya sendiri, untuk mengawal risiko.
Strategi ini menggunakan dua garis purata MA 12 kitaran dan 26 kitaran. Apabila 12 kitaran cepat melintasi 26 kitaran perlahan, ia dianggap sebagai tren naik; apabila ia melintasi garis perlahan, ia dianggap sebagai tren menurun.
Pada masa yang sama, strategi memperkenalkan RSI untuk menentukan kawasan overbought dan oversold. Hanya apabila RSI lebih tinggi daripada garis rata-rata 26 siklusnya sendiri, ia akan membuka lebih banyak kedudukan ketika persimpangan emas berlaku pada garis rata-rata; hanya apabila RSI lebih rendah daripada garis rata-rata 26 siklusnya sendiri, ia akan membuka posisi kosong ketika persimpangan mati berlaku pada garis rata-rata. Ini dapat mengelakkan pembukaan posisi yang dipaksakan ketika keadaan terlalu banyak dibeli atau terlalu banyak dijual, dan dengan itu mengawal risiko.
Strategi ini menggabungkan garis rata-rata dan RSI untuk menilai trend dan masa masuk, untuk mengesan trend dengan berkesan. Pengenalan RSI sebagai syarat penapis dapat mengurangkan jumlah pembukaan dan mengelakkan terikat dalam keadaan goyah. Tanpa menetapkan stop loss, anda dapat mengesan trend dengan lebih baik untuk mendapatkan keuntungan yang lebih tinggi.
Oleh kerana tidak menetapkan stop loss, kerugian mungkin akan meningkat jika keputusan yang salah. Jika pasaran mengalami lonjakan besar, kerugian yang lebih besar juga mungkin berlaku. Selain itu, syarat penapisan RSI jika ditetapkan dengan tidak betul, peluang masuk yang lebih baik juga mungkin terlepas.
Anda boleh mempertimbangkan untuk menetapkan stop loss untuk mengawal kerugian maksimum. Anda boleh menyesuaikan parameter RSI dengan sewajarnya untuk mencari keadaan penapisan yang lebih baik. Jika pergerakan pasaran lebih besar, anda boleh menyesuaikan parameter rata-rata dengan sewajarnya, menggunakan rata-rata yang lebih perlahan untuk menilai trend.
Strategi ini boleh dioptimumkan dalam beberapa aspek:
Uji kombinasi garis purata MA dari pelbagai tempoh untuk mencari parameter garis purata yang lebih sesuai dengan ciri-ciri keadaan semasa.
Uji parameter kitaran RSI yang berbeza, syarat penapisan yang berbeza, optimumkan masa kemasukan.
Menambahkan penunjuk lain atau syarat penapisan untuk meningkatkan kestabilan sistem. Sebagai contoh, penambahan penunjuk kuantiti, penunjuk jumlah urus niaga, dan lain-lain yang berkaitan dengan penilaian trend.
Mengoptimumkan strategi hentian kerugian, mengawal risiko sambil mengikuti trend. Anda boleh menguji strategi hentian kerugian seperti hentian jejak, peratusan hentian, dan hentian dinamik.
Strategi ini secara keseluruhan lebih mudah dan langsung, dengan menilai trend dengan menyeberangi garis rata, RSI mengelakkan membuka posisi paksa, sehingga mengikuti trend mencapai keuntungan yang lebih baik. Strategi ini boleh diperbaiki lagi dengan cara mengoptimumkan parameter, menambah indikator lain, dan sebagainya, untuk menjadikannya lebih sesuai dengan persekitaran pasaran yang berubah-ubah yang kompleks.
/*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)