Chiến lược này là một chiến lược theo dõi dao động RSI dựa trên các điều chỉnh hàng năm. Bằng cách theo dõi các đặc điểm dao động của chỉ số RSI giữa các dải trên và dưới được thiết lập, các tín hiệu giao dịch được phát hành khi chỉ số RSI chạm vào dải trên và dưới.
Các phương pháp như điều chỉnh các thông số RSI, phạm vi chu kỳ giao dịch, tỷ lệ dừng lỗ / lợi nhuận có thể được sử dụng để tối ưu hóa.
Chiến lược này theo dõi xu hướng bằng các đặc điểm dao động chu kỳ hàng năm của RSI, kiểm soát hiệu quả rủi ro giao dịch.
/*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)