Estrategia de criptomonedas de bandas de Bollinger de varios plazos

El autor:¿ Qué pasa?, Fecha: 2024-02-27 14:13:39
Las etiquetas:

img

Resumen general

Esta estrategia aplica el indicador Bollinger Bands a lo largo de 1 minuto, 3 minutos, 5 minutos y 15 minutos para analizar los movimientos de precios de las criptomonedas, con el fin de identificar oportunidades de compra y venta. Utiliza los precios de 5 minutos de Bitcoin como un punto de referencia para el sentimiento general del mercado de criptomonedas. Cuando el precio de Bitcoin se rompe por encima de la banda superior, el mercado se considera alcista. Cuando el precio se rompe por debajo de la banda inferior, el mercado se considera bajista.

Estrategia lógica

La estrategia calcula las bandas de Bollinger simultáneamente en los marcos de tiempo de 1 minuto, 3 minutos, 5 minutos y 15 minutos. Las bandas de Bollinger consisten en un promedio móvil de n días (por defecto 20 días) y una serie de desviaciones estándar (por defecto 1.5x) por encima y por debajo de él.

Aprovechando esta característica de las bandas de Bollinger, la estrategia juzga los últimos desarrollos del mercado en diferentes horizontes de tiempo: 1 minuto, 3 minutos, 5 minutos y 15 minutos. Cuando hay una ruptura de banda superior o inferior en los marcos de tiempo de 3 minutos o 5 minutos, además de señales de confirmación en los marcos de tiempo de 1 minuto y 15 minutos, la estrategia determina si se activa una última señal de compra o venta. Además, la estrategia también se refiere a los precios de 5 minutos de Bitcoin para medir la tendencia general del mercado y el sentimiento (sesgo alcista / bajista) en todo el mercado de criptomonedas.

Después de entrar en operaciones, la estrategia también establece las condiciones de toma de ganancias y stop loss. Si el precio de entrada sube o cae un 25%, se activará el take profit. Si el precio se mueve más del 25% en contra de la dirección de entrada, se activará el stop loss.

Ventajas

  1. La estrategia incluye tanto vistas de mercado a corto como a mediano plazo: 1 minuto y 5 minutos para las últimas actualizaciones, 15 minutos para la tendencia a medio plazo, evitando ser engañados por las fluctuaciones temporales del mercado.

  2. La estrategia monitorea las rupturas de la banda media, banda superior y banda inferior, minimizando las oportunidades perdidas.

  3. Bitcoin sirve como punto de referencia y barómetro para las condiciones y sentimientos generales del mercado, mejorando la precisión de las decisiones.

  4. Los mecanismos de obtención de ganancias y detención de pérdidas controlan los riesgos de manera efectiva.

Los riesgos

  1. Las rupturas de banda de Bollinger tienen algunos atributos atrasados y pueden perder el mejor momento de entrada.

  2. La estrategia es vulnerable a los riesgos sistémicos en todo el mercado como los eventos de Black Swan de contraseñas.

  3. A pesar de la toma de ganancias y el stop loss, las pérdidas aún pueden exceder el margen de stop loss en eventos extremos.

  4. La configuración de parámetros inadecuados como el período de tiempo, el multiplicador de desviación estándar puede conducir a una mala calidad de la señal.

Soluciones correspondientes:

  1. Incorporar más indicadores para determinar el momento óptimo de entrada.

  2. Mejorar la evaluación de los riesgos sistémicos a nivel de mercado.

  3. Reducir el tamaño de la posición y el margen de stop loss para cada operación.

  4. Optimice la configuración de los parámetros a través del backtesting.

Oportunidades de mejora

  1. Agregue más marcos de tiempo como bandas de Bollinger de 30 o 60 minutos.

  2. Seleccionar los parámetros de Bollinger Bands más adecuados a las características de cada criptomoneda.

  3. Incorporar el volumen de operaciones para la verificación de resultados, ya que los volúmenes de operaciones validan la fiabilidad del movimiento de precios.

  4. Combine otros indicadores como el Stoch RSI, MACD para mejorar la precisión de la decisión.

  5. Compare los movimientos de precios y las correlaciones entre criptos y elija los que tengan más margen de maniobra.

  6. Optimizar los mecanismos de obtención de ganancias y detención de pérdidas mediante el análisis estadístico del rendimiento histórico para determinar los ajustes óptimos.

Conclusión

Esta es una estrategia de negociación de criptomonedas con bandas de Bollinger de varios plazos. Se centra en la evolución de los precios a través de horizontes de tiempo a corto y mediano plazo, aprovechando las bandas de Bollinger para medir el estado MULTI alcista / bajista del mercado. Mientras tanto, utiliza los niveles de precios de Bitcoin como puntos de referencia y referencias para ayudar a determinar la tendencia general en el mercado de criptomonedas más amplio.


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

//@version=5
strategy(shorttitle="Crypto BB", title="Multi-Interval Bollinger Band Crypto Strategy", overlay=true)
length = input.int(20, minval=1)
maType = input.string("SMA", "Basis MA Type", options = ["SMA", "EMA", "SMMA (RMA)", "WMA", "VWMA"])
src = input(close, title="Source")
mult = input.float(1.5, minval=0.001, maxval=50, title="StdDev")

interval1m = request.security(syminfo.tickerid, '1', src)
interval3m = request.security(syminfo.tickerid, '3', src)
interval5m = request.security(syminfo.tickerid, '5', src)
interval15m = request.security(syminfo.tickerid, '5', src)
btcinterval5m = request.security("BTC_USDT:swap", "5", src)
bitcoinSignal = 'flat'

var entryPrice = 0.000

ma(source, length, _type) =>
    switch _type
        "SMA" => ta.sma(source, length)
        "EMA" => ta.ema(source, length)
        "SMMA (RMA)" => ta.rma(source, length)
        "WMA" => ta.wma(source, length)
        "VWMA" => ta.vwma(source, length)

bitcoinBasis = ma(btcinterval5m, length, maType)
bitcoinDev = ta.stdev(btcinterval5m, length)
bitcoinUpper = bitcoinBasis + bitcoinDev
bitcoinLower = bitcoinBasis - bitcoinDev

basis1m = ma(interval1m, length, maType)
basis3m = ma(interval3m, length, maType)
basis5m = ma(interval5m, length, maType)
basis15m = ma(interval5m, length, maType)
dev1m = mult * ta.stdev(interval1m, length)
dev3m = mult * ta.stdev(interval3m, length)
dev5m = mult * ta.stdev(interval5m, length)
upper1m = basis1m + dev1m
lower1m = basis1m - dev1m
upper3m = basis3m + dev3m
lower3m = basis3m - dev3m
upper5m = basis5m + dev5m
lower5m = basis5m - dev5m
offset = input.int(0, "Offset", minval = -500, maxval = 500)
plot(basis3m, "Basis 3 minute", color=#2962FF, offset = offset)
p3upper = plot(upper3m, "Upper", color=#2962FF, offset = offset)
p3lower = plot(lower3m, "Lower", color=#2962FF, offset = offset)

//Exit protocols
if strategy.opentrades != 0 and strategy.opentrades.entry_id(0) == 'Buy'
    entryPrice := strategy.opentrades.entry_price(0)
    if ((interval1m - entryPrice)/entryPrice) * 30 > .25
        strategy.close('Buy', comment='Take Profit on Buy')
    if ((interval1m - entryPrice)/entryPrice) * 30 < -.25
        strategy.close('Buy', comment='Stop Loss on Buy')

if strategy.opentrades != 0 and strategy.opentrades.entry_id(0) == 'Sell'
    entryPrice := strategy.opentrades.entry_price(0)
    if ((entryPrice - interval1m)/entryPrice) * 30 > .25
        strategy.close('Sell', comment='Take Profit on Sell')
    if ((entryPrice - interval1m)/entryPrice) * 30 < -.25
        strategy.close('Sell', comment='Stop Loss on Sell')

//Bitcoin Analysis
if (btcinterval5m < bitcoinUpper and btcinterval5m[1] > bitcoinUpper[1] and btcinterval5m[2] < bitcoinUpper[2] and btcinterval5m[3] < bitcoinUpper[3])
    bitcoinSignal := 'Bear'
if (btcinterval5m > bitcoinUpper and btcinterval5m[1] < bitcoinUpper[1] and btcinterval5m[2] > bitcoinUpper[2] and btcinterval5m[3] > bitcoinUpper[3])
    bitcoinSignal := 'Bull'

//Short protocols
if (interval3m < basis3m and interval3m[1] > basis3m[1] and interval3m[2] < basis3m[2] and interval3m[3] < basis3m[3]) or 
 (interval5m < basis5m and interval5m[1] > basis5m[1] and interval5m[2] < basis5m[2] and interval5m[3] < basis5m[3]) 
  and strategy.opentrades.entry_id(0) != 'Sell'
   and src < basis1m and src < basis15m
    if strategy.opentrades.entry_id(0) == 'Buy'
        strategy.close('Buy', 'Basis Band Bearish Reversal')
    //strategy.order('Sell', strategy.short, comment = 'Basis band fractal rejection', stop = (upper1m + basis1m)/2)

if (interval3m < upper3m and interval3m[1] > upper3m[1] and interval3m[2] < upper3m[2] and interval3m[3] < upper3m[3]) or 
 (interval5m < upper5m and interval5m[1] > upper5m[1] and interval5m[2] < upper5m[2] and interval5m[3] < upper5m[3]) 
  and strategy.opentrades.entry_id(0) != 'Sell' and bitcoinSignal == 'Bear' and src < upper1m  and src < basis15m
    if strategy.opentrades.entry_id(0) == 'Buy'
        strategy.close('Buy', 'Bearish Trend Reversal')
    strategy.order('Sell', strategy.short, comment = 'Upper band fractal rejection', stop = (upper1m + basis1m)/2)

if (interval3m > basis3m and interval3m[1] < basis3m[1] and interval3m[2] > basis3m[2] and interval3m[3] > basis3m[3]) or 
 (interval5m > basis5m and interval5m[1] < basis5m[1] and interval5m[2] > basis5m[2] and interval5m[3] > basis5m[3]) and strategy.opentrades.entry_id(0) != 'Buy' 
  and src > basis1m  and src > basis15m
    if strategy.opentrades.entry_id(0) == 'Sell'
        strategy.close('Sell', 'Basis Band Bullish Reversal')
    //strategy.order('Buy', strategy.long, comment = 'Basis band fractal rejection', stop = (lower1m + basis1m)/2)

if (interval3m > lower3m and interval3m[1] < lower3m[1] and interval3m[2] > lower3m[2] and interval3m[3] > lower3m[3]) or 
 (interval5m > lower5m and interval5m[1] < lower5m[1] and interval5m[2] > lower5m[2] and interval5m[3] > basis5m[3]) and strategy.opentrades.entry_id(0) != 'Buy' 
  and src > lower1m  and src > basis15m and bitcoinSignal == 'Bull' 
    if strategy.opentrades.entry_id(0) == 'Sell'
        strategy.close('Sell', 'Bullish Trend Reversal')
    strategy.order('Buy', strategy.long, comment = 'Lower band fractal rejection', stop = (lower1m + basis1m)/2)

Más.