Esta es una estrategia de seguimiento de tendencias basada en el indicador SuperTrend, la media móvil exponencial (EMA) y el rango verdadero promedio (ATR). La estrategia logra un seguimiento dinámico de tendencias y control de riesgos a través de la combinación de múltiples indicadores técnicos, stop loss inicial y trailing stop loss. El núcleo de la estrategia radica en capturar los cambios de dirección de tendencia utilizando el indicador SuperTrend, mientras que utiliza EMA para la confirmación de tendencias y establece mecanismos de doble stop loss para proteger las ganancias.
La estrategia se basa en los siguientes componentes fundamentales: Indicador de SuperTendencia para identificar cambios en la dirección de la tendencia, calculado con un período ATR de 16 y un factor de 3,02 2. EMA de 49 períodos como filtro de tendencia para confirmar la dirección de la tendencia 3. Stop loss inicial fijado en 50 puntos que proporciona una protección básica para cada operación 4. El stop loss de seguimiento se activa después de 70 puntos de ganancia, rastreando dinámicamente los cambios de precio
El sistema genera señales largas cuando la dirección de la SuperTendencia se vuelve a la baja y el precio de cierre está por encima de la EMA, siempre que no exista una posición existente. Por el contrario, se generan señales cortas cuando la dirección de la SuperTendencia se vuelve al alza y el precio de cierre está por debajo de la EMA.
Se trata de una estrategia de trading completa que combina múltiples indicadores técnicos y mecanismos de control de riesgos. Se logra una relación riesgo-recompensa favorable a través de la captura de tendencias con el indicador SuperTrend, la confirmación de dirección con EMA, junto con mecanismos de doble stop loss. El potencial de optimización de la estrategia radica principalmente en el ajuste dinámico de parámetros, la evaluación del entorno del mercado y la mejora del sistema de gestión de riesgos. En la aplicación práctica, se recomienda realizar una exhaustiva prueba posterior de datos históricos y ajustar los parámetros de acuerdo con las características específicas del instrumento de trading.
/*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