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

Estratégia de negociação de breakout de Bollinger Band Momentum

Autora:ChaoZhang, Data: 2024-02-05 10:53:46
Tags:

img

Resumo

Esta estratégia combina o indicador de Bollinger Band e os indicadores de volume para identificar fortes oportunidades de ruptura de impulso acima da banda superior de Bollinger quando o volume de negociação é alto e entra em posições longas.

Estratégia lógica

  1. Use o indicador Bollinger Band para determinar se o preço ultrapassa a faixa superior.
  2. Usar indicadores de volume de negociação para determinar se o volume atual é significativamente superior à média do período anterior.
  3. Entrar em posição longa quando o volume de negociação for elevado e o preço ultrapassar a faixa superior de Bollinger.
  4. Usar indicadores de média móvel para determinar a tendência a curto e médio prazo para cortar perdas no tempo.

Esta estratégia considera principalmente três fatores: nível de preço, impulso e tendência. Quando o preço rompe a banda superior de Bollinger na zona de compra, o aumento no volume de negociação indica um forte impulso e entrada de capital. Este é o momento certo para entrar em posição longa. Em seguida, usa médias móveis para determinar a tendência do mercado para evitar manter posições mortas. Combinando a ação de preços, o impulso e o controle de riscos, visa capturar lucros de tendências fortes.

Vantagens

  1. Combinando o filtro de volume, ele só compra em momento real forte, reduzindo o risco.

  2. Capaz de reduzir as perdas no tempo através da determinação da tendência da média móvel, reduzindo a perda de detenção.

  3. Implementar uma estratégia quantitativa que combine múltiplos indicadores para a tomada de decisões. Parâmetros flexíveis ajustados para diferentes produtos e prazos.

  4. Estruturas de código claras, fáceis de ler e de manter, conceção modular do cálculo dos indicadores, geração de sinal e gestão da posição.

Riscos

  1. As bandas de Bollinger podem falhar durante oscilações extremas de preços, faltando sinais ou gerando sinais falsos.

  2. Os sinais de compra podem não ser lucrativos sem volume de negociação suficiente.

  3. A determinação da tendência das médias móveis também pode falhar, não sendo capaz de garantir plenamente uma parada de perda eficaz.

  4. O ajuste incorreto dos parâmetros também afeta a rentabilidade da estratégia.

Orientações de otimização

  1. Adicionar mais indicadores técnicos para uma melhor análise da tendência e do suporte/resistência, melhorando o stop loss, por exemplo, padrões de velas, canais, níveis de suporte chave.

  2. Adicionar modelos de aprendizagem de máquina para julgar possibilidades reais de fuga, reduzindo sinais falsos. por exemplo, modelos de aprendizagem profunda LSTM.

  3. Otimizar estratégias de gestão de capital como dimensionamento dinâmico de posições, stop loss para reduzir o impacto de perdas de negociação única.

  4. Teste mais produtos e prazos, ajuste parâmetros como Bandas de Bollinger, janela de volume para melhorar a robustez da estratégia.

Conclusão

Esta estratégia integra a banda de Bollinger e os indicadores de volume de negociação para identificar fortes oportunidades de compra de momentum, com médias móveis garantindo uma perda de parada eficaz. Em comparação com as estratégias de indicador único, ela tem maior precisão e capacidade de controle de risco. Com design modular, filtros de tendência e mecanismos de perda de parada, ela forma uma estratégia de negociação de ruptura de momentum fácil de otimizar.


/*backtest
start: 2024-01-05 00:00:00
end: 2024-02-04 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © KAIST291

//@version=4
initial_capital=1000
strategy("prototype", overlay=true)
length1=input(1)
length3=input(3)
length7=input(7)
length9=input(9)
length14=input(14)
length20=input(20)
length60=input(60)
length120=input(120)
ma1= sma(close,length1)
ma3= sma(close,length3)
ma7= sma(close,length7)
ma9= sma(close,length9)
ma14=sma(close,length14)
ma20=sma(close,length20)
ma60=sma(close,length60)
ma120=sma(close,length120)
rsi=rsi(close,14)
// BUYING VOLUME AND SELLING VOLUME //
BV = iff( (high==low), 0, volume*(close-low)/(high-low))
SV = iff( (high==low), 0, volume*(high-close)/(high-low))
vol = iff(volume > 0, volume, 1)
dailyLength = input(title = "Daily MA length", type = input.integer, defval = 50, minval = 1, maxval = 100)
weeklyLength = input(title = "Weekly MA length", type = input.integer, defval = 10, minval = 1, maxval = 100)
//-----------------------------------------------------------
Davgvol = sma(volume, dailyLength)
Wavgvol = sma(volume, weeklyLength)
//-----------------------------------------------------------
length = input(20, minval=1)
src = input(close, title="Source")
mult = input(2.0, minval=0.001, maxval=50, title="StdDev")
mult2= input(1.5, minval=0.001, maxval=50, title="exp")
mult3= input(1.0, minval=0.001, maxval=50, title="exp1")
mult4= input(2.5, minval=0.001, maxval=50, title="exp2")
basis = sma(src, length)
dev = mult * stdev(src, length)
upper = basis + dev
lower = basis - dev
dev2= mult2 * stdev(src, length)
Supper= basis + dev2
Slower= basis - dev2
dev3= mult3 * stdev(src, length)
upper1= basis + dev3
lower1= basis - dev3
dev4= mult4 * stdev(src, length)
upper2=basis + dev4
lower2=basis - dev4
offset = input(0, "Offset", type = input.integer, minval = -500, maxval = 500)
plot(basis, "Basis", color=#FF6D00, offset = offset)
p1 = plot(upper, "Upper", color=#2962FF, offset = offset)
p2 = plot(lower, "Lower", color=#2962FF, offset = offset)
fill(p1, p2, title = "Background", color=color.rgb(33, 150, 243, 95))
//----------------------------------------------------
exit=(close-strategy.position_avg_price / strategy.position_avg_price*100)
bull=( BV>SV and BV>Davgvol)
bull2=(BV>SV and BV>Davgvol)
bux =(close>Supper and close>Slower and volume<Davgvol)
bear=(SV>BV and SV>Davgvol)
con=(BV>Wavgvol and rsi>80)
imInATrade = strategy.position_size != 0
highestPriceAfterEntry = valuewhen(imInATrade, high, 0)
// STRATEGY LONG //
if (bull and close>upper1 and close>Supper and high>upper and rsi<80)
    strategy.entry("Long",strategy.long)

if (strategy.position_avg_price*1.02<close)
    strategy.close("Long")
else if (low<ma9 and strategy.position_avg_price<close)
    strategy.close("Long")
else if (ma20>close and strategy.position_avg_price<close )
    strategy.close("Long")
else if (rsi>80 and strategy.position_avg_price<close)
    strategy.close("Long")
else if (strategy.openprofit < strategy.position_avg_price*0.9-close)
    strategy.close("Long")
else if (high<upper and strategy.position_avg_price<close)
    strategy.close("Long")
//////////////////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////////////////
strategy.entry("Short",strategy.short,when=low<ma20 and low<lower1 and close<Slower and crossunder(ma60,ma120))

if (close<strategy.position_avg_price*0.98)
    strategy.close("Short")

else if (rsi<20)
    strategy.close("Short")



Mais.