Estrategia de trading de volatilidad dinámica basada en bandas de Bollinger y patrones de velas

BB SMA ATR RSI ROC MTF
Fecha de creación: 2024-11-29 16:29:01 Última modificación: 2024-11-29 16:29:01
Copiar: 0 Número de Visitas: 497
1
Seguir
1617
Seguidores

Estrategia de trading de volatilidad dinámica basada en bandas de Bollinger y patrones de velas

Descripción general

La estrategia es un sistema de negociación basado en el análisis de la morfología de las bandas de Brin y el gráfico de Brin para capturar oportunidades de reversión en el mercado mediante el análisis de la fluctuación de los precios a nivel de la línea de sol y las características del gráfico de Brin. El núcleo de la estrategia es la combinación de los canales de fluctuación de las bandas de Brin y la relación de proporción de las líneas de sombra con las entidades en el gráfico de Brin para buscar posibles señales de reversión cuando los precios tocan los límites de las bandas de Brin.

Principio de estrategia

La estrategia utiliza la banda de Brin de 20 ciclos como su principal indicador técnico, con un factor de diferencia estándar de 2.0. Calculando la relación entre la línea de sombra y la entidad en el diagrama, el sistema emite una señal de negociación cuando la relación supera el umbral establecido (el 1.0 por defecto) y el precio toca el límite de la banda de Brin. La hora de entrada permite la flexibilidad de elegir el precio de cobro en la línea diaria, el precio de apertura del día siguiente, el máximo o mínimo del día.

Ventajas estratégicas

  1. Análisis multidimensional: Combinación de indicadores técnicos y análisis de la forma de los precios para mejorar la fiabilidad de la señal.
  2. Mecanismo de entrada flexible: ofrece una variedad de opciones de tiempo de entrada para adaptarse a diferentes estilos de negociación.
  3. Una buena gestión del riesgo: control del riesgo a través de un tamaño de posición dinámico y un stop loss automático.
  4. Compatibilidad con múltiples períodos de tiempo: permite realizar operaciones en períodos de tiempo más pequeños, al tiempo que se mantiene el análisis de la línea diurna.
  5. Alto grado de automatización: desde la identificación de señales hasta la gestión de posiciones.

Riesgo estratégico

  1. Riesgo de fluctuación del mercado: puede generar falsas señales en mercados con gran volatilidad.
  2. Riesgo de retraso: debido al uso de datos de línea de sol, es posible que no se reaccione a tiempo en un mercado rápido.
  3. Sensibilidad de los parámetros: La elección de los parámetros de la banda de Bryn y el parámetro de reducción de la tasa de sombras puede afectar significativamente el rendimiento de la estrategia.
  4. Riesgo de liquidez: En mercados con poca liquidez, puede ser difícil negociar a los precios esperados.

Dirección de optimización de la estrategia

  1. Introducción del análisis de la transacción: la combinación de datos de la transacción para verificar la efectividad de la reversión de precios.
  2. Aumentar el filtro de entornos de mercado: añadir indicadores de intensidad de tendencia para filtrar entornos de mercado desfavorables.
  3. Los parámetros de optimización se adaptan a sí mismos: los parámetros de las bandas de Bryn y los valores mínimos de la relación de líneas de sombra se ajustan a la fluctuación dinámica de la tasa de mercado.
  4. Mejorar los controles de riesgo: aumentar los controles de retirada y los mecanismos de monitoreo de la curva de intereses.
  5. Confirmación de señales mejoradas: introducción de otros indicadores técnicos como herramientas de confirmación auxiliares.

Resumir

Se trata de un sistema de negociación completo que combina el análisis de la banda de Brin y el diagrama de fluctuación para capturar oportunidades de reversión del mercado a través de un análisis multidimensional. La ventaja de la estrategia radica en su marco de análisis completo y su sistema de gestión de riesgos completo, pero al mismo tiempo se debe tener en cuenta el impacto del entorno del mercado y la selección de parámetros en el rendimiento de la estrategia.

Código Fuente de la Estrategia
/*backtest
start: 2023-11-29 00:00:00
end: 2024-11-28 00:00:00
period: 1d
basePeriod: 1d
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")