Esta estrategia combina las bandas de Bollinger con indicadores de Triple Supertrend para el comercio. Crea un sistema robusto de seguimiento de tendencias mediante la utilización de bandas de Bollinger para la evaluación del rango de volatilidad y Triple Supertrend para la confirmación de tendencias. Las bandas de Bollinger identifican movimientos extremos de precios, mientras que la Triple Supertrend proporciona múltiples confirmaciones de la dirección de la tendencia a través de diferentes configuraciones de parámetros. Las operaciones se ejecutan solo cuando todas las señales se alinean, reduciendo el riesgo de señales falsas.
La lógica central incluye los siguientes componentes clave:
Esta es una estrategia de seguimiento de tendencias que combina Bandas de Bollinger y Triple Supertrend, mejorando la confiabilidad de la negociación a través de múltiples confirmaciones de indicadores técnicos. La estrategia demuestra una fuerte capacidad de captura de tendencias y control de riesgos, pero las condiciones del mercado afectan significativamente su rendimiento. A través de la optimización y el refinamiento continuos, la estrategia puede mantener un rendimiento estable en diferentes condiciones del mercado. Se recomienda realizar pruebas de retroceso y optimización de parámetros antes de la negociación en vivo, y hacer los ajustes apropiados basados en las condiciones reales del mercado.
//@version=5 strategy("Demo GPT - Bollinger + Triple Supertrend Combo", overlay=true, commission_type=strategy.commission.percent, commission_value=0.1, slippage=3) // ------------------------------- // User Input for Date Range // ------------------------------- startDate = input(title="Start Date", defval=timestamp("2018-01-01 00:00:00")) endDate = input(title="End Date", defval=timestamp("2069-12-31 23:59:59")) // ------------------------------- // Bollinger Band Inputs // ------------------------------- lengthBB = input.int(20, "Bollinger Length") multBB = input.float(2.0, "Bollinger Multiplier") // ------------------------------- // Supertrend Inputs for 3 lines // ------------------------------- // Line 1 atrPeriod1 = input.int(10, "ATR Length (Line 1)", minval = 1) factor1 = input.float(3.0, "Factor (Line 1)", minval = 0.01, step = 0.01) // Line 2 atrPeriod2 = input.int(10, "ATR Length (Line 2)", minval = 1) factor2 = input.float(4.0, "Factor (Line 2)", minval = 0.01, step = 0.01) // Line 3 atrPeriod3 = input.int(10, "ATR Length (Line 3)", minval = 1) factor3 = input.float(5.0, "Factor (Line 3)", minval = 0.01, step = 0.01) // ------------------------------- // Bollinger Band Calculation // ------------------------------- basis = ta.sma(close, lengthBB) dev = multBB * ta.stdev(close, lengthBB) upperBand = basis + dev lowerBand = basis - dev // Plot Bollinger Bands plot(upperBand, "Upper BB", color=color.new(color.blue, 0)) plot(basis, "Basis", color=color.new(color.gray, 0)) plot(lowerBand, "Lower BB", color=color.new(color.blue, 0)) // ------------------------------- // Supertrend Calculation Line 1 // ------------------------------- [supertrendLine1, direction1] = ta.supertrend(factor1, atrPeriod1) supertrendLine1 := barstate.isfirst ? na : supertrendLine1 upTrend1 = plot(direction1 < 0 ? supertrendLine1 : na, "Up Trend 1", color = color.green, style = plot.style_linebr) downTrend1 = plot(direction1 < 0 ? na : supertrendLine1, "Down Trend 1", color = color.red, style = plot.style_linebr) // ------------------------------- // Supertrend Calculation Line 2 // ------------------------------- [supertrendLine2, direction2] = ta.supertrend(factor2, atrPeriod2) supertrendLine2 := barstate.isfirst ? na : supertrendLine2 upTrend2 = plot(direction2 < 0 ? supertrendLine2 : na, "Up Trend 2", color = color.new(color.green, 0), style = plot.style_linebr) downTrend2 = plot(direction2 < 0 ? na : supertrendLine2, "Down Trend 2", color = color.new(color.red, 0), style = plot.style_linebr) // ------------------------------- // Supertrend Calculation Line 3 // ------------------------------- [supertrendLine3, direction3] = ta.supertrend(factor3, atrPeriod3) supertrendLine3 := barstate.isfirst ? na : supertrendLine3 upTrend3 = plot(direction3 < 0 ? supertrendLine3 : na, "Up Trend 3", color = color.new(color.green, 0), style = plot.style_linebr) downTrend3 = plot(direction3 < 0 ? na : supertrendLine3, "Down Trend 3", color = color.new(color.red, 0), style = plot.style_linebr) // ------------------------------- // Middle line for fill (used as a reference line) // ------------------------------- bodyMiddle = plot(barstate.isfirst ? na : (open + close) / 2, "Body Middle", display = display.none) // Fill areas for each supertrend line fill(bodyMiddle, upTrend1, color.new(color.green, 90), fillgaps = false) fill(bodyMiddle, downTrend1, color.new(color.red, 90), fillgaps = false) fill(bodyMiddle, upTrend2, color.new(color.green, 90), fillgaps = false) fill(bodyMiddle, downTrend2, color.new(color.red, 90), fillgaps = false) fill(bodyMiddle, upTrend3, color.new(color.green, 90), fillgaps = false) fill(bodyMiddle, downTrend3, color.new(color.red, 90), fillgaps = false) // Alerts for the first line only (as an example) alertcondition(direction1[1] > direction1, title='Downtrend to Uptrend (Line 1)', message='Supertrend Line 1 switched from Downtrend to Uptrend') alertcondition(direction1[1] < direction1, title='Uptrend to Downtrend (Line 1)', message='Supertrend Line 1 switched from Uptrend to Downtrend') alertcondition(direction1[1] != direction1, title='Trend Change (Line 1)', message='Supertrend Line 1 switched trend') // ------------------------------- // Strategy Logic // ------------------------------- inDateRange = true // Long Conditions longEntryCondition = inDateRange and close > upperBand and direction1 < 0 and direction2 < 0 and direction3 < 0 longExitCondition = direction1 > 0 or direction2 > 0 or direction3 > 0 // Short Conditions shortEntryCondition = inDateRange and close < lowerBand and direction1 > 0 and direction2 > 0 and direction3 > 0 shortExitCondition = direction1 < 0 or direction2 < 0 or direction3 < 0 // Execute Long Trades if longEntryCondition and strategy.position_size <= 0 strategy.entry("Long", strategy.long) if strategy.position_size > 0 and longExitCondition strategy.close("Long") // Execute Short Trades if shortEntryCondition and strategy.position_size >= 0 strategy.entry("Short", strategy.short) if strategy.position_size < 0 and shortExitCondition strategy.close("Short")