Estrategia de ruptura de bandas de Bollinger de la CBMA

El autor:¿ Qué pasa?, Fecha: 2023-11-06 16:25:01
Las etiquetas:

img

Resumen general

Esta estrategia utiliza CBMA como el principal indicador técnico combinado con Bollinger Bands para identificar las tendencias del mercado e implementar una estrategia de ruptura.

Estrategia lógica

  1. Calcular CBMA: utilizar EMA adaptativa para suavizar CBMA que puede realizar un seguimiento eficaz de los cambios de precios.

  2. Establecer los parámetros de las bandas de Bollinger: utilizar CBMA como banda media y establecer bandas superior/inferior utilizando el multiplicador de desviación estándar, que se puede ajustar en función del mercado.

  3. Negociación de ruptura: Vender cuando el precio se rompe por encima de la banda superior, comprar cuando el precio se rompe por debajo de la banda inferior, utilizando la tendencia siguiendo la estrategia de rotura.

  4. Utiliza órdenes de cancelación flash, sólo comerciar una dirección a la vez.

  5. Establecer un tamaño de pedido fijo, puede ajustarse en función del capital.

Análisis de ventajas

  1. La CBMA tiene una buena fluidez y puede rastrear los precios de manera efectiva.

  2. La EMA adaptativa optimiza la capacidad de respuesta de la media móvil.

  3. Las bandas superior/inferior dan señales direccionales claras cuando ocurre una ruptura.

  4. El modelo de seguimiento de tendencias evita los intercambios de sierra.

  5. El tamaño de la orden fija controla el riesgo de transacción única.

Análisis de riesgos

  1. Los parámetros de Bollinger Bands necesitan optimización, demasiado ancho o demasiado estrecho puede causar problemas.

  2. Las señales de fuga pueden tener falsas fugas.

  3. Necesitamos parar la pérdida para controlar la pérdida.

  4. El tamaño de la orden fija no puede ajustarse en función del mercado.

  5. Sólo comerciar en una dirección, no puede ganar más.

Direcciones de optimización

  1. Optimizar dinámicamente los parámetros de Bollinger Bands para adaptarse mejor al mercado.

  2. Añadir más indicadores para la filtración, evitar falsos brotes.

  3. Agregue el stop loss para bloquear las ganancias.

  4. El comercio de cobertura, ir tanto largo como corto para obtener mayores ganancias.

  5. Añadir el sistema de dimensionamiento de posición.

Conclusión

Esta estrategia es un sistema de seguimiento de tendencia que utiliza tecnología de promedio móvil adaptativa combinada con bandas de Bollinger para señales de ruptura claras. Tiene una lógica simple y un tamaño de orden fijo que controla el riesgo, teniendo cierto valor práctico. Pero persisten problemas como las rupturas falsas y la optimización de parámetros, que necesitan más indicadores para mejorar y mejorar el rendimiento comercial real mientras controlan el riesgo. En general, es un sistema de ruptura de inicio decente con mucho margen de mejora.


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

//@version=4
strategy(title="CBMA Bollinger Bands Strategy directed [ChuckBanger]", shorttitle="CBMA BB CB", 
   overlay=true )


length = input(title="Length", type=input.integer, defval=12, minval=1)
regular = input(title="Regular BB Or CBMA?", type=input.bool, defval=false)
src = input(title="Source", type=input.source, defval=close)
mult = input(title="Multipler", type=input.float, defval=2.3, minval=.001, maxval=50, step=.1)
emaLen = input(title="EMA Length", type=input.integer, defval=11, minval=1)
emaGL = input(title="EMA Gain Limit", type=input.integer, defval=50, minval=1)
highlight = input(title="Highlight On/Off", type=input.bool, defval=true)

direction = input(0, title = "Strategy Direction", type=input.integer, minval=-1, maxval=1)

strategy.risk.allow_entry_in(direction == 0 ? strategy.direction.all : (direction < 0 ? strategy.direction.short : strategy.direction.long))

//strategy.risk.max_drawdown(50, strategy.percent_of_equity)

calc_hma(src, length) =>
    hullma = wma(2*wma(src, length/2)-wma(src, length), round(sqrt(length)))
    hullma

calc_cbma(price, length, emaLength, emaGainLimit) =>
    alpha = 2 / (emaLength + 1)
    ema = ema(price, emaLength)
    int leastError = 1000000
    
    float ec = 0
    float bestGain = 0
    
    for i = emaGainLimit to emaGainLimit
        gain = i / 10
        ec := alpha * ( ema + gain * (price - nz(ec[1])) ) + (1 - alpha) * nz(ec[1])
        error = price - ec
        if (abs(error) < leastError)
            leastError = abs(error)
            bestGain = gain
    
    ec := alpha * ( ema + bestGain * (price - nz(ec[1])) ) + (1 - alpha) * nz(ec[1])
    hull = calc_hma(price, length)
    
    cbma = (ec + hull) / 2
    cbma

cbma = calc_cbma(src, length, emaLen, emaGL)
basis = regular ? sma(src, length) : cbma
dev = mult * stdev(src, length)
upper = basis + dev
lower = basis - dev
cbmaColor = fixnan(highlight and not regular ? cbma > high ? color.purple : cbma < low ? color.aqua : na : color.red)
plot(basis, color=cbmaColor)
p1 = plot(upper, color=color.blue)
p2 = plot(lower, color=color.blue)
fill(p1, p2)

if (crossover(src, lower))
    strategy.entry("CBMA_BBandLE", strategy.long, stop=lower, oca_name="BollingerBands", comment="CBMA_BBandLE")
else
    strategy.cancel(id="CBMA_BBandLE")

if (crossunder(src, upper))
    strategy.entry("CBMA_BBandSE", strategy.short, stop=upper, oca_name="BollingerBands", comment="CBMA_BBandSE")
else
    strategy.cancel(id="CBMA_BBandSE")


Más.