
This strategy is a dynamic exit system based on the Relative Strength Index (RSI), capturing market trends through dynamic entry and exit conditions. The strategy generates trading signals when RSI breaks through overbought and oversold levels, incorporating a unique dynamic exit mechanism by setting exit conditions at different RSI levels to optimize trading performance. It employs a complete long-short trading system capable of capturing opportunities in both market directions.
The core logic includes several key components: 1. Signal Generation: Uses RSI overbought/oversold levels (70⁄30) as primary trading signals. Buy signals are generated when RSI crosses above 30, sell signals when crossing below 70. 2. Position Management: Implements a single position principle, ensuring only one directional position at any time to effectively control risk exposure. 3. Dynamic Exit Mechanism: Sets differentiated RSI exit levels (60 for longs/40 for shorts), with this asymmetric design better adapting to market trend characteristics. 4. Visualization Module: Plots RSI line, overbought/oversold levels, and exit levels on the chart for intuitive market state understanding.
This is a well-designed momentum trading strategy that captures market opportunities through RSI indicators and dynamic exit mechanisms. The strategy’s main features are its high systematic nature, robust risk control, and strong adaptability. While inherent risks exist, there is significant room for improvement through parameter optimization and functional extensions. For investors seeking a robust trading system, this represents a worthy strategy framework to consider.
/*backtest
start: 2024-10-01 00:00:00
end: 2024-10-31 23:59:59
period: 3h
basePeriod: 3h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("RSI Strategy with Close Levels", shorttitle="RSI Strat", overlay=true)
// RSI Input settings
rsiLength = input.int(14, title="RSI Length")
rsiOverbought = input.int(70, title="RSI Overbought Level")
rsiOversold = input.int(30, title="RSI Oversold Level")
rsiCloseLongLevel = input.int(60, title="RSI Level to Close Long Position")
rsiCloseShortLevel = input.int(40, title="RSI Level to Close Short Position")
// Calculate RSI
rsi = ta.rsi(close, rsiLength)
// Generate buy and sell signals based on RSI levels
buySignal = ta.crossover(rsi, rsiOversold)
sellSignal = ta.crossunder(rsi, rsiOverbought)
// Check if there are open positions
var bool inPosition = na
if (strategy.opentrades > 0)
inPosition := true
else
inPosition := false
// Open long position on buy signal if not already in a position
if (buySignal and not inPosition)
strategy.entry("Buy", strategy.long)
inPosition := true
// Close long position on sell signal or when RSI reaches the close long level
if (inPosition and strategy.position_size > 0 and (sellSignal or rsi >= rsiCloseLongLevel))
strategy.close("Buy")
inPosition := false
// Open short position on sell signal if not already in a position
if (sellSignal and not inPosition)
strategy.entry("Sell", strategy.short)
inPosition := true
// Close short position on buy signal or when RSI reaches the close short level
if (inPosition and strategy.position_size < 0 and (buySignal or rsi <= rsiCloseShortLevel))
strategy.close("Sell")
inPosition := false
// Plot buy and sell signals
//plotshape(series=buySignal, title="Buy Signal", location=location.belowbar, color=color.green, style=shape.labelup, text="BUY")
//plotshape(series=sellSignal, title="Sell Signal", location=location.abovebar, color=color.red, style=shape.labeldown, text="SELL")
// Plot RSI for visualization
hline(rsiOverbought, "RSI Overbought", color=color.red)
hline(rsiOversold, "RSI Oversold", color=color.green)
hline(rsiCloseLongLevel, "RSI Close Long Level", color=color.blue)
hline(rsiCloseShortLevel, "RSI Close Short Level", color=color.purple)
plot(rsi, title="RSI", color=color.orange)