La estrategia de la banda de Bollinger A para el avance de precios

El autor:¿ Qué pasa?, Fecha: 2023-11-06 11:43:14
Las etiquetas:

img

Resumen general

Esta estrategia utiliza el indicador de la banda de Bollinger para juzgar la amplitud de las fluctuaciones de precios, combinado con patrones de línea K para las operaciones de ruptura de precios. Los rieles superiores e inferiores de la banda de Bollinger pueden juzgar aproximadamente las tendencias ascendentes y descendentes de los precios. Combinándolo con indicadores de patrones de línea K, se puede averiguar el momento de compra y venta relativamente obvio. La estrategia juzga principalmente el avance por debajo de la banda de Bollinger para ir largo, el avance por encima de la línea para ir corto, mientras que combina el indicador de Stoch para juzgar el estado de sobrecompra y sobreventa, y utiliza patrones de línea K para proporcionar señales alternativas de compra y venta.

Principio de la estrategia

La estrategia consta de los siguientes indicadores principales:

  1. Indicador de Bandas de Bollinger, que incluye Bollinger middle rail, Bollinger upper rail y Bollinger lower rail. Las Bandas de Bollinger calculan el rango de fluctuación de los precios a través de la desviación estándar de los precios, juzgando así la tendencia de fluctuación de los precios.

  2. Indicador de acciones, para juzgar si la acción está en un estado de sobrecompra o sobreventa.

  3. Los patrones de la línea K, juzgar algunos patrones comunes como la línea grande Yang, línea grande Yin, etc como oportunidades comerciales alternativas.

Condición de compra: el precio cruza por encima del tren inferior de Bollinger, el indicador de Stoch muestra un estado de sobreventa (K<20, D<20), el promedio móvil rápido cruza por encima del promedio móvil lento.

Condición de venta: el precio se cruza por debajo de la línea superior de Bollinger, o stop loss cuando es rentable.

La estrategia combina tanto el análisis de tendencias como el juicio de sobrecompra/sobreventa, lo que reduce la tasa de señales falsas y permite la entrada oportuna al mercado cuando surge una tendencia.

Análisis de ventajas

  1. Combinando la banda de Bollinger y el indicador de Stoch, puede comprar en puntos bajos obvios, reduciendo el riesgo.

  2. Los patrones de la línea K sirven como condición auxiliar, evitando compras equivocadas en el mercado de rango.

  3. La adopción de juicios de doble condición mejora la estabilidad y fiabilidad de la estrategia.

  4. El mecanismo de stop loss evita pérdidas enormes.

Análisis de riesgos

  1. Las discontinuidades de precios pueden causar pérdidas relativamente grandes.

  2. El indicador de Stoch tiene una alta probabilidad de emitir señales falsas.

  3. Es fácil generar señales comerciales incorrectas en mercados de rango.

  4. Necesita detener pérdidas oportunas para controlar los riesgos.

  5. Necesitamos prestar atención a la fuerza de los avances para evitar el retroceso después de subir.

Direcciones de optimización

  1. Optimice el conjunto de acciones, seleccione acciones con grandes fluctuaciones y tendencias obvias.

  2. Optimizar los parámetros de Bollinger, ajustar el ciclo del tren medio, optimizar la comprensión de los puntos de compra / venta.

  3. Optimizar los parámetros de Stoch, ajustar los ciclos de la línea K y la línea D, mejorar la fiabilidad del indicador.

  4. Añadir juicios de condiciones de volumen de negociación para evitar el retroceso después de subir a lo alto.

  5. Agregue estrategias de stop loss como el stop loss posterior, el stop loss móvil, etc. para controlar los riesgos de pérdida.

  6. Evaluar la adición de otros indicadores técnicos como MACD, KDJ, etc. para mejorar la estabilidad de la estrategia.

  7. Prueba diferentes períodos de retención para optimizar la relación de ganancia y utilización.

Resumen de las actividades

La estrategia integra la banda de Bollinger, el indicador de Stoch con indicadores de fundamentos técnicos. Bajo la premisa de controlar los riesgos, compra a precios bajos y vende cerca de máximos históricos, realizando un modelo de ganancia relativamente estable. Pero también conlleva riesgos como quedar atrapado, stop loss ineficaz, etc. Se puede lograr una mayor estabilidad y rentabilidad optimizando parámetros y agregando otros indicadores de juicio. La estrategia es adecuada para los inversores que negocian cuando los precios oscilan alrededor de zonas de sobrecompra y sobreventa.


/*backtest
start: 2023-10-29 00:00:00
end: 2023-11-03 18:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy("Bollinger e Tendência", overlay=true)

//MÉDIAS 
periodolenta = 14
periodosimples = 47
periodome = 7

psimples = input(title="Período da média simples", defval=periodosimples)
pexp = input(title="Período da média exponencial", defval=periodome)
pexplenta = input(title="Período da média exp lenta", defval=periodolenta)
msimples = sma(close, psimples)
mexp = ema(close, pexp)
mexplenta = ema(close, pexplenta)

plot(msimples, linewidth=2, color=yellow)
plot(mexp, linewidth=5, color=white)
plot(mexplenta, linewidth=2, color=orange)

//BOLLANGER
length = input(21, minval=2)
src = input(close, title="Source")
mult = input(1.5, minval=0.001, maxval=50)
basis = sma(src, length)
dev = mult * stdev(src, length)
upperBol = basis + dev
lowerBol = basis - dev

p1 = plot(upperBol, title="Upper", color=blue, linewidth=3)
p2 = plot(lowerBol, title="Lower", color=blue, linewidth=3)
fill(p1, p2, color = purple, transp=90)

//BBW (altura do Bollanger)
basis2 = sma(close, 21)
bbw = (upperBol-lowerBol)/basis2


//STOCH E FORÇA
source = close
lengthRSI = input(11, minval=2), lengthStoch = input(7, minval=2)
smoothK = input(3,minval=3), smoothD = input(4,minval=3)
OverSold = input(20), OverBought = input(80)
rsi1 = rsi(source, lengthRSI)
k = sma(stoch(rsi1, rsi1, rsi1, lengthStoch), smoothK)
d = sma(k, smoothD)
hline(OverSold,color=blue)
hline(OverBought,color=blue)



// Cor das Tendências (Verde ou Vermelho)
// Baseado no código: "Pivot Daily Price Color" (by Rimko)
pivot = (high + low + close ) / 3.0 
dtime_pivot = request.security(syminfo.tickerid, 'D', pivot[1]) 
pv = dtime_pivot ? dtime_pivot : na
pe = ema(close,periodome)
col = sma(close,1)>pv?green:red
col2 = sma(close,1)>pe?green:red
offs_daily = 0 
pp=plot(pv, title="Daily Pivot",style=linebr, color=black,linewidth=2) 
p=plot(sma(close,1), transp=100, editable=false)
pema = plot(pe, title="EMA",style=line, color=black,linewidth=2, transp = 50)
fill(p,pema,color=col2,title="EMA to price color", transp = 50)
fill(pp,p,color=col, title="Privot to price color", transp = 90) 


//*************************************************************************************************************************************************
// Candles (identificação):
// Baseado no código: "Candlesticks Pattern Identified" (by Repo32)
trend= input(5, minval=1, title="Trend in Bars")

DojiSize = input(0.05, minval=0.01, title="Doji size")
data=(abs(open - close) <= (high - low) * DojiSize)
//plotchar(data, title="Doji", color=white)
plotshape(data, title="Doji", color=white, style=shape.cross)
 //text='Doji'

data6=(close[1] > open[1] and open > close and open <= close[1] and open[1] <= close and open - close < close[1] - open[1] and open[trend] < open)
plotshape(data6, title= "Bearish Harami", color=red, style=shape.triangledown)
//, text="Harami\nde Baixa"

data8=(close[1] > open[1] and open > close and open >= close[1] and open[1] >= close and open - close > close[1] - open[1] and open[trend] < open)
plotshape(data8,  title= "Bearish Engulfing", color=red, style=shape.triangledown)
//, text="Engolfo\nde Baixa"

data13=(open[1]<close[1] and open<=open[1] and close<=open and open[trend] < open)
plotshape(data13, title= "Bearish Kicker", color=red, style=shape.triangledown)
//, text="Kicker\nde Baixa"

data14=(((high-low>4*(open-close))and((close-low)/(.001+high-low)>=0.75)and((open-low)/(.001+high-low)>=0.75))and open[trend] < open and high[1] < open and high[2] < open)
plotshape(data14,  title= "Hanging Man", location=location.belowbar, color=red, style=shape.triangledown)
//, text="Enforcado"

data7=(open[1] > close[1] and close > open and close <= open[1] and close[1] <= open and close - open < open[1] - close[1] and open[trend] > open)
plotshape(data7,  title= "Bullish Harami", location=location.belowbar, color=lime, style=shape.triangleup)
//, text="Mulher\nGrávida"

data9=(open[1] > close[1] and close > open and close >= open[1] and close[1] >= open and close - open > open[1] - close[1] and open[trend] > open)
plotshape(data9, title= "Bullish Engulfing", location=location.belowbar, color=lime, style=shape.triangleup)
//, text="Engolfo\nde Alta"

//uppercandle = highest(10)[1]
data10=(close[1] < open[1] and  open < low[1] and close > close[1] + ((open[1] - close[1])/2) and close < open[1] and open[trend] > open)
plotshape(data10, title= "Piercing Line", location=location.belowbar, color=lime, style=shape.triangleup)
//, text="Piercing"

lowercandle = lowest(10)[1]
data11=(low == open and  open < lowercandle and open < close and close > ((high[1] - low[1]) / 2) + low[1] and open[trend] > open)
plotshape(data11, title= "Bullish Belt", location=location.belowbar, color=lime, style=shape.triangleup)
//, text="Contenção\nde Alta"

data12=(open[1]>close[1] and open>=open[1] and close>open and open[trend] > open)
plotshape(data12, title= "Bullish Kicker", location=location.belowbar, color=lime, style=shape.triangleup)//, text="Kicker\nde Alta"


data5=(((high - low)>3*(open -close)) and  ((close - low)/(.001 + high - low) > 0.6) and ((open - low)/(.001 + high - low) > 0.6))
plotshape(data5, title= "Hammer", location=location.belowbar, color=white, style=shape.diamond)

data5b=(((high - low)>3*(open -close)) and  ((high - close)/(.001 + high - low) > 0.6) and ((high - open)/(.001 + high - low) > 0.6))
plotshape(data5b, title= "Inverted Hammer", location=location.belowbar, color=white, style=shape.diamond)
//, text="Martelo\nInvertido"

data2=(close[2] > open[2] and min(open[1], close[1]) > close[2] and open < min(open[1], close[1]) and close < open )
//plotshape(data2, title= "Evening Star", location=location.belowbar, color=red, style=shape.arrowdown, text="Estrela\nda Tarde")
plotchar(data2, title="Evening Star", color=white)

data3=(close[2] < open[2] and max(open[1], close[1]) < close[2] and open > max(open[1], close[1]) and close > open )
//plotshape(data3,  title= "Morning Star", location=location.belowbar, color=lime, style=shape.arrowup, text="Estrela\nda Manhã")
plotchar(data3, title="Morning Star", color=white, location=location.belowbar)

data4=(open[1] < close[1] and open > close[1] and high - max(open, close) >= abs(open - close) * 3 and min(close, open) - low <= abs(open - close))
//plotshape(data4, title= "Shooting Star", color=red, style=shape.arrowdown, text="Estrela\nCadente")
plotchar(data4, title="Shooting Star", color=white)



//**********************************************************************************************************



// Ações:

momento = strategy.position_size[0] > strategy.position_size[1]
valorcompra = valuewhen(momento, open, 0)
valorbbw = input(title="Altura Máxima do Bollinger", defval=10)

alerta = crossunder(close, lowerBol)
alertcondition(alerta, title='Abaixo da Banda Baixa', message='Fechou abaixo da banda baixa...!')

//data7 data9 data10 data11 data12

compra =  crossover(close, lowerBol) and ((k<=20) and (d<=20)) and (mexp>mexp[1])
//compra = (data7 or data9 or data10 or data11 or data12) and (msimples>msimples[1]) and ((k<=20) and (d<=20)) and (bbw<valorbbw/1000)
//compra =  (open<close) and (crossover (close, lowerBol)) and ((k<=20) and (d<=20)) and (bbw<valorbbw/1000) and (msimples>msimples[1])

venda = crossover(close, upperBol)
//(close >= (valorcompra + (valorcompra * 0.025))) 

strategy.entry ("Compra", strategy.long, when=compra)
strategy.entry ("Venda", strategy.short, when=venda)


//plotshape(series=compra, title="Compra", style=shape.triangleup, location=location.belowbar, color=green, text="COMPRA", size=size.small)
//plotshape(series=venda, title="Venda", style=shape.triangledown, location=location.abovebar, color=red, text="VENDA", size=size.small)  






Más.