Esta estrategia está diseñada sobre la base del indicador de Bollinger Bands para crear una estrategia de negociación de ruptura dinámica. Combina las condiciones del filtro del cuerpo de la vela y el filtro de color para buscar oportunidades de entrada de ruptura alrededor de la banda inferior de Bollinger. Las salidas se basan en el filtro del cuerpo. La estrategia gestiona automáticamente el tamaño de la posición y el riesgo.
Primero, calcule la línea base y la banda inferior de las bandas de Bollinger basándose en el precio bajo:
src = low
basis = sma(src, length)
dev = mult * stdev(src, length)
lower = basis - dev
Donde src es el precio bajo, longitud es el período de cálculo, base es la media móvil, dev es la desviación estándar y inferior es la banda inferior.
mult se establece generalmente en 2, lo que significa que la banda inferior está a una desviación estándar de distancia.
La estrategia incluye dos condiciones de filtro:
Filtro del cuerpo de la velaUtilice el tamaño del cuerpo nbody y su abody medio para determinar, sólo generar la señal de comercio cuando nbody es mayor que la mitad de abody.
Filtro de colores
Esto evita una falsa ruptura en la cabeza de la hbox.
Generar señal larga cuando se cumplan las condiciones siguientes:
low < lower // price breaks lower band
close < open or usecol == false // color filter
nbody > abody / 2 or usebod == false // body filter
Cuando el tamaño del cuerpo exceda de nuevo la mitad de la media, posición cercana:
close > open and nbody > abody / 2
La estrategia calcula el tamaño de la operación automáticamente para el crecimiento exponencial de la posición:
lot = strategy.position_size == 0 ? strategy.equity / close * capital / 100 : lot[1]
Añadir restricciones sobre el año, el mes y la fecha para limitar la negociación solo en un rango de fechas específico:
when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59))
La banda inferior de Bollinger proporciona un área de soporte dinámico para capturar retracements después de tendencias.
La combinación del cuerpo de la vela y los filtros de color evita los falsos brotes de manera efectiva.
Los tamaños de las posiciones aumentan exponencialmente al 100% gestionando el riesgo automáticamente.
El establecimiento de un intervalo de fechas reduce el riesgo asociado a la volatilidad del mercado en períodos específicos.
Cuando la tendencia al alza es fuerte, las bandas media y superior de BB pueden moverse hacia arriba rápidamente, causando una caída prolongada.
Combinar con indicadores de tendencia, detener la estrategia cuando se juzga que es un mercado alcista para evitar una reducción prolongada.
El escape puede fallar con el retiro y re-prueba de la banda inferior.
Agregue stop loss por debajo del nivel de soporte o agregue lógica para detectar una nueva prueba fallida para un stop loss rápido.
Optimizar el stop loss por debajo del soporte basado en los resultados de las pruebas de retroceso.
Fino sintonizar el cuerpo del filtro período de permanencia, filtro de color, etc. para encontrar óptimo.
Detener la estrategia cuando se juzga que es un mercado alcista.
Esta estrategia combina soporte BB, filtro de cuerpo, filtro de color y lógica de ruptura para capturar retracements de alta probabilidad.
/*backtest start: 2022-11-14 00:00:00 end: 2023-11-20 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //Noro //2018 //@version=2 strategy(title = "Noro's Wizard Strategy v1.0", shorttitle = "Wizard str 1.0", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 10) //Settings capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Capital, %") length = input(25, defval = 25, minval = 1, maxval = 200, title = "BB Period") usebod = input(false, defval = false, title = "Use Body-Filter") usecol = input(false, defval = false, title = "Use Color-Filter") showar = input(false, defval = false, title = "Show Arrows") fromyear = input(1900, defval = 1900, minval = 1900, maxval = 2100, title = "From Year") toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year") frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month") tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month") fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day") today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day") //Bollinger src = low mult = 2 basis = sma(src, length) dev = mult * stdev(src, length) lower = basis - dev plot(lower, color = lime, linewidth = 3, title="Bottom Line") //Body Filter nbody = abs(close - open) abody = sma(nbody, 10) body = nbody > abody / 2 or usebod == false //Signals up1 = low < lower and (close < open or usecol == false) and body exit = close > open and nbody > abody / 2 //Arrows needar = up1 and showar plotarrow(needar ? 1 : na) //Trading lot = strategy.position_size == 0 ? strategy.equity / close * capital / 100 : lot[1] if up1 if strategy.position_size < 0 strategy.close_all() strategy.entry("Long", strategy.long, lot, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59))) if time > timestamp(toyear, tomonth, today, 23, 59) or exit strategy.close_all()