Esta estratégia usa o CBMA como o principal indicador técnico combinado com Bandas de Bollinger para identificar tendências de mercado e implementar uma estratégia de breakout.
Calcular o CBMA: utilizar o EMA adaptativo para suavizar o CBMA que pode acompanhar as alterações de preços de forma eficaz.
Defina os parâmetros das bandas de Bollinger: use a CBMA como banda média e defina as bandas superior/inferior utilizando o multiplicador de desvio padrão, que pode ser ajustado com base no mercado.
Negociação de ruptura: Venda quando o preço quebra acima da faixa superior, compre quando o preço quebra abaixo da faixa inferior, usando a estratégia de tendência.
Usar cancelar ordens flash, apenas negociar uma direção de cada vez.
Fixar tamanho de ordem fixo, pode ser ajustado com base no capital.
A CBMA tem uma boa flexibilidade e pode acompanhar os preços de forma eficaz.
A EMA adaptativa otimiza a resposta da média móvel.
As faixas superior/inferior dão sinais direcionais claros quando ocorre uma fuga.
O modelo de seguimento de tendências evita trocas de serras.
O tamanho fixo das ordens controla o risco de transacção única.
Os parâmetros das Bandas de Bollinger precisam de otimização, muito largo ou muito estreito pode causar problemas.
Os sinais de fuga podem ter falsas fugas.
Preciso de parar a perda para controlar a perda.
O tamanho fixo da ordem não pode ajustar a posição com base no mercado.
Negocia apenas numa direcção, não pode lucrar mais.
Otimizar dinamicamente os parâmetros das Bandas de Bollinger para se adequar melhor ao mercado.
Adicionar mais indicadores para filtragem, evitar falsas fugas.
Adicione stop loss para bloquear os lucros.
Negociação de hedge, ir tanto longo e curto para um maior lucro.
Adicionar sistema de dimensionamento de posição.
Esta estratégia é um sistema de seguimento de tendência que usa a tecnologia de média móvel adaptativa combinada com Bandas de Bollinger para sinais de ruptura claros. Tem uma lógica simples e controle de risco de tamanho de ordem fixo, tendo algum valor prático. Mas problemas como falhas de ruptura e otimização de parâmetros permanecem, que precisam de mais indicadores para melhorar e melhorar o desempenho comercial real, enquanto controlam o risco.
/*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")