
La estrategia es un sistema de comercio cuantitativo que combina el principio de la regresión de la media con los indicadores técnicos MACD y ATR. La estrategia identifica las desviaciones de precios a través de las bandas de Bollinger, aprovecha la dinámica de confirmación de MACD y realiza una gestión de riesgo dinámica en combinación con ATR. La idea central de la estrategia es capturar las oportunidades de regresión de precios cuando se producen desviaciones significativas mediante la verificación de múltiples indicadores técnicos.
La estrategia utiliza tres técnicas para que los indicadores trabajen de forma conjunta: en primer lugar, para determinar si los precios se desvían significativamente en el cinturón de Brin; en segundo lugar, para verificar la movilidad de los precios con el indicador MACD, asegurándose de que la dirección de la operación está en consonancia con la tendencia del mercado; y, finalmente, para introducir el indicador ATR para configurar las posiciones de pérdidas y ganancias dinámicas. En concreto, el sistema genera una señal múltiple cuando el precio se desvía por debajo del cinturón de Brin y la línea MACD está por encima de la línea de señal; el sistema genera una señal de vacío cuando el precio se desvía por encima de la banda de Brin y la línea MACD está por debajo de la línea de señal.
Esta es una estrategia que combina el análisis técnico clásico con métodos modernos de negociación cuantitativa. El uso de múltiples indicadores en combinación, tanto conserva las ventajas centrales de la estrategia de regresión promedio como supera las limitaciones de un solo indicador. La estrategia es altamente escalable, y la optimización de parámetros y la adición de módulos funcionales pueden mejorar continuamente su rendimiento en diferentes entornos de mercado.
/*backtest
start: 2024-11-12 00:00:00
end: 2024-12-11 08:00:00
period: 3h
basePeriod: 3h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("Enhanced Mean Reversion with MACD and ATR", overlay=true)
// Nastavenia Bollinger Bands
bbLength = input(20, title="Bollinger Bands Length")
bbMult = input(2, title="Bollinger Bands Multiplier")
basis = ta.sma(close, bbLength)
dev = ta.stdev(close, bbLength)
upperBand = basis + bbMult * dev
lowerBand = basis - bbMult * dev
// MACD indikátor
macdShort = input(12, title="MACD Short Length")
macdLong = input(26, title="MACD Long Length")
macdSignal = input(9, title="MACD Signal Length")
[macdLine, signalLine, _] = ta.macd(close, macdShort, macdLong, macdSignal)
// ATR pre dynamický Stop Loss a Take Profit
atrLength = input(14, title="ATR Length")
atrMultiplier = input(1.5, title="ATR Multiplier")
atrValue = ta.atr(atrLength)
// Vstupné podmienky pre long pozície
longCondition = ta.crossover(close, lowerBand) and macdLine > signalLine
if (longCondition)
strategy.entry("Long", strategy.long)
// Vstupné podmienky pre short pozície
shortCondition = ta.crossunder(close, upperBand) and macdLine < signalLine
if (shortCondition)
strategy.entry("Short", strategy.short)
// Dynamický Stop Loss a Take Profit na základe ATR
longSL = strategy.position_avg_price - atrValue * atrMultiplier
longTP = strategy.position_avg_price + atrValue * atrMultiplier * 2
shortSL = strategy.position_avg_price + atrValue * atrMultiplier
shortTP = strategy.position_avg_price - atrValue * atrMultiplier * 2
// Pridanie stop loss a take profit
if (strategy.position_size > 0)
strategy.exit("Take Profit/Stop Loss", "Long", stop=longSL, limit=longTP)
if (strategy.position_size < 0)
strategy.exit("Take Profit/Stop Loss", "Short", stop=shortSL, limit=shortTP)
// Vizualizácia Bollinger Bands a MACD
plot(upperBand, color=color.red, title="Upper Bollinger Band")
plot(lowerBand, color=color.green, title="Lower Bollinger Band")
plot(basis, color=color.blue, title="Bollinger Basis")
hline(0, "MACD Zero Line", color=color.gray)
plot(macdLine - signalLine, color=color.blue, title="MACD Histogram")
plot(macdLine, color=color.red, title="MACD Line")
plot(signalLine, color=color.green, title="Signal Line")
// Generovanie alertov
alertcondition(longCondition, title="Long Alert", message="Long Entry Signal")
alertcondition(shortCondition, title="Short Alert", message="Short Entry Signal")