이 전략은 연간 조정에 기반한 RSI 오스실레이션 추적 전략이다. 설정된 상위 및 하위 대역 사이의 RSI 지표의 오스실레이션 특성을 추적함으로써, RSI 지표가 상위 및 하위 대역에 닿을 때 거래 신호가 발행됩니다.
RSI 매개 변수, 거래 사이클 범위, 스톱 로스/이익 비율을 조정하는 방법과 같은 방법을 최적화 할 수 있습니다.
이 전략은 RSI의 연주기 오스실레이션 특징에 의해 트렌드를 추적하여 거래 위험을 효과적으로 제어합니다. 매개 변수 조정 및 논리 최적화로 더 많은 성능 향상을 달성 할 수 있습니다.
/*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)