Esta estrategia es un sistema de seguimiento de tendencia dinámica basado en canales de media móvil dual, combinado con mecanismos de gestión de riesgos. Utiliza dos promedios móviles simples (SMA) para construir un canal de negociación, con la banda superior calculada utilizando el precio alto y la banda inferior utilizando el precio bajo. El sistema genera señales de entrada cuando el precio de cierre permanece por encima de la banda superior durante cinco barras consecutivas, y señales de salida cuando el precio cae por debajo de la banda inferior durante cinco barras consecutivas o se retrace un 25% desde el punto más alto, logrando un seguimiento de tendencia dinámico y control de riesgos.
Los principios fundamentales incluyen la captura de las tendencias de los precios a través de dos canales de media móvil y el establecimiento de mecanismos estrictos de entrada y salida: Mecanismo de entrada: requiere que el precio se mantenga por encima de la banda superior durante cinco días consecutivos, asegurando la continuidad y validez de la tendencia Mecanismo de salida: opera en dos niveles - Salida de desviación de tendencia: se activa cuando el precio cae por debajo de la banda inferior durante cinco días consecutivos, lo que indica una posible inversión de tendencia. - Salida Stop-Loss: Se activa cuando el precio se retrae un 25% desde el punto más alto, evitando pérdidas excesivas 3. Gestión de la posición: utiliza un porcentaje fijo del capital de la cuenta para el tamaño de la posición, asegurando una asignación efectiva de capital
Esta estrategia construye un sistema de negociación de tendencia completa a través de dos canales de media móvil, combinando una confirmación de entrada estricta y mecanismos de salida doble para lograr un seguimiento de tendencia y control de riesgos efectivos. Las fortalezas de la estrategia se encuentran en su lógica de ejecución clara y control de riesgos integral, aunque requiere optimización de parámetros para diferentes entornos de mercado y puede mejorarse aún más a través del filtrado del entorno de mercado y la confirmación de múltiples marcos de tiempo. En general, representa una estrategia de negociación cuantitativa estructuralmente completa y lógicamente rigurosa, adecuada para su aplicación en mercados con tendencias claras.
/*backtest start: 2025-01-02 00:00:00 end: 2025-01-09 00:00:00 period: 10m basePeriod: 10m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT","balance":49999}] */ //@version=5 strategy("Moving Average Channel (MAC)", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100) // Parameters for Moving Averages upperMALength = input.int(10, title="Upper MA Length") lowerMALength = input.int(8, title="Lower MA Length") stopLossPercent = input.float(25.0, title="Stop Loss (%)", minval=0.1) / 100 // Calculate Moving Averages upperMA = ta.sma(high, upperMALength) lowerMA = ta.sma(low, lowerMALength) // Plot Moving Averages plot(upperMA, color=color.red, title="Upper Moving Average") plot(lowerMA, color=color.green, title="Lower Moving Average") // Initialize variables var int upperCounter = 0 var int lowerCounter = 0 var float entryPrice = na var float highestPrice = na // Update counters based on conditions if (low <= upperMA) upperCounter := 0 else upperCounter += 1 if (high >= lowerMA) lowerCounter := 0 else lowerCounter += 1 // Entry condition: 5 consecutive bars above the Upper MA if (upperCounter == 5 and strategy.position_size == 0) strategy.entry("Long", strategy.long) highestPrice := high // Initialize highest price // Update the highest price after entry if (strategy.position_size > 0) highestPrice := na(highestPrice) ? high : math.max(highestPrice, high) // Exit condition: 5 consecutive bars below the Lower MA if (lowerCounter == 5 and strategy.position_size > 0) strategy.close("Long", comment="Exit: 5 bars below Lower MA") // Stop-loss condition: Exit if market closes below 25% of the highest price since entry stopLossCondition = low < highestPrice * (1 - stopLossPercent) if (stopLossCondition and strategy.position_size > 0) strategy.close("Long", comment="Exit: Stop Loss")