Estrategia de toma de ganancias por niveles de Bollinger Bandit

BOLLINGER SMA stdev TP SL
Fecha de creación: 2025-08-26 11:39:47 Última modificación: 2025-08-26 11:39:47
Copiar: 5 Número de Visitas: 309
2
Seguir
319
Seguidores

Estrategia de toma de ganancias por niveles de Bollinger Bandit Estrategia de toma de ganancias por niveles de Bollinger Bandit

¿Qué tan buena es esta estrategia?

¿Sabías que esta estrategia de “ladrones de Brin” es como un francotirador en el mercado? ¡Oh, no es la que dispara al azar, sino que apunta específicamente a los “cruces” en los bordes del Brin! ¡Esta estrategia se aprovecha de inmediato de las oportunidades de rebote cuando el precio sale de la “zona de seguridad” del Brin como un niño malcriado!

La lógica central es muy simple.

La esencia de esta estrategia es el pensamiento inverso:

  • ¡El precio se desplomó = sobrevendido, listo para hacer más!
  • ¡El precio se ha subido a lo más alto = sobrecomprado, listo para vaciarse! Al igual que el resorte, cuanto más presionado es el resorte, más fuerte es la reacción. La cinta de brown es la herramienta de visualización de este “resorte”. La línea media de 20 días es el eje central, y la línea ascendente y descendente es el límite.

El encanto mágico de la esterilización de las estrías

¿Cuál es el diseño más brillante aquí? ¡Cancelación por etapas! No es como la estrategia tradicional de “un corte”, sino más bien como la de un comerciante inteligente:

  • Cuando se alcanza el TP1, el primer saco 50% de ganancias ((3 puntos)
  • El 50% restante se mantiene, es decir, TP2 ((5 puntos)
  • Si las cosas se ponen feas, hay 5 puntos de protección contra los daños

¡Es como vender en el mercado, vender la mitad de un libro y esperar a que el resto sea mejor!

Recomendaciones para la configuración de combate

¡Ha llegado la guía de la fosa!

  • Selección del cicloEl día 20 es la configuración clásica, pero se puede ajustar según la variedad de transacción
  • Configuración de la multiplicidadLa diferencia estándar de 0.1 veces es adecuada para la mayoría de las situaciones, y las variedades con gran fluctuación pueden ajustarse a 1.5-2.0
  • Cancelación de pérdidasLa configuración de 3/5/5 es muy conservadora, puede ser un poco radical 5/8/10

Recuerde: esta estrategia es más adecuada en situaciones de crisis, y en una tendencia unilateral, ¡cuidado con los hoyos de “falso avance”!

¿Por qué elegiste esta estrategia?

Si eres de los que prefieren “ganar de manera estable”, esta estrategia está hecha para ti. No te hará rico de la noche a la mañana, pero te ayudará a mantener la estabilidad en el flujo del mercado.

Código Fuente de la Estrategia
/*backtest
start: 2024-08-25 00:00:00
end: 2025-01-01 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT"}]
*/

//@version=6
strategy("Bollinger Bandit + TP Escalonado", overlay=true)

// Configuración básica
length = input.int(20, "Periodo", minval=1)
mult = input.float(1.0, "Multiplicador", minval=0.1, maxval=3.0)
source = input(close, "Fuente")

// Opción para cierre en media
close_on_ma = input.bool(true, "Cierre en Media Móvil")

// SL/TP CONFIGURABLE CON NIVELES FIJOS
use_sltp = input.bool(true, "Usar SL/TP Personalizado", group="Gestión de Riesgo")
sl_points = input.int(5, "Puntos para SL", minval=1, group="Gestión de Riesgo")
tp1_points = input.int(3, "Puntos para TP1", minval=1, group="Gestión de Riesgo")
tp2_points = input.int(5, "Puntos para TP2", minval=1, group="Gestión de Riesgo")

// MOSTRAR TEXTO DE PRECIO
show_price_text = input.bool(true, "Mostrar Precio SL/TP", group="Visualización")

// Cálculo de las Bandas de Bollinger
basis = ta.sma(source, length)
dev = mult * ta.stdev(source, length)
upper = basis + dev
lower = basis - dev

// Detección de cruces
longCondition = ta.crossover(close, lower)
shortCondition = ta.crossunder(close, upper)

// Cálculo de SL/TP con niveles FIJOS EXACTOS - CORREGIDO
var float last_sl_price = na
var float last_tp1_price = na
var float last_tp2_price = na
var int last_entry_bar = 0
var float last_entry_price = na
var bool last_is_long = false

if longCondition or shortCondition
    last_entry_price := close
    last_is_long := longCondition
    if longCondition
        // COMPRA: SL = entrada - 5 puntos, TP1 = entrada + 3 puntos, TP2 = entrada + 5 puntos
        last_sl_price := last_entry_price - sl_points
        last_tp1_price := last_entry_price + tp1_points
        last_tp2_price := last_entry_price + tp2_points
    else
        // VENTA: SL = entrada + 5 puntos, TP1 = entrada - 3 puntos, TP2 = entrada - 5 puntos
        last_sl_price := last_entry_price + sl_points
        last_tp1_price := last_entry_price - tp1_points
        last_tp2_price := last_entry_price - tp2_points
    last_entry_bar := bar_index

// Entradas
if (longCondition)
    strategy.entry("Long", strategy.long)
    
if (shortCondition)
    strategy.entry("Short", strategy.short)

// DETECCIÓN DE CIERRES CON TEXTO PERSONALIZADO
var bool long_closed_by_sl = false
var bool long_closed_by_tp1 = false
var bool long_closed_by_tp2 = false
var bool short_closed_by_sl = false
var bool short_closed_by_tp1 = false
var bool short_closed_by_tp2 = false

// Para posiciones LARGAS
if (use_sltp and strategy.position_size > 0)
    if low <= last_sl_price
        strategy.close("Long", comment="LongSL")
        long_closed_by_sl := true
    else if high >= last_tp1_price and not long_closed_by_tp1
        strategy.close("Long", qty_percent=50, comment="LongTP1")
        long_closed_by_tp1 := true
    else if high >= last_tp2_price and not long_closed_by_tp2
        strategy.close("Long", comment="LongTP2")
        long_closed_by_tp2 := true
else if (strategy.position_size > 0)
    if (ta.crossunder(close, upper))
        strategy.close("Long", comment="STOP")
    if (close_on_ma and ta.crossunder(close, basis))
        strategy.close("Long", comment="STOPMedia")

// Para posiciones CORTAS
if (use_sltp and strategy.position_size < 0)
    if high >= last_sl_price
        strategy.close("Short", comment="ShortSL")
        short_closed_by_sl := true
    else if low <= last_tp1_price and not short_closed_by_tp1
        strategy.close("Short", qty_percent=50, comment="ShortTP1")
        short_closed_by_tp1 := true
    else if low <= last_tp2_price and not short_closed_by_tp2
        strategy.close("Short", comment="ShortTP2")
        short_closed_by_tp2 := true
else if (strategy.position_size < 0)
    if (ta.crossover(close, lower))
        strategy.close("Short", comment="STOP")
    if (close_on_ma and ta.crossover(close, basis))
        strategy.close("Short", comment="STOPMedia")

// Reset flags cuando no hay posición
if strategy.position_size == 0
    long_closed_by_sl := false
    long_closed_by_tp1 := false
    long_closed_by_tp2 := false
    short_closed_by_sl := false
    short_closed_by_tp1 := false
    short_closed_by_tp2 := false

// Visualización (manteniendo tus colores y estilo)
plot(basis, "Media", color=color.blue, linewidth=1)
plot(upper, "Banda Superior", color=color.orange, linewidth=2)
plot(lower, "Banda Inferior", color=color.green, linewidth=2)

// Señales de entrada
plotshape(longCondition, "↑ Compra", shape.triangleup, location.belowbar, color=color.green, size=size.tiny)
plotshape(shortCondition, "↓ Venta", shape.triangledown, location.abovebar, color=color.red, size=size.tiny)

// Relleno entre bandas (manteniendo tu estilo)
bgcolor = color.new(color.yellow,80)
fill(plot(upper), plot(lower), bgcolor)