This strategy is an advanced trend-following trading system based on the Supertrend indicator, incorporating multiple signal confirmation mechanisms and dynamic position management. The core of the strategy calculates the Supertrend line using ATR (Average True Range) and generates trading signals by combining price movements and position time windows to achieve intelligent market trend capture.
The strategy employs a three-layer signal filtering mechanism:
The strategy employs 15% of account equity as position size per trade, supporting conservative risk management.
This is a well-structured and logically rigorous trend-following strategy with practical application value through its multiple signal confirmation mechanisms and comprehensive risk management system. The strategy’s strong expandability allows for further stability and profitability improvements through the suggested optimization directions.
/*backtest start: 2024-12-06 00:00:00 end: 2025-01-04 08:00:00 period: 1h basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("Supertrend Strategy", overlay=true) atrPeriod = input(10, "ATR Length") factor = input.float(3.0, "Factor", step=0.01) // Compute supertrend values [supertrendValue, supertrendDirection] = ta.supertrend(factor, atrPeriod) var float direction = na if not na(supertrendDirection[1]) and supertrendDirection[1] != supertrendDirection direction := supertrendDirection > 0 ? 1 : -1 // Variables to track conditions var int lastShortTime = na var int lastLongTime = na // Detecting short and long entries if direction == -1 strategy.entry("My Short Entry Id", strategy.short) lastShortTime := bar_index if direction == 1 strategy.entry("My Long Entry Id", strategy.long) lastLongTime := bar_index // Custom signal logic bool bullishSignal = false bool bearishSignal = false // Define bullish signal conditions if not na(lastShortTime) and (bar_index - lastShortTime >= 15 and bar_index - lastShortTime <= 19) if close > open and close[1] > open[1] and close[2] > open[2] bullishSignal := true // Define bearish signal conditions if not na(lastLongTime) and (bar_index - lastLongTime >= 15 and bar_index - lastLongTime <= 19) if close < open and close[1] < open[1] and close[2] < open[2] bearishSignal := true // Plot signals if bullishSignal strategy.entry("Bullish Upward Signal", strategy.long) label.new(bar_index, close, text="Bullish", style=label.style_circle, color=color.green, textcolor=color.white) if bearishSignal strategy.entry("Bearish Downward Signal", strategy.short) label.new(bar_index, close, text="Bearish", style=label.style_circle, color=color.red, textcolor=color.white) // Optionally plot the strategy equity //plot(strategy.equity, title="Equity", color=color.red, linewidth=2, style=plot.style_areabr)