
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). Esta estrategia utiliza múltiples indicadores técnicos junto con el stop loss inicial y el stop loss móvil para lograr un seguimiento dinámico de las tendencias del mercado y el control de riesgos. El núcleo de la estrategia es capturar cambios en la dirección de la tendencia a través del indicador SuperTrend, utilizar EMA para la confirmación de la tendencia y establecer un mecanismo de doble stop-loss para proteger las ganancias.
La estrategia opera sobre la base de los siguientes componentes centrales:
Cuando la dirección de SuperTrend gira hacia abajo y el precio de cierre está por encima de la EMA, el sistema emite una señal de compra sin mantener una posición. Por el contrario, cuando la dirección de SuperTrend gira hacia arriba y el precio de cierre está por debajo de la EMA, el sistema envía una señal corta.
Se trata de una estrategia comercial completa que combina múltiples indicadores técnicos y mecanismos de control de riesgos. Al capturar tendencias a través del indicador SuperTrend, confirmar la dirección a través de EMA y coordinar con el mecanismo de doble stop-loss, se logra una mejor relación riesgo-retorno. El espacio 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 aplicaciones reales, se recomienda realizar pruebas retrospectivas de datos históricos suficientes y ajustar los parámetros de acuerdo con las características de los productos comerciales 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