La estrategia de bandas de Bollinger es una estrategia clásica que utiliza bandas de Bollinger para el seguimiento de tendencias y señales de sobrecompra / sobreventa.
La estrategia juzga las condiciones de sobrecompra / sobreventa a través de cruces dorados / muertos de las bandas superiores / inferiores de Bollinger para establecer posiciones. El área entre las bandas refleja el rango de volatilidad actual del mercado. Las bandas consisten en bandas medias, superiores e inferiores, donde la banda media es el promedio móvil simple de N días y las bandas superiores / inferiores son la banda media +/- K desviaciones estándar.
Las bandas de Bollinger reflejan la volatilidad del mercado y el rango de oscilación. Tocar la banda inferior significa sobreventa del status quo - los huecos tienen mayores probabilidades de ser llenados. Por lo tanto, las posiciones largas deben considerarse basadas en el principio de reversión media. Del mismo modo, tocar la banda superior representa condiciones potenciales de sobrecompra y posibles reversiones de precios, por lo que se pueden establecer posiciones cortas para beneficiarse de los movimientos a la baja.
Esta estrategia combina las señales de sobrecompra/sobreventa de las bandas de Bollinger para entradas de seguimiento de tendencias.
Cuando el precio cruza por encima de la banda inferior, el mercado sale del área de sobreventa en un rango razonable. Las posiciones largas se pueden abrir. Cuando el precio cruza por debajo de la banda superior, el mercado se vuelve sobrecomprado. Luego se pueden abrir los cortes.
Cuando las pérdidas exceden el porcentaje de pérdida, las posiciones actuales se detienen para limitar las pérdidas adicionales.
Identificar los niveles de sobrecompra/sobreventa con bandas de Bollinger para las configuraciones de compra baja-venta alta a juzgar por los cruces de bandas.
Captar tendencias a través de la propiedad de volatilidad de las bandas de Bollinger.
El mecanismo de stop loss limita efectivamente la pérdida máxima por operación.
La combinación de seguimiento de tendencias y stop loss conduce a ganancias constantes.
La configuración de parámetros afecta a la calidad de la señal. La longitud de banda media N y el multiplicador de desviación estándar K deben ajustarse racionalmente para diferentes mercados, o la precisión se verá afectada.
El alto porcentaje de pérdidas puede afectar a la estabilidad del rendimiento. El alto porcentaje de pérdidas puede generar pérdidas más grandes por operación, mientras que el bajo porcentaje de pérdidas puede desencadenar pérdidas prematuras.
Los filtros adicionales con otros indicadores pueden mejorar la precisión de la señal.
Se pueden probar diferentes configuraciones de períodos de retención, como la combinación de bandas de periodos por hora o más cortas para una mayor frecuencia de negociación y mejoras en la eficiencia del uso del capital.
Esta estrategia aprovecha las bandas de Bollinger para señales de sobrecompra / sobreventa e incorpora stop loss para controlar el riesgo. Es una estrategia de seguimiento de tendencias común. A través de la optimización de parámetros, la integración de señales más precisas y los niveles de stop loss, se pueden lograr ganancias constantes.
/*backtest start: 2023-11-15 00:00:00 end: 2023-11-22 00:00:00 period: 5m basePeriod: 1m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy(title="Bollinger Bands Strategy", overlay=false, shorttitle="BBS", pyramiding=0, currency=currency.USD, commission_type=strategy.commission.percent, commission_value=0.03, initial_capital=1000) source = input(close, "Source") length = input.int(20, minval=1) mult = input.float(2.0, minval=0.001, maxval=50, step=0.001) stopLossFactor = input.float(1, "Stop Loss Percent", maxval = 100, minval = 0, step=0.1) basis = ta.sma(source, length) dev = mult * ta.stdev(source, length) upper = basis + dev lower = basis - dev var float lastTradePrice = na var float stopLossLow = na var float stopLossHigh = na var bool currentIsLong = na var bool nextExpectedIsLong = true var bool existedLong = false var bool existedShort = false buyEntry = ta.crossover(source, lower) sellEntry = ta.crossunder(source, upper) if (buyEntry and nextExpectedIsLong == true) strategy.entry("BBandLE", strategy.long, comment="BBandLE") nextExpectedIsLong := false if(nz(strategy.position_size[1], 0) < 0) // new position detected lastTradePrice := close stopLossLow := lastTradePrice * (1 - (stopLossFactor / 100)) stopLossHigh := lastTradePrice * (1 + (stopLossFactor / 100)) else strategy.cancel("BBandLE") if (sellEntry and nextExpectedIsLong == false) strategy.entry("BBandSE", strategy.short, comment="BBandSE") nextExpectedIsLong := true if(nz(strategy.position_size[1], 0) > 0) // new position detected lastTradePrice := close stopLossLow := lastTradePrice * (1 - (stopLossFactor / 100)) stopLossHigh := lastTradePrice * (1 + (stopLossFactor / 100)) else strategy.cancel("BBandSE") strategy.close("BBandLE", close < stopLossLow) strategy.close("BBandSE", close > stopLossHigh) // if(nz(strategy.position_size[1], 0) < 0 and close > stopLossHigh) // strategy.entry("BBandLE", strategy.long, comment="BBandLE") // lastTradePrice := close // stopLossLow := lastTradePrice * (1 - (stopLossFactor / 100)) // stopLossHigh := lastTradePrice * (1 + (stopLossFactor / 100)) // if(nz(strategy.position_size[1], 0) > 0 and close < stopLossLow) // strategy.exit("BBandSE", strategy.short, comment="BBandSE") // lastTradePrice := close // stopLossLow := lastTradePrice * (1 - (stopLossFactor / 100)) // stopLossHigh := lastTradePrice * (1 + (stopLossFactor / 100)) plot(source, "close", color.blue) plot(lower, "lower", color.red) plot(upper, "upper", color.red) plot(stopLossLow, "StopLossLow", color.black) plot(stopLossHigh, "StopLossHigh", color.black) plot(lastTradePrice, "lastTradePrice", color.green) plotchar(strategy.position_size > 0, char="-", size=size.tiny, location=location.bottom, color=color.green) plotchar(strategy.position_size < 0, char="-", size=size.tiny, location=location.bottom, color=color.red)