En la carga de los recursos... Cargando...

Estrategia de negociación de ruptura de la banda de Bollinger

El autor:¿ Qué pasa?, Fecha: 2024-02-05 10:53:46
Las etiquetas:

img

Resumen general

Esta estrategia combina el indicador de la banda de Bollinger y los indicadores de volumen para identificar oportunidades de ruptura de impulso fuerte por encima de la banda superior de Bollinger cuando el volumen de negociación es alto y se ingresan posiciones largas.

Estrategia lógica

  1. Utilice el indicador de la banda de Bollinger para determinar si el precio se rompe por encima de la banda superior.
  2. Se utilizarán indicadores de volumen de operaciones para determinar si el volumen actual es significativamente superior al promedio del período anterior.
  3. Entrar en posición larga cuando el volumen de negociación es alto y el precio se rompe por encima de la banda superior de Bollinger.
  4. Utilice indicadores de promedio móvil para determinar la tendencia a corto y mediano plazo para reducir las pérdidas en el tiempo.

Esta estrategia considera principalmente tres factores: nivel de precios, impulso y tendencia. Cuando el precio rompe la banda superior de Bollinger en la zona de compra, el aumento en el volumen de operaciones indica un fuerte impulso y entrada de capital. Este es el momento adecuado para ingresar a una posición larga. Luego utiliza promedios móviles para determinar la tendencia del mercado para evitar mantener posiciones muertas. Al combinar la acción de precios, el impulso y el control de riesgos, tiene como objetivo capturar ganancias de tendencias fuertes.

Ventajas

  1. Combinando el filtro de volumen, sólo compra con un impulso fuerte, reduciendo el riesgo.

  2. Capaz de reducir las pérdidas en el tiempo mediante la determinación de la tendencia de la media móvil, reduciendo las pérdidas de tenencia.

  3. Estrategia cuantitativa implementada que combina múltiples indicadores para la toma de decisiones.

  4. Estructuras de código claras, fáciles de leer y mantener, diseño modular de cálculo de indicadores, generación de señales y gestión de la posición.

Los riesgos

  1. Las bandas de Bollinger podrían fallar durante las fluctuaciones extremas de precios, faltando señales o generando señales falsas.

  2. No hay ganancias cuando el volumen general de operaciones es bajo.

  3. La determinación de la tendencia de las medias móviles también podría fallar, al no poder garantizar plenamente un stop loss efectivo.

  4. El ajuste incorrecto de parámetros también afecta la rentabilidad de la estrategia.

Direcciones de optimización

  1. Añadir más indicadores técnicos para un mejor análisis de tendencia y soporte/resistencia, mejorando el stop loss, por ejemplo, patrones de candlesticks, canales, niveles de soporte clave.

  2. Añadir modelos de aprendizaje automático para juzgar las posibilidades reales de fuga, reduciendo las señales falsas. por ejemplo, modelos de aprendizaje profundo LSTM.

  3. Optimizar las estrategias de gestión de capital, como el tamaño dinámico de las posiciones, el seguimiento de la parada de pérdida para reducir el impacto de la pérdida de una sola operación.

  4. Prueba más productos y marcos de tiempo, ajusta parámetros como bandas de Bollinger, ventana de volumen para mejorar la robustez de la estrategia.

Conclusión

Esta estrategia integra la banda de Bollinger y los indicadores de volumen de negociación para identificar fuertes oportunidades de compra de impulso, con promedios móviles que aseguran un stop loss efectivo.


/*backtest
start: 2024-01-05 00:00:00
end: 2024-02-04 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © KAIST291

//@version=4
initial_capital=1000
strategy("prototype", overlay=true)
length1=input(1)
length3=input(3)
length7=input(7)
length9=input(9)
length14=input(14)
length20=input(20)
length60=input(60)
length120=input(120)
ma1= sma(close,length1)
ma3= sma(close,length3)
ma7= sma(close,length7)
ma9= sma(close,length9)
ma14=sma(close,length14)
ma20=sma(close,length20)
ma60=sma(close,length60)
ma120=sma(close,length120)
rsi=rsi(close,14)
// BUYING VOLUME AND SELLING VOLUME //
BV = iff( (high==low), 0, volume*(close-low)/(high-low))
SV = iff( (high==low), 0, volume*(high-close)/(high-low))
vol = iff(volume > 0, volume, 1)
dailyLength = input(title = "Daily MA length", type = input.integer, defval = 50, minval = 1, maxval = 100)
weeklyLength = input(title = "Weekly MA length", type = input.integer, defval = 10, minval = 1, maxval = 100)
//-----------------------------------------------------------
Davgvol = sma(volume, dailyLength)
Wavgvol = sma(volume, weeklyLength)
//-----------------------------------------------------------
length = input(20, minval=1)
src = input(close, title="Source")
mult = input(2.0, minval=0.001, maxval=50, title="StdDev")
mult2= input(1.5, minval=0.001, maxval=50, title="exp")
mult3= input(1.0, minval=0.001, maxval=50, title="exp1")
mult4= input(2.5, minval=0.001, maxval=50, title="exp2")
basis = sma(src, length)
dev = mult * stdev(src, length)
upper = basis + dev
lower = basis - dev
dev2= mult2 * stdev(src, length)
Supper= basis + dev2
Slower= basis - dev2
dev3= mult3 * stdev(src, length)
upper1= basis + dev3
lower1= basis - dev3
dev4= mult4 * stdev(src, length)
upper2=basis + dev4
lower2=basis - dev4
offset = input(0, "Offset", type = input.integer, minval = -500, maxval = 500)
plot(basis, "Basis", color=#FF6D00, offset = offset)
p1 = plot(upper, "Upper", color=#2962FF, offset = offset)
p2 = plot(lower, "Lower", color=#2962FF, offset = offset)
fill(p1, p2, title = "Background", color=color.rgb(33, 150, 243, 95))
//----------------------------------------------------
exit=(close-strategy.position_avg_price / strategy.position_avg_price*100)
bull=( BV>SV and BV>Davgvol)
bull2=(BV>SV and BV>Davgvol)
bux =(close>Supper and close>Slower and volume<Davgvol)
bear=(SV>BV and SV>Davgvol)
con=(BV>Wavgvol and rsi>80)
imInATrade = strategy.position_size != 0
highestPriceAfterEntry = valuewhen(imInATrade, high, 0)
// STRATEGY LONG //
if (bull and close>upper1 and close>Supper and high>upper and rsi<80)
    strategy.entry("Long",strategy.long)

if (strategy.position_avg_price*1.02<close)
    strategy.close("Long")
else if (low<ma9 and strategy.position_avg_price<close)
    strategy.close("Long")
else if (ma20>close and strategy.position_avg_price<close )
    strategy.close("Long")
else if (rsi>80 and strategy.position_avg_price<close)
    strategy.close("Long")
else if (strategy.openprofit < strategy.position_avg_price*0.9-close)
    strategy.close("Long")
else if (high<upper and strategy.position_avg_price<close)
    strategy.close("Long")
//////////////////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////////////////
strategy.entry("Short",strategy.short,when=low<ma20 and low<lower1 and close<Slower and crossunder(ma60,ma120))

if (close<strategy.position_avg_price*0.98)
    strategy.close("Short")

else if (rsi<20)
    strategy.close("Short")



Más.