En la carga de los recursos... Cargando...

Estrategia de ruptura de bandas de Bollinger con triple desviación estándar y optimización de la media móvil de 100 días

El autor:¿ Qué pasa?, Fecha: 2024-12-13 11:20:13
Las etiquetas:- ¿Qué es?- ¿ Qué?La SMA- ¿ Qué?

img

Resumen general

Esta estrategia es un sistema de negociación cuantitativo basado en la ruptura de bandas de Bollinger, utilizando 3 desviaciones estándar para la banda superior y 1 desviación estándar para la banda inferior, combinada con un promedio móvil de 100 días como la banda media. La estrategia captura principalmente tendencias a largo plazo al detectar las rupturas de precios por encima de la banda superior y utiliza la banda inferior como una señal de stop-loss. El concepto central es entrar en posiciones durante las rupturas fuertes y salir cuando los precios caen por debajo de la banda inferior, logrando una tendencia de riesgo controlado.

Principios de estrategia

El principio básico se basa en las propiedades estadísticas de las bandas de Bollinger. La banda superior utiliza 3 desviaciones estándar, lo que significa que bajo supuestos de distribución normal, la probabilidad de que el precio se rompa por encima de este nivel es de solo 0.15%, lo que sugiere una formación de tendencia significativa cuando ocurren las rupturas. La banda media utiliza un promedio móvil de 100 días, un período lo suficientemente largo como para filtrar eficazmente el ruido del mercado a corto plazo. La banda inferior utiliza 1 desviación estándar como línea de stop-loss, una configuración relativamente conservadora que ayuda con la salida oportuna.

Ventajas estratégicas

  1. Capacidad de captura de tendencias: el ajuste de 3 desviaciones estándar captura efectivamente oportunidades significativas de ruptura de tendencias.
  2. Control razonable del riesgo: el uso de 1 desviación estándar como línea de stop-loss proporciona una gestión del riesgo conservadora.
  3. Alta adaptabilidad de los parámetros: los multiplicadores de la desviación estándar y el período de media móvil pueden ajustarse a las diferentes características del mercado.
  4. Enfoque sistemático: lógica estratégica clara con capacidades completas de backtesting para un seguimiento preciso del rendimiento.
  5. Amplia aplicabilidad: se puede aplicar a varios mercados, incluidas las acciones y las criptomonedas.

Riesgos estratégicos

  1. Riesgo de ruptura falsa: Los mercados pueden mostrar rupturas a corto plazo seguidas de rápidas reversiones, lo que conduce a señales falsas.
  2. Las operaciones de inversión de los bancos centrales pueden tener un impacto negativo en la rentabilidad de los bancos centrales.
  3. Riesgo de retraso: la media móvil de 100 días tiene un retraso inherente, potencialmente perdiendo algunos movimientos rápidos del mercado.
  4. Dependencia del entorno del mercado: puede generar intercambios excesivos en mercados diversos, lo que conduce a altos costes de transacción.

Direcciones para la optimización de la estrategia

  1. Incorporar confirmación de volumen: añadir un mecanismo de confirmación de ruptura de volumen para mejorar la fiabilidad de la señal.
  2. Optimizar el mecanismo de stop-loss: considerar la implementación de trailing stops o de stops dinámicos basados en ATR para una gestión de salida más flexible.
  3. Añadir filtros de tendencia: Incorporar indicadores de identificación de tendencia a largo plazo para operar solo en la dirección de tendencia principal.
  4. Mejorar la gestión de la posición: ajustar dinámicamente los tamaños de la posición en función de la fuerza de ruptura.
  5. Añadir filtros de tiempo: Evite negociar durante períodos de mercado específicos.

Resumen de las actividades

Esta es una estrategia de seguimiento de tendencias bien diseñada con lógica clara. A través de las propiedades estadísticas de las bandas de Bollinger y las características de seguimiento de tendencias de los promedios móviles, captura efectivamente oportunidades significativas de ruptura de mercado.


/*backtest
start: 2024-11-12 00:00:00
end: 2024-12-11 08:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © MounirTrades007

// @version=6
strategy("Bollinger Bands", overlay=true, initial_capital=100000, default_qty_type=strategy.percent_of_equity, default_qty_value=200)

// Get user input
var g_bb        = "Bollinger Band Settings"
upperBandSD     = input.float(title="Upper Band Std Dev", defval=3.0, tooltip="Upper band's standard deviation multiplier", group=g_bb)
lowerBandSD     = input.float(title="Lower Band Std Dev", defval=1.0, tooltip="Lower band's standard deviation multiplier", group=g_bb)
maPeriod        = input.int(title="Middle Band MA Length", defval=100, tooltip="Middle band's SMA period length", group=g_bb)
var g_tester    = "Backtester Settings"
drawTester      = input.bool(title="Draw Backtester", defval=true, group=g_tester, tooltip="Turn on/off inbuilt backtester display")

// Get Bollinger Bands
[bbIgnore1, bbHigh, bbIgnore2] = ta.bb(close, maPeriod, upperBandSD)
[bbMid, bbIgnore3, bbLow]      = ta.bb(close, maPeriod, lowerBandSD)

// Prepare trade persistent variables
drawEntry   = false
drawExit    = false

// Detect bollinger breakout
if close > bbHigh and barstate.isconfirmed and strategy.position_size == 0
    drawEntry := true
    strategy.entry(id="Trade", direction=strategy.long)
    alert("Bollinger Breakout Detected for " + syminfo.ticker, alert.freq_once_per_bar_close)

// Detect bollinger sell signal
if close < bbLow and barstate.isconfirmed and strategy.position_size != 0
    drawExit := true
    strategy.close(id="Trade")
    alert("Bollinger Exit detected for " + syminfo.ticker, alert.freq_once_per_bar_close)

// Draw bollinger bands
plot(bbMid, color=color.blue, title="Middle SMA")
plot(bbHigh, color=color.green, title="Upper Band")
plot(bbLow, color=color.red, title="Lower Band")

// Draw signals
plotshape(drawEntry, style=shape.triangleup, color=color.green, location=location.belowbar, size=size.normal, title="Buy Signal")
plotshape(drawExit, style=shape.xcross, color=color.red, location=location.belowbar, size=size.normal, title="Sell Signal")

// // =============================================================================
// // START BACKTEST CODE
// // =============================================================================

// // Prepare stats table
// var table testTable = table.new(position.top_right, 2, 2, border_width=1)
// f_fillCell(_table, _column, _row, _title, _value, _bgcolor, _txtcolor) =>
//     _cellText = _title + "\n" + _value
//     table.cell(_table, _column, _row, _cellText, bgcolor=_bgcolor, text_color=_txtcolor)

// // Draw stats table
// var bgcolor = color.black
// if barstate.islastconfirmedhistory
//     if drawTester
//         dollarReturn = strategy.equity - strategy.initial_capital
//         f_fillCell(testTable, 0, 0, "Total Trades:", str.tostring(strategy.closedtrades), bgcolor, color.white)
//         f_fillCell(testTable, 0, 1, "Win Rate:", str.tostring(strategy.wintrades / strategy.closedtrades * 100, "##.##") + "%", bgcolor, color.white)
//         f_fillCell(testTable, 1, 0, "Equity:", "$" + str.tostring(strategy.equity, "###,###.##"), bgcolor, color.white)
//         f_fillCell(testTable, 1, 1, "Return:", str.tostring((strategy.netprofit / strategy.initial_capital) * 100, "##.##") + "%", dollarReturn > 0 ? color.green : color.red, color.white)

// // =============================================================================
// // END BACKTEST CODE
// // =============================================================================

Relacionados

Más.