Estratégia de rompimento das bandas de Bollinger da CBMA

Autora:ChaoZhang, Data: 2023-11-06 16:25:01
Tags:

img

Resumo

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.

Estratégia lógica

  1. Calcular o CBMA: utilizar o EMA adaptativo para suavizar o CBMA que pode acompanhar as alterações de preços de forma eficaz.

  2. 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.

  3. 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.

  4. Usar cancelar ordens flash, apenas negociar uma direção de cada vez.

  5. Fixar tamanho de ordem fixo, pode ser ajustado com base no capital.

Análise das vantagens

  1. A CBMA tem uma boa flexibilidade e pode acompanhar os preços de forma eficaz.

  2. A EMA adaptativa otimiza a resposta da média móvel.

  3. As faixas superior/inferior dão sinais direcionais claros quando ocorre uma fuga.

  4. O modelo de seguimento de tendências evita trocas de serras.

  5. O tamanho fixo das ordens controla o risco de transacção única.

Análise de riscos

  1. Os parâmetros das Bandas de Bollinger precisam de otimização, muito largo ou muito estreito pode causar problemas.

  2. Os sinais de fuga podem ter falsas fugas.

  3. Preciso de parar a perda para controlar a perda.

  4. O tamanho fixo da ordem não pode ajustar a posição com base no mercado.

  5. Negocia apenas numa direcção, não pode lucrar mais.

Orientações de otimização

  1. Otimizar dinamicamente os parâmetros das Bandas de Bollinger para se adequar melhor ao mercado.

  2. Adicionar mais indicadores para filtragem, evitar falsas fugas.

  3. Adicione stop loss para bloquear os lucros.

  4. Negociação de hedge, ir tanto longo e curto para um maior lucro.

  5. Adicionar sistema de dimensionamento de posição.

Conclusã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")


Mais.