
Esta es una estrategia de negociación que utiliza el indicador de las bandas de Brin para identificar los momentos de fuerte fluctuación de los precios y tomar decisiones de compra o venta en consecuencia.
La estrategia determina si el precio actual se encuentra en el rango de fluctuación para determinar el momento de abrir o cerrar una posición mediante el cálculo de las líneas de trayectoria superior, media y inferior de la banda de Bryn. Cuando el precio se acerca a la trayectoria superior, se considera como una zona de extremo de múltiples, la estrategia opta por vender una posición cerrada; cuando el precio se acerca a la trayectoria inferior, se considera como una zona de extremo de cabeza vacía, la estrategia opta por comprar una posición.
Además, la estrategia también introduce un factor de reversión de tendencia, que si se produce una señal de reversión, también desencadena una decisión de compra o venta correspondiente. En concreto, la lógica de la estrategia es la siguiente:
Esta es la lógica de negociación básica de la estrategia. Utilizando las características de las bandas de Brin, combinadas con la tendencia y el factor de reversión, la estrategia trata de tomar el punto de reversión para negociar cuando la volatilidad se intensifica.
En comparación con la estrategia de promedio móvil común, la estrategia tiene las siguientes ventajas:
En general, la estrategia combina muy bien las bandas de Brin y el juicio de las entidades de precios, para operar en los puntos de inflexión razonables, garantizando un cierto nivel de ganancias y controlando el riesgo.
Sin embargo, la estrategia también tiene sus riesgos, que se manifiestan principalmente en:
En consecuencia, en el futuro se puede optimizar en los siguientes aspectos:
En general, esta estrategia es una típica plantilla de estrategia de comercio de la franja de Brin. Evita los inconvenientes de la mayor cantidad de operaciones ineficaces que se pueden generar fácilmente con el uso de la franja de Brin. Al introducir un juicio de reversión de tendencia para filtrar eficazmente las señales, en teoría se puede obtener un mejor rendimiento de la estrategia.
/*backtest
start: 2023-12-18 00:00:00
end: 2024-01-17 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//Noro
//2018
//@version=3
strategy("Noro's Bollinger Strategy v1.2", shorttitle = "Bollinger str 1.2", overlay = true )
//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
length = input(20, defval = 20, minval = 1, maxval = 1000, title = "Bollinger Length")
mult = input(2.0, defval = 2.0, minval = 0.001, maxval = 50, title = "Bollinger Mult")
source = input(ohlc4, defval = ohlc4, title = "Bollinger Source")
uset = input(true, defval = true, title = "Use trend entry")
usect = input(true, defval = true, title = "Use counter-trend entry")
fromyear = input(2018, defval = 2018, 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")
showbands = input(true, defval = true, title = "Show Bollinger Bands")
//Bollinger Bands
basis = sma(source, length)
dev = mult * stdev(source, length)
upper = basis + dev
lower = basis - dev
//Lines
col = showbands ? black : na
plot(upper, linewidth = 1, color = col)
plot(basis, linewidth = 1, color = col)
plot(lower, linewidth = 1, color = col)
//Body
body = abs(close - open)
abody = ema(body, 30)
//Signals
bar = close > open ? 1 : close < open ? -1 : 0
up1 = bar == -1 and close >= basis and close < upper and (close < strategy.position_avg_price or strategy.position_size == 0) and uset
dn1 = bar == 1 and close <= basis and close > lower and (close > strategy.position_avg_price or strategy.position_size == 0) and uset
up2 = close <= lower and usect
dn2 = close >= upper and usect
exit = (strategy.position_size > 0 and close > open) or (strategy.position_size < 0 and close < open) and body > abody / 2
//Trading
if up1 or up2
strategy.entry("Long", strategy.long, needlong == false ? 0 : na)
if dn1 or dn2
strategy.entry("Short", strategy.short, needshort == false ? 0 : na)
if exit
strategy.close_all()