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.
Calcular CBMA: utilizar EMA adaptativa para suavizar CBMA que puede realizar un seguimiento eficaz de los cambios de precios.
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.
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.
Utiliza órdenes de cancelación flash, sólo comerciar una dirección a la vez.
Establecer un tamaño de pedido fijo, puede ajustarse en función del capital.
La CBMA tiene una buena fluidez y puede rastrear los precios de manera efectiva.
La EMA adaptativa optimiza la capacidad de respuesta de la media móvil.
Las bandas superior/inferior dan señales direccionales claras cuando ocurre una ruptura.
El modelo de seguimiento de tendencias evita los intercambios de sierra.
El tamaño de la orden fija controla el riesgo de transacción única.
Los parámetros de Bollinger Bands necesitan optimización, demasiado ancho o demasiado estrecho puede causar problemas.
Las señales de fuga pueden tener falsas fugas.
Necesitamos parar la pérdida para controlar la pérdida.
El tamaño de la orden fija no puede ajustarse en función del mercado.
Sólo comerciar en una dirección, no puede ganar más.
Optimizar dinámicamente los parámetros de Bollinger Bands para adaptarse mejor al mercado.
Añadir más indicadores para la filtración, evitar falsos brotes.
Agregue el stop loss para bloquear las ganancias.
El comercio de cobertura, ir tanto largo como corto para obtener mayores ganancias.
Añadir el sistema de dimensionamiento de posició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")