Estrategia avanzada de trading de tendencias basada en bandas de Bollinger y patrones de velas

BB ATR RR PSR MA SD WBR
Fecha de creación: 2024-11-27 14:18:33 Última modificación: 2024-11-27 14:18:33
Copiar: 1 Número de Visitas: 413
1
Seguir
1617
Seguidores

Estrategia avanzada de trading de tendencias basada en bandas de Bollinger y patrones de velas

Descripción general

Se trata de una estrategia de seguimiento de tendencias basada en el análisis de la forma de las bandas de Bollinger y los gráficos de fluctuación. La estrategia se basa en la observación de las características de la forma de fluctuación de los precios cuando tocan las bandas de Bollinger, combinadas con la relación de las tasas de las líneas ascendentes y descendentes para juzgar el posible punto de reversión del mercado.

Principio de estrategia

La lógica central de la estrategia se basa en los siguientes elementos clave: primero, determinar el alcance de la fluctuación de los precios mediante el cálculo de los bolígrafos de 20 ciclos; segundo, analizar la relación de la guía de arriba a abajo de la gráfica con la entidad cuando los precios tocan la banda de bolígrafos, que se considera una señal de reversión potencial cuando la relación supera el umbral establecido; tercero, establecer un punto de parada por medio del cálculo de los puntos clave de soporte y resistencia; y, finalmente, calcular la cantidad de posiciones en cada operación en función de una proporción fija del total de la cuenta (%) para lograr la gestión dinámica del riesgo. La estrategia también ofrece una variedad de opciones de entrada, incluidos los precios de cierre, apertura, máximo y mínimo del día, etc.

Ventajas estratégicas

  1. Control de riesgos preciso: Modelo de gestión de riesgos de proporción fija para asegurar que las aberturas de riesgo de cada operación estén dentro de un rango controlado
  2. Flexibilidad en el punto de entrada: ofrece varias opciones de precios de entrada para adaptarse a diferentes estilos de negociación
  3. Combinación de indicadores técnicos: combinación de las bandas de Bollinger con el análisis de las formas de los gráficos de proyección para mejorar la fiabilidad de la señal
  4. La configuración de stop loss es razonable: el stop loss se ajusta a las leyes de funcionamiento del mercado a través de la configuración de la resistencia de soporte clave
  5. Administración de transacciones perfecta: incluye un mecanismo de vencimiento de pedidos para evitar el error de la señal de vencimiento

Riesgo estratégico

  1. Riesgo de fluctuaciones rápidas en el mercado: las tasas de referencia pueden generar falsas señales en un mercado muy volátil
  2. Riesgo de gestión de fondos: el modelo de riesgo de proporción fija puede causar posiciones demasiado pequeñas en caso de pérdidas continuas
  3. Riesgo de la configuración de stop loss: el cálculo de los puntos de resistencia de soporte puede no ser lo suficientemente preciso en ciertas condiciones de mercado
  4. Dependencia del ciclo de tiempo: la estrategia se basa principalmente en el nivel de la línea de sol, lo que puede perder oportunidades en marcos de tiempo más pequeños

Dirección de optimización de la estrategia

  1. Introducción de indicadores de tráfico: se puede aumentar la fiabilidad de la señal mediante el aumento del análisis de tráfico en la confirmación de la señal
  2. Optimización del mecanismo de detención de pérdidas: Considere la introducción de detención dinámica, que ajuste automáticamente la distancia de detención de pérdidas según la volatilidad del mercado
  3. Aumentar el filtro de entornos de mercado: agregar indicadores de intensidad de tendencia y ajustar los parámetros de la estrategia en diferentes entornos de mercado
  4. Mejorar la gestión de posiciones: considerar la introducción de un mecanismo dinámico de gestión de posiciones, ajustando la apertura de riesgo en función de la volatilidad del mercado
  5. Aumentar el filtro de tiempo: se puede agregar un filtro de tiempo para evitar el comercio en momentos de mayor volatilidad del mercado

Resumir

La estrategia combina herramientas clásicas de análisis técnico con métodos modernos de gestión de riesgos para construir un sistema de negociación relativamente completo. Las ventajas centrales de la estrategia residen en su estricto control de riesgos y su mecanismo de entrada flexible, pero también en la necesidad de prestar atención a los cambios en el entorno del mercado y la verificación de la fiabilidad de las señales en su aplicación práctica.

Código Fuente de la Estrategia
/*backtest
start: 2024-01-01 00:00:00
end: 2024-11-26 00:00:00
period: 12h
basePeriod: 12h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Trade Entry Detector, based on Wick to Body Ratio when price tests Bollinger Bands", overlay=true, default_qty_type=strategy.fixed)

// Input for primary analysis time frame
timeFrame = "D"  // Daily time frame

// Bollinger Band settings
length = input.int(20, title="Bollinger Band Length", minval=1)
mult = input.float(2.0, title="Standard Deviation Multiplier", minval=0.1)
source = input(close, title="Source")

// Entry ratio settings
wickToBodyRatio = input.float(1.0, title="Minimum Wick-to-Body Ratio", minval=0)

// Order Fill Timing Option
fillOption = input.string("Daily Close", title="Order Fill Timing", options=["Daily Close", "Daily Open", "HOD", "LOD"])

// Account and risk settings
accountBalance = 100000  // Account balance in dollars
riskPercentage = 1.0     // Risk percentage per trade
riskAmount = (riskPercentage / 100) * accountBalance // Fixed 1% risk amount

// Request daily data for calculations
dailyHigh = request.security(syminfo.tickerid, timeFrame, high)
dailyLow = request.security(syminfo.tickerid, timeFrame, low)
dailyClose = request.security(syminfo.tickerid, timeFrame, close)
dailyOpen = request.security(syminfo.tickerid, timeFrame, open)

// Calculate Bollinger Bands on the daily time frame
dailyBasis = request.security(syminfo.tickerid, timeFrame, ta.sma(source, length))
dailyDev = mult * request.security(syminfo.tickerid, timeFrame, ta.stdev(source, length))
dailyUpperBand = dailyBasis + dailyDev
dailyLowerBand = dailyBasis - dailyDev

// Calculate the body and wick sizes on the daily time frame
dailyBodySize = math.abs(dailyOpen - dailyClose)
dailyUpperWickSize = dailyHigh - math.max(dailyOpen, dailyClose)
dailyLowerWickSize = math.min(dailyOpen, dailyClose) - dailyLow

// Conditions for a candle with an upper wick or lower wick that touches the Bollinger Bands
upperWickCondition = (dailyUpperWickSize / dailyBodySize >= wickToBodyRatio) and (dailyHigh > dailyUpperBand)
lowerWickCondition = (dailyLowerWickSize / dailyBodySize >= wickToBodyRatio) and (dailyLow < dailyLowerBand)

// Define the swing high and swing low for stop loss placement
var float swingLow = na
var float swingHigh = na

if (ta.pivothigh(dailyHigh, 5, 5))
    swingHigh := dailyHigh[5]

if (ta.pivotlow(dailyLow, 5, 5))
    swingLow := dailyLow[5]

// Determine entry price based on chosen fill option
var float longEntryPrice = na
var float shortEntryPrice = na

if lowerWickCondition
    longEntryPrice := fillOption == "Daily Close" ? dailyClose :
                      fillOption == "Daily Open" ? dailyOpen :
                      fillOption == "HOD" ? dailyHigh : dailyLow

if upperWickCondition
    shortEntryPrice := fillOption == "Daily Close" ? dailyClose :
                       fillOption == "Daily Open" ? dailyOpen :
                       fillOption == "HOD" ? dailyHigh : dailyLow

// Execute the long and short entries with expiration
var int longOrderExpiry = na
var int shortOrderExpiry = na

if not na(longEntryPrice)
    longOrderExpiry := bar_index + 2  // Order expires after 2 days

if not na(shortEntryPrice)
    shortOrderExpiry := bar_index + 2  // Order expires after 2 days

// Check expiration and execute orders
if (longEntryPrice and bar_index <= longOrderExpiry and high >= longEntryPrice)
    longStopDistance = close - nz(swingLow, close)
    longPositionSize = longStopDistance > 0 ? riskAmount / longStopDistance : na
    if (not na(longPositionSize))
        strategy.entry("Long", strategy.long, qty=longPositionSize)
    longEntryPrice := na  // Reset after entry

if (shortEntryPrice and bar_index <= shortOrderExpiry and low <= shortEntryPrice)
    shortStopDistance = nz(swingHigh, close) - close
    shortPositionSize = shortStopDistance > 0 ? riskAmount / shortStopDistance : na
    if (not na(shortPositionSize))
        strategy.entry("Short", strategy.short, qty=shortPositionSize)
    shortEntryPrice := na  // Reset after entry

// Exit logic: hit the opposing Bollinger Band
if (strategy.position_size > 0) // Long position
    strategy.exit("Exit Long", "Long", limit=dailyUpperBand)
else if (strategy.position_size < 0) // Short position
    strategy.exit("Exit Short", "Short", limit=dailyLowerBand)

if (strategy.position_size > 0) // Long position
    strategy.exit("Stop Loss Long", "Long", stop=swingLow)
else if (strategy.position_size < 0) // Short position
    strategy.exit("Stop Loss Short", "Short", stop=swingHigh)

// Plot daily Bollinger Bands and levels on the chosen time frame
plot(dailyUpperBand, color=color.blue, linewidth=1, title="Daily Upper Bollinger Band")
plot(dailyLowerBand, color=color.blue, linewidth=1, title="Daily Lower Bollinger Band")
plot(dailyBasis, color=color.gray, linewidth=1, title="Daily Middle Bollinger Band")