
Esta estrategia es un sistema dinámico de seguimiento de tendencias basado en un canal de media móvil dual, combinado con un mecanismo de gestión de riesgos. Esta estrategia utiliza dos promedios móviles simples (SMA) para construir un canal comercial, donde el carril superior utiliza el promedio móvil calculado por el precio más alto y el carril inferior utiliza el promedio móvil calculado por el precio más bajo. El sistema utiliza cinco precios de cierre consecutivos de la línea K que rompen la pista superior como señal de entrada, y cinco precios de cierre consecutivos de la línea K que caen por debajo de la pista inferior o retroceden un 25% desde el punto más alto como señal de salida, para lograr una tendencia dinámica. Seguimiento y control de riesgos.
El principio central de la estrategia es capturar las tendencias de precios a través del canal de doble promedio móvil y establecer un mecanismo estricto de entrada y salida:
Esta estrategia construye un sistema comercial completo de seguimiento de tendencias a través de un canal de doble promedio móvil, combinado con estrictos mecanismos de confirmación de entrada y doble salida, para lograr un seguimiento de tendencias efectivo y un control de riesgos efectivo. Las ventajas de la estrategia son una lógica de ejecución clara y un control de riesgo perfecto, pero aún necesita una optimización de parámetros para diferentes entornos de mercado y se puede mejorar aún más agregando filtrado de entorno de mercado, confirmación de múltiples períodos de tiempo, etc. En general, se trata de una estrategia comercial cuantitativa con una estructura completa y una lógica rigurosa, adecuada para su aplicación en un entorno de mercado con tendencias obvias.
/*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")