Esta é uma estratégia de seguimento de tendência baseada no indicador SuperTrend, na média móvel exponencial (EMA) e na faixa verdadeira média (ATR). A estratégia alcança rastreamento de tendência dinâmica e controle de risco através da combinação de múltiplos indicadores técnicos, stop loss inicial e trailing stop loss. O núcleo da estratégia consiste em capturar mudanças na direção da tendência usando o indicador SuperTrend, ao mesmo tempo em que usa a EMA para confirmação da tendência e configura mecanismos de stop loss duplo para proteger os lucros.
A estratégia baseia-se nos seguintes elementos essenciais: Indicador SuperTrend para identificar alterações da direcção da tendência, calculado com período ATR de 16 e factor de 3,02 2. EMA de 49 períodos como filtro de tendência para confirmar a direcção da tendência 3. Stop loss inicial definido em 50 pontos, proporcionando proteção básica para cada negociação 4. Trailing stop loss ativa após 70 pontos de lucro, rastreando dinamicamente as mudanças de preço
O sistema gera sinais longos quando a direção da SuperTendência gira para baixo e o preço de fechamento está acima da EMA, desde que não haja posição existente.
Esta é uma estratégia de negociação completa que combina múltiplos indicadores técnicos e mecanismos de controle de risco. Ela alcança uma relação risco-recompensa favorável através da captura de tendências com o indicador SuperTrend, confirmação de direção com a EMA, juntamente com mecanismos de stop loss duplo. O potencial de otimização da estratégia reside principalmente no ajuste dinâmico de parâmetros, avaliação do ambiente de mercado e aprimoramento do sistema de gerenciamento de riscos. Na aplicação prática, recomenda-se realizar um teste de dados históricos e ajustar parâmetros de acordo com características específicas do instrumento de negociação.
/*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