
Esta é uma estratégia de acompanhamento de tendências baseada no indicador SuperTrend, média móvel exponencial (MME) e intervalo médio verdadeiro (ATR). Essa estratégia usa vários indicadores técnicos em conjunto com stop loss inicial e stop loss móvel para obter rastreamento dinâmico de tendências de mercado e controle de risco. O núcleo da estratégia é capturar mudanças na direção da tendência por meio do indicador SuperTrend, usar EMA para confirmação da tendência e definir um mecanismo de stop-loss duplo para proteger os lucros.
A estratégia opera com base nos seguintes componentes principais:
Quando a direção do SuperTrend muda para baixo e o preço de fechamento está acima da EMA, o sistema emite um sinal de compra sem manter uma posição. Pelo contrário, quando a direção do SuperTrend muda para cima e o preço de fechamento está abaixo da EMA, o sistema envia um sinal curto.
Esta é uma estratégia de negociação completa que combina vários indicadores técnicos e mecanismos de controle de risco. Ao capturar tendências por meio do indicador SuperTrend, confirmar a direção por meio do EMA e coordenar com o mecanismo de stop-loss duplo, uma melhor relação risco-retorno é alcançada. O espaço de otimização da estratégia reside principalmente no ajuste dinâmico de parâmetros, no julgamento do ambiente de mercado e na melhoria do sistema de gestão de riscos. Em aplicações reais, é recomendável conduzir testes retrospectivos de dados históricos suficientes e ajustar os parâmetros de acordo com as características de produtos comerciais específicos.
/*backtest
start: 2024-01-17 00:00:00
end: 2025-01-15 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT","balance":49999}]
*/
//@version=5
strategy(" nifty supertrend triton", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100)
// Input parameters
atrPeriod = input.int(16, "ATR Length", step=1)
factor = input.float(3.02, "Factor", step=0.01)
maPeriod = input.int(49, "Moving Average Period", step=1)
trailPoints = input.int(70, "Trailing Points", step=1) // Points after which trailing stop activates
initialStopLossPoints = input.int(50, "Initial Stop Loss Points", step=1) // Initial stop loss of 50 points
// Calculate Supertrend
[_, direction] = ta.supertrend(factor, atrPeriod)
// Calculate EMA
ema = ta.ema(close, maPeriod)
// Variables to track stop loss levels
var float trailStop = na
var float entryPrice = na
var float initialStopLoss = na // To track the initial stop loss
// Generate buy and sell signals
if ta.change(direction) < 0 and close > ema
if strategy.position_size == 0 // Only open a new long position if no current position
strategy.entry("Buy", strategy.long)
entryPrice := close // Record the entry price for the long position
initialStopLoss := entryPrice - initialStopLossPoints // Set initial stop loss for long position
trailStop := na // Reset trailing stop for long
if ta.change(direction) > 0 and close < ema
if strategy.position_size == 0 // Only open a new short position if no current position
strategy.entry("Sell", strategy.short)
entryPrice := close // Record the entry price for the short position
initialStopLoss := entryPrice + initialStopLossPoints // Set initial stop loss for short position
trailStop := na // Reset trailing stop for short
// Apply initial stop loss for long positions
if (strategy.position_size > 0) // Check if in a long position
if close <= initialStopLoss // If the price drops to or below the initial stop loss
strategy.close("Buy", "Initial Stop Loss Hit") // Exit the long position
// Apply trailing stop logic for long positions
if (strategy.position_size > 0) // Check if in a long position
if (close - entryPrice >= trailPoints) // If the price has moved up by the threshold
trailStop := na(trailStop) ? close - trailPoints : math.max(trailStop, close - trailPoints) // Adjust trailing stop upwards
if not na(trailStop) and close < trailStop // If the price drops below the trailing stop
strategy.close("Buy", "Trailing Stop Hit") // Exit the long position
// Apply initial stop loss for short positions
if (strategy.position_size < 0) // Check if in a short position
if close >= initialStopLoss // If the price rises to or above the initial stop loss
strategy.close("Sell", "Initial Stop Loss Hit") // Exit the short position
// Apply trailing stop logic for short positions
if (strategy.position_size < 0) // Check if in a short position
if (entryPrice - close >= trailPoints) // If the price has moved down by the threshold
trailStop := na(trailStop) ? close + trailPoints : math.min(trailStop, close + trailPoints) // Adjust trailing stop downwards
if not na(trailStop) and close > trailStop // If the price rises above the trailing stop
strategy.close("Sell", "Trailing Stop Hit") // Exit the short position