Strategi ini adalah strategi pelacakan osilasi RSI berdasarkan penyesuaian tahunan. Dengan melacak karakteristik osilasi indikator RSI antara band atas dan bawah yang ditetapkan, sinyal perdagangan dikeluarkan ketika indikator RSI menyentuh band atas dan bawah.
Metode seperti penyesuaian parameter RSI, rentang siklus perdagangan, rasio stop loss / profit dapat digunakan untuk mengoptimalkan.
Strategi ini melacak tren dengan fitur osilasi siklus tahunan RSI, secara efektif mengendalikan risiko perdagangan.
/*backtest start: 2024-01-01 00:00:00 end: 2024-01-31 23:59:59 period: 2h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=3 strategy(title = "Bitlinc MARSI Study AST",shorttitle="Bitlinc MARSI Study AST",default_qty_type = strategy.percent_of_equity, default_qty_value = 100,commission_type=strategy.commission.percent,commission_value=0.1,initial_capital=1000,currency="USD",pyramiding=0, calc_on_order_fills=false) // === General Inputs === lengthofma = input(62, minval=1, title="Length of MA") len = input(31, minval=1, title="Length") upperband = input(89, minval=1, title='Upper Band for RSI') lowerband = input(10, minval=1, title="Lower Band for RSI") takeprofit =input(1.25, title="Take Profit Percent") stoploss =input(.04, title ="Stop Loss Percent") monthfrom =input(8, title = "Month Start") monthuntil =input(12, title = "Month End") dayfrom=input(1, title= "Day Start") dayuntil=input(31, title= "Day End") // === Innput Backtest Range === //FromMonth = input(defval = 9, title = "From Month", minval = 1, maxval = 12) //FromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31) //FromYear = input(defval = 2018, title = "From Year", minval = 2017) //ToMonth = input(defval = 1, title = "To Month", minval = 1, maxval = 12) //ToDay = input(defval = 1, title = "To Day", minval = 1, maxval = 31) //ToYear = input(defval = 9999, title = "To Year", minval = 2017) // === Create RSI === src=sma(close,lengthofma) up = rma(max(change(src), 0), len) down = rma(-min(change(src), 0), len) rsi = down == 0 ? 100 : up == 0 ? 0 : 100 - (100 / (1 + up / down)) plot(rsi,linewidth = 2, color=purple) // === Plot Bands === band1 = hline(upperband) band0 = hline(lowerband) fill(band1, band0, color=blue, transp=95) // === Entry and Exit Methods === longCond = crossover(rsi,lowerband) shortCond = crossunder(rsi,upperband) // === Long Entry Logic === if ( longCond ) strategy.entry("LONG", strategy.long, stop=close, oca_name="TREND", comment="LONG") else strategy.cancel(id="LONG") // === Short Entry Logic === if ( shortCond ) strategy.entry("SHORT", strategy.short,stop=close, oca_name="TREND", comment="SHORT") else strategy.cancel(id="SHORT") // === Take Profit and Stop Loss Logic === //strategy.exit("Take Profit LONG", "LONG", profit = close * takeprofit / syminfo.mintick, loss = close * stoploss / syminfo.mintick) //strategy.exit("Take Profit SHORT", "SHORT", profit = close * takeprofit / syminfo.mintick, loss = close * stoploss / syminfo.mintick) strategy.exit("LONG TAKE PROFIT", "LONG", profit = close * takeprofit / syminfo.mintick) strategy.exit("SHORT STOP LOSS", "SHORT", profit = close * takeprofit / syminfo.mintick) strategy.exit("LONG STOP LOSS", "LONG", loss = close * stoploss / syminfo.mintick) strategy.exit("SHORT STOP LOSS", "SHORT", loss = close * stoploss / syminfo.mintick)