Estrategia de trading cuantitativo con ruptura de banda de Bollinger con triple desviación estándar combinada con optimización de promedio móvil de 100 días

MA BB SMA SD
Fecha de creación: 2024-12-13 11:20:13 Última modificación: 2024-12-13 11:20:13
Copiar: 3 Número de Visitas: 483
1
Seguir
1617
Seguidores

Estrategia de trading cuantitativo con ruptura de banda de Bollinger con triple desviación estándar combinada con optimización de promedio móvil de 100 días

Descripción general

La estrategia es una estrategia de trading cuantitativa basada en una ruptura de la banda de Brin, que utiliza un uptrend de 3 veces la diferencia estándar y un downtrend de 1 vez la diferencia estándar, al tiempo que combina una media móvil de 100 días como trayectoria media. La estrategia capta la tendencia a largo plazo principalmente mediante la detección de un aumento de la trayectoria de los precios y utiliza el downtrend como una señal de parada.

Principio de estrategia

El principio central de la estrategia está basado en las características estadísticas de la banda de Bryn. La subida de la vía utiliza un 3 veces el desvío estándar, lo que significa que la probabilidad de que el precio rompa la vía de subida es de solo el 0.15% bajo la hipótesis de una distribución normal, por lo que cuando se produce una ruptura, a menudo se prevé la formación de una tendencia significativa. La subida de la vía 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.

Ventajas estratégicas

  1. La capacidad de captura de tendencias es alta: con una configuración de tres veces la diferencia estándar, se puede capturar con eficacia las oportunidades de ruptura de tendencias importantes.
  2. El control de riesgo es razonable: el uso de 1x la diferencia estándar como línea de parada, es más conservador en el control de riesgo.
  3. Los parámetros son muy ajustables: los múltiplos estándar de diferencia y los ciclos de las medias móviles pueden ajustarse según las diferentes características del mercado.
  4. Fuerte sistematización: la lógica de la estrategia es clara, la función de retroalimentación es perfecta, y el rendimiento de las transacciones puede ser estadísticamente preciso.
  5. Amplia adaptabilidad: puede aplicarse en varios ámbitos, como el mercado de valores y el mercado de criptomonedas.

Riesgo estratégico

  1. Riesgo de brecha falsa: el mercado puede retroceder rápidamente después de brechas de corta duración, lo que lleva a señales falsas.
  2. Un retiro mayor: un retiro mayor puede ocurrir en un mercado con una gran volatilidad.
  3. Riesgo de retraso: la línea promedio de 100 días tiene un cierto retraso y puede perderse algunas cosas rápidas.
  4. Dependencia del entorno del mercado: puede haber entradas y salidas frecuentes en un mercado convulso, lo que genera costos de transacción excesivos.

Dirección de optimización de la estrategia

  1. Introducción de la confirmación de tránsito: se puede agregar un mecanismo de confirmación de tránsito para mejorar la fiabilidad de la señal.
  2. Mecanismos de optimización de la parada de pérdidas: se puede considerar la introducción de la parada de seguimiento o la parada dinámica de ATR para aumentar la flexibilidad de la parada de pérdidas.
  3. Aumentar el filtro de tendencias: se puede agregar un indicador de tendencias a largo plazo, solo para negociar en la dirección de la tendencia principal.
  4. Optimización de la gestión de la posición: el tamaño de la posición se puede ajustar en función de la dinámica de la fuerza de la ruptura.
  5. Añadir filtro de tiempo: evita el comercio en ciertas horas del mercado.

Resumir

Se trata de una estrategia de seguimiento de tendencias diseñada de manera racional y lógica. A través de las características estadísticas de la banda de Brin y las características de seguimiento de tendencias de los promedios móviles, se puede capturar eficazmente oportunidades de brecha importantes en el mercado.

Código Fuente de la Estrategia
/*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
// // =============================================================================