O recurso está a ser carregado... Carregamento...

Bollinger estratégia de ruptura com piramidagem

Autora:ChaoZhang, Data: 2023-11-23 14:01:57
Tags:

img

Resumo

Esta estratégia entra em posições longas ou curtas com base em breakouts de Bollinger Bands. Ela vai longa quando o preço quebra abaixo da faixa inferior e vai curta quando o preço quebra acima da faixa superior.

Estratégia lógica

A estratégia usa 3 linhas de Bollinger Bands - média, superior e inferior. A linha do meio é a média móvel de n dias. A linha superior é a linha do meio + k * desvio padrão de n dias. A linha inferior é a linha do meio - k * desvio padrão de n dias. Normalmente n é 20 e k é 2.

Quando o preço rompe acima da linha superior, ele sinaliza uma tendência de queda e fica curto.

Após a tomada de posições, a estratégia mantém a pirâmide, o que significa adicionar mais posições na mesma direção.

O valor da perda de todas as posições também é atualizado em tempo real com base na diferença entre o preço médio de detenção atual e o preço da faixa.

Análise das vantagens

As vantagens desta estratégia incluem:

  1. Utilize Bandas de Bollinger para identificar com precisão as rupturas e as mudanças de tendência.
  2. Entrar posições em cruz de ouro e cruz morta sistematicamente.
  3. Ganha mais lucro através da pirâmide.
  4. Atualização de stop loss em tempo real para evitar ser nocauteado.

Análise de riscos

Há também alguns riscos desta estratégia:

  1. As bandas de Bollinger são sensíveis à volatilidade do mercado e podem incorrer em falhas.
  2. A pirâmide aumenta a exposição e aumenta a perda potencial.
  3. A perda de parada não é garantida e ainda tem a probabilidade de ser interrompida.

Alguns métodos para combater os riscos:

  1. Otimizar os parâmetros das bandas de Bollinger para diferentes ciclos.
  2. Ajuste a escala e a frequência da pirâmide.
  3. Adicione a linha do meio como uma linha de stop loss adicional.

Orientações de otimização

A estratégia pode ser otimizada a partir dos seguintes aspectos:

  1. Otimizar os parâmetros das bandas de Bollinger para adaptar mais regimes de mercado.
  2. Melhorar a lógica da pirâmide para equilibrar risco-recompensa.
  3. Adicione mais linhas de stop loss como a linha do meio.
  4. Desenvolver um mecanismo de captação de lucros para bloquear os lucros de forma proativa.
  5. Combinar outros indicadores para filtrar as entradas.
  6. Melhorar a gestão de riscos para controlar as perdas por transação.

Conclusão

Em conclusão, esta é uma estratégia típica de tendência seguinte. Ele cavalga o impulso quando a tendência surge e faz lucro em conformidade. Enquanto isso, também contém riscos inerentes. Mais otimizações são necessárias para adaptar mais condições de mercado e enfrentar o risco do furo.


/*backtest
start: 2022-11-16 00:00:00
end: 2023-11-22 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5

strategy(title='Bollinger Band strategy with split, limit, stop', shorttitle='bb strategy', overlay=true,commission_type = strategy.commission.percent, commission_value = 0.01, default_qty_type = strategy.percent_of_equity, default_qty_value = 10, pyramiding = 4)



//Summary: Going Long or Short when Entering after Breaking the Bollinger Bands\
//At this time, the stop-loss, profit-taking price, and pyramiding standard\
// are determined from the difference between the position average price and the band price.

//After entering the position, if the price crosses the mid-band line, the stop loss is adjusted to the mid-band line.



//each trade, entry position size = 10% of total cash
//max pyramiding is 4
//commission = 0.01%





in_period = true


bb_length = input.int(20)
bb_mult = input.int(2)

[middle, upper, lower] = ta.bb(close,bb_length, bb_mult)
plot(middle, color=color.aqua)
plot(upper, color=color.orange)
plot(lower, color=color.orange)
long_cond = ta.crossover(close,lower)
short_cond = ta.crossunder(close,upper)

var saved_ph = 0.0
if strategy.opentrades>0 and strategy.opentrades[1]==0 and strategy.position_size > 0
    saved_ph := upper[1]
var saved_pl = 0.0
if strategy.opentrades>0 and strategy.opentrades[1]==0 and strategy.position_size < 0
    saved_pl := lower[1]

avg = strategy.position_avg_price

long_diff = saved_ph-avg
short_diff = saved_pl-avg

long_stoploss = avg - 1*long_diff
short_stoploss = avg - 1*short_diff

long_avgdown = avg - 0.5*long_diff
short_avgup = avg - 0.5*short_diff

long_profit_price = avg + 0.5*long_diff
short_profit_price = avg + 0.5*short_diff

var label _label = na
if in_period
    if long_cond and strategy.opentrades==0
        strategy.entry("Long",strategy.long)
    if long_cond and strategy.opentrades >0 and (close[1]<long_avgdown or close[2]<long_avgdown)
        strategy.entry("Long",strategy.long)

    if short_cond and strategy.opentrades==0
        strategy.entry("Short", strategy.short)
    if short_cond and strategy.opentrades>0 and (close[1]>short_avgup or close[2]>short_avgup)
        strategy.entry("Short",strategy.short)

plot(avg, style=plot.style_linebr)


plot(strategy.position_size > 0? long_profit_price: na,color=color.green, style=plot.style_linebr)
plot(strategy.position_size > 0? long_avgdown: na,color=color.yellow, style=plot.style_linebr)
plot(strategy.position_size > 0? long_stoploss: na,color=color.red, style=plot.style_linebr)

plot(strategy.position_size < 0? short_profit_price: na,color=color.green, style=plot.style_linebr)
plot(strategy.position_size < 0? short_avgup: na,color=color.yellow, style=plot.style_linebr)
plot(strategy.position_size < 0? short_stoploss: na,color=color.red, style=plot.style_linebr)

if strategy.position_size > 0
    if ta.crossover(close, middle)
        strategy.exit("Long Exit", "Long", limit=long_profit_price, stop=middle)
    else
        strategy.exit("Long Exit", "Long", limit=long_profit_price, stop=long_stoploss)
if strategy.position_size < 0
    if ta.crossunder(close, middle)
        strategy.exit("Short Exit", "Short", limit=short_profit_price, stop=middle)
    else
        strategy.exit("Short Exit", "Short", limit=short_profit_price, stop=short_stoploss)

Mais.