Strategi RSI Moving Average Trend Tracking adalah strategi perdagangan saham automatik yang menggunakan kedua-dua analisis trend dan penunjuk overbought-oversold. Strategi ini menggunakan purata bergerak mudah untuk menentukan arah trend pasaran dan menggabungkan penunjuk Indeks Kekuatan Relatif (RSI) untuk menghasilkan isyarat perdagangan, merealisasikan penilaian trend dan penjejakan.
Strategi ini terdiri daripada tiga bahagian utama:
Penghakiman trend: Mengira trend jangka panjang dengan purata bergerak mudah 200 hari, dan trend jangka pendek dengan purata bergerak mudah 30 hari dan 50 hari.
Analisis Overbought-Oversold: Mengira penunjuk RSI 14 hari. RSI di atas 80 adalah zon overbought dan di bawah 20 adalah zon oversold. Isyarat perdagangan dihasilkan apabila penunjuk RSI turun dari zon overbought atau naik dari zon oversold.
Masuk dan Keluar: Apabila isyarat overbought atau oversold dikenal pasti, jika arahnya konsisten dengan analisis trend, kedudukan panjang/pendek akan dibuka. Apabila purata bergerak jangka pendek dan jangka panjang mempunyai salib emas, ia dinilai bahawa trend sedang berbalik dan kedudukan sedia ada akan ditutup.
Dengan strategi ini, adalah mungkin untuk memasuki pasaran tepat pada masanya apabila harga berbalik, sambil menapis beberapa perdagangan bising dengan menggabungkan analisis trend, dengan kawalan pengambilan yang agak baik.
Strategi ini mempunyai kelebihan berikut:
Terdapat juga beberapa risiko dengan strategi ini:
Strategi ini boleh dioptimumkan lagi dalam aspek berikut:
Secara umum, Strategi RSI Purata Bergerak Pengesanan Trend adalah idea strategi yang sangat praktikal, menapis bunyi bising pasaran hingga tahap tertentu dengan menggabungkan analisis trend dan penunjuk overbought-oversold, menjadikan isyarat perdagangan lebih tepat dan sah.
/*backtest start: 2022-11-16 00:00:00 end: 2023-11-22 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © mattehalen // INPUT per TIMEFRAME // 5min = Legnth = 9, Source = ohlc4,MaxLoss = 1000 TrendMA = 200, ShortMA = 4, LongMA = 10 // 30min = Legnth = 7, Source = ohlc4,MaxLoss = 1000 TrendMA = 200, ShortMA = 10, LongMA = 20 strategy("Mathias & Christer Timeframe RSI", shorttitle="M&C_RSI",overlay=true, process_orders_on_close = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100) len = input(9, title="Length", type=input.integer) src = input(ohlc4, title="Source", type=input.source) //show4h = input(true, title="show 4h", type=input.bool) maxLoss = input(3000) rsiCurrent = rsi(src, len) //rsi4h = security(syminfo.ticker, "240", rsi(src, len)) rsi4h = rsi(src, len) //-------------------------------------------------- //MA trendMAInput = input(200, title="trendMA", type=input.integer) shortMAInput = input(30, title="shortMA", type=input.integer) longMAInput = input(50, title="longMA", type=input.integer) trendMA = ema(close,trendMAInput) shortMA = ema(close,shortMAInput) longMA = ema(close,longMAInput) plot(trendMA, color=color.black, linewidth=5) plot(shortMA, color=color.red, linewidth=2) plot(longMA, color=color.green, linewidth=2) bgcolor(crossunder(shortMA,longMA) ? color.black : na, transp=10) //-------------------------------------------------- //RSI BuySignalBarssince = barssince(rsi4h[1]<rsi4h[0] and rsi4h[1]<20) BuySignal = (rsi4h[1]<rsi4h[0] and rsi4h[1]<20 and BuySignalBarssince[1]>10) BuySignalOut = crossunder(longMA[1],shortMA[1]) bgcolor(BuySignal ? color.green : na, transp=70) bgcolor(BuySignalOut ? color.green : na, transp=10) SellSignalBarssince = barssince(rsi4h[1]>rsi4h[0] and rsi4h[1]>80) SellSignal = (rsi4h[1]>rsi4h[0] and rsi4h[1]>80 and SellSignalBarssince[1]>10) SellSignalOut = crossunder(shortMA[1],longMA[1]) bgcolor(SellSignal ? color.red : na, transp=70) bgcolor(SellSignalOut ? color.red : na, transp=10) if BuySignal strategy.close("short", comment = "Exit short") strategy.entry("long", true) strategy.exit("Max Loss", "long", loss = maxLoss) if BuySignalOut strategy.close("long", comment = "Exit Long") if SellSignal // Enter trade and issue exit order on max loss. strategy.close("long", comment = "Exit Long") strategy.entry("short", false) strategy.exit("Max Loss", "short", loss = maxLoss) if SellSignalOut // Force trade exit. strategy.close("short", comment = "Exit short") //-------------------------------------------------- //ATR MyAtr = atr(10) AtrFactor = 10 mySLBuy = close[BuySignalBarssince] mySLSell = close[SellSignalBarssince] plotchar(BuySignal, "BuySignal", "⬆", location.belowbar, color.lime,size =size.huge ) plotchar(BuySignalOut, "BuySignalOut", "█", location.belowbar, color.lime,size =size.small) plotchar(SellSignal, "SellSignal", "⬇", location.abovebar ,color.red,size =size.huge) plotchar(SellSignalOut, "SellSignalOut", "█", location.abovebar, color.red,size =size.small)