This is an intelligent trading strategy combining dual timeframe Supertrend indicators with RSI. The strategy coordinates Supertrend indicators from 5-minute and 60-minute timeframes, confirms trading signals with RSI, and includes comprehensive position management mechanisms. It supports both intraday and positional trading modes, offering flexible options for take-profit, stop-loss, and trailing stop-loss settings.
The strategy operates on the following core logic: 1. Uses Supertrend indicator with ATR period of 10 and factor 3.0, calculated on both 5-minute and 60-minute timeframes. 2. Generates buy signals when Supertrend indicators on both timeframes are bullish and RSI is above 60. 3. Generates sell signals when Supertrend indicators on both timeframes are bearish and RSI is below 40. 4. Closes positions when the 5-minute Supertrend indicator changes direction. 5. Prevents selling when 60-minute Supertrend is bullish and buying when it’s bearish. 6. Provides point-based or percentage-based take-profit, stop-loss, and trailing stop-loss features. 7. In intraday mode, only opens positions during specified trading sessions.
This is a well-designed, logically rigorous trend-following strategy. It achieves reliable trading signals through multi-timeframe coordination and RSI confirmation. The comprehensive risk control mechanisms and flexible parameter settings make it valuable for practical application. Traders are advised to thoroughly test parameters and optimize them according to specific trading instruments and market conditions before live implementation.
/*backtest
start: 2024-10-01 00:00:00
end: 2024-10-31 23:59:59
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
// Author: Debabrata Saha
strategy("Supertrend Dual Timeframe with RSI", overlay=true)
// Input for System Mode (Positional/Intraday)
systemMode = input.string("Intraday", title="System Mode", options=["Intraday", "Positional"])
// Input for Intraday Session Times
startSession = input(timestamp("2023-10-01 09:15"), title="Intraday Start Session (Time From)")
endSession = input(timestamp("2023-10-01 15:30"), title="Intraday End Session (Time To)")
// Input for Target Settings (Off/Points/%)
targetMode = input.string("Off", title="Target Mode", options=["Off", "Points", "%"])
target1Value = input.float(10, title="Target 1 Value", step=0.1)
target2Value = input.float(20, title="Target 2 Value", step=0.1)
// Input for Stoploss Settings (Off/Points/%)
stoplossMode = input.string("Off", title="Stoploss Mode", options=["Off", "Points", "%"])
stoplossValue = input.float(10, title="Stoploss Value", step=0.1)
// Input for Trailing Stop Loss (Off/Points/%)
trailStoplossMode = input.string("Off", title="Trailing Stoploss Mode", options=["Off", "Points", "%"])
trailStoplossValue = input.float(5, title="Trailing Stoploss Value", step=0.1)
// Supertrend settings
atrPeriod = input(10, title="ATR Period")
factor = input(3.0, title="Supertrend Factor")
// Timeframe definitions
timeframe5min = "5"
timeframe60min = "60"
// Supertrend 5-min and 60-min (ta.supertrend returns two values: [Supertrend line, Buy/Sell direction])
[st5minLine, st5minDirection] = ta.supertrend(factor, atrPeriod)
[st60minLine, st60minDirection] = request.security(syminfo.tickerid, timeframe60min, ta.supertrend(factor, atrPeriod))
// RSI 5-min
rsi5min = ta.rsi(close, 14)
// Conditions for Buy and Sell signals
isSupertrendBuy = (st5minDirection == 1) and (st60minDirection == 1)
isSupertrendSell = (st5minDirection == -1) and (st60minDirection == -1)
buyCondition = isSupertrendBuy and (rsi5min > 60)
sellCondition = isSupertrendSell and (rsi5min < 40)
// Exit conditions
exitBuyCondition = st5minDirection == -1
exitSellCondition = st5minDirection == 1
// Intraday session check
inSession = true
// Strategy Logic (Trades only during the intraday session if systemMode is Intraday)
if (buyCondition and inSession)
strategy.entry("Buy", strategy.long)
if (sellCondition and inSession)
strategy.entry("Sell", strategy.short)
// Exit logic using strategy.close() to close the position at market price
if (exitBuyCondition)
strategy.close("Buy")
if (exitSellCondition)
strategy.close("Sell")
// No Sell when 60-min Supertrend is green and no Buy when 60-min Supertrend is red
if isSupertrendSell and (st60minDirection == 1)
strategy.close("Sell")
if isSupertrendBuy and (st60minDirection == -1)
strategy.close("Buy")
// Target Management
if (targetMode == "Points")
strategy.exit("Target 1", "Buy", limit=close + target1Value)
strategy.exit("Target 2", "Sell", limit=close - target2Value)
if (targetMode == "%")
strategy.exit("Target 1", "Buy", limit=close * (1 + target1Value / 100))
strategy.exit("Target 2", "Sell", limit=close * (1 - target2Value / 100))
// Stoploss Management
if (stoplossMode == "Points")
strategy.exit("Stoploss", "Buy", stop=close - stoplossValue)
strategy.exit("Stoploss", "Sell", stop=close + stoplossValue)
if (stoplossMode == "%")
strategy.exit("Stoploss", "Buy", stop=close * (1 - stoplossValue / 100))
strategy.exit("Stoploss", "Sell", stop=close * (1 + stoplossValue / 100))
// Trailing Stop Loss
if (trailStoplossMode == "Points")
strategy.exit("Trail SL", "Buy", trail_price=na, trail_offset=trailStoplossValue)
strategy.exit("Trail SL", "Sell", trail_price=na, trail_offset=trailStoplossValue)
if (trailStoplossMode == "%")
strategy.exit("Trail SL", "Buy", trail_price=na, trail_offset=trailStoplossValue / 100 * close)
strategy.exit("Trail SL", "Sell", trail_price=na, trail_offset=trailStoplossValue / 100 * close)