
La estrategia es un sistema de seguimiento de tendencias que combina bandas de Bollinger, volatilidad y gestión de riesgos. Captura principalmente oportunidades de tendencia al monitorear la forma en que los precios rompen las pistas superiores e inferiores de las Bandas de Bollinger y, al mismo tiempo, ajusta dinámicamente el tamaño de la posición en combinación con ATR para lograr un control de riesgo preciso. La estrategia también incorpora un mecanismo para identificar períodos de consolidación del mercado para filtrar eficazmente señales falsas en mercados volátiles.
La estrategia funciona según la siguiente lógica básica:
Esta estrategia captura tendencias a través de rupturas de las bandas de Bollinger y las combina con un sólido sistema de control de riesgos. Sus ventajas son una fuerte adaptabilidad y riesgos controlables, pero todavía tenemos que prestar atención a los riesgos de falsos avances y cambios de tendencia. Todavía hay margen para mejorar aún más la estrategia añadiendo indicadores de confirmación de tendencias, optimizando los mecanismos de ajuste de parámetros, etc. En general, se trata de una estrategia de seguimiento de tendencias con una lógica clara y un fuerte sentido práctico.
/*backtest
start: 2019-12-23 08:00:00
end: 2025-01-08 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("Bollinger Bands Breakout Strategy", overlay=true)
// Input parameters
length = input(20, title="Bollinger Bands Length")
stdDev = input(2.0, title="Standard Deviation")
riskRewardRatio = input(2.0, title="Risk/Reward Ratio")
atrLength = input(14, title="ATR Length")
riskPercentage = input(1.0, title="Risk Percentage per Trade")
// Calculate Bollinger Bands
basis = ta.sma(close, length)
dev = stdDev * ta.stdev(close, length)
upperBand = basis + dev
lowerBand = basis - dev
// Calculate ATR for position sizing
atr = ta.atr(atrLength)
// Plot Bollinger Bands
plot(basis, color=color.blue, title="Basis")
plot(upperBand, color=color.red, title="Upper Band")
plot(lowerBand, color=color.green, title="Lower Band")
// Market Consolidation Detection
isConsolidating = (upperBand - lowerBand) < ta.sma(upperBand - lowerBand, length) * 0.5
// Breakout Conditions
longCondition = ta.crossover(close, upperBand) and not isConsolidating
shortCondition = ta.crossunder(close, lowerBand) and not isConsolidating
// Risk Management: Calculate position size
equity = strategy.equity
riskAmount = equity * (riskPercentage / 100)
positionSize = riskAmount / (atr * riskRewardRatio)
// Execute trades with risk management
if (longCondition)
strategy.entry("Long", strategy.long, qty=positionSize)
strategy.exit("Take Profit", from_entry="Long", limit=close + atr * riskRewardRatio, stop=close - atr)
if (shortCondition)
strategy.entry("Short", strategy.short, qty=positionSize)
strategy.exit("Take Profit", from_entry="Short", limit=close - atr * riskRewardRatio, stop=close + atr)
// Alert conditions for breakouts
alertcondition(longCondition, title="Long Breakout", message="Long breakout detected!")
alertcondition(shortCondition, title="Short Breakout", message="Short breakout detected!")