Estratégia de negociação de bandas de Bollinger para rompimento de momentum


Data de criação: 2024-02-05 10:53:46 última modificação: 2024-02-05 10:53:46
cópia: 0 Cliques: 699
1
focar em
1617
Seguidores

Estratégia de negociação de bandas de Bollinger para rompimento de momentum

Visão geral

A estratégia combina o indicador de Brin e o indicador de volume de transação para identificar oportunidades de forte ruptura do Brin em um ambiente de alto volume de transação e executar operações de compra. Ao mesmo tempo, combina o indicador de média móvel para determinar a direção da tendência e reduzir o risco de posições mortas.

Princípio da estratégia

  1. O indicador de correlação é usado para determinar se o preço ultrapassou a correlação de correlação.
  2. Utilize o indicador de volume de transações para determinar se o volume de transações atual é significativamente maior do que o volume médio de transações no período anterior.
  3. A operação de compra é realizada quando o volume de negociação está ativo e o preço quebra o Brin e entra em rota.
  4. Usar indicadores de médias móveis para avaliar tendências de curto e médio prazo e parar a posição em tempo hábil quando a tendência é negativa.

A estratégia considera três fatores principais: preço, volume e tendência. Quando o preço quebra o binário e entra na zona de compra, um grande fluxo de capital leva a uma explosão de volume de negociação, indicando um forte apoio e energia de movimento, quando a posição é aberta.

Vantagens estratégicas

  1. Os sinais de negociação são precisos, evitando falsas rupturas. Combinado com o indicador de volume de negociação, compre apenas em situações de força real, reduzindo o risco de posição.

  2. Com a mediana móvel, é possível determinar a direção da tendência, reduzir a perda de estoque e reduzir a perda de estoque.

  3. Implementa uma estratégia quantitativa de tomada de decisão com base em vários indicadores, com parâmetros que podem ser ajustados de forma flexível para diferentes variedades e períodos.

  4. A estrutura do código é clara, aumentando a legibilidade da estratégia. Os módulos organizam o cálculo de indicadores, sinais de negociação, lógica de abertura de estoque, etc., para facilitar a manutenção posterior.

Risco estratégico

  1. A faixa de Brin, como um indicador de amplitude de flutuação, pode falhar em situações extremas. Se houver uma flutuação anormal, o sinal de compra será perdido ou um falso sinal será produzido.

  2. Quando o volume de negociação é insuficiente, a estratégia não pode lucrar. Se o volume de negociação do mercado como um todo é insuficiente, é difícil lucrar, mesmo que seja gerado um sinal de compra.

  3. As médias móveis também podem falhar como indicadores de tendências, não garantindo a parada de prejuízos.

  4. A configuração inadequada dos parâmetros também pode afetar o lucro da estratégia. Por exemplo, a janela de tempo de negociação é muito curta, a reversão de tendência é perdida, etc.

Direção de otimização da estratégia

  1. Pode-se considerar a inclusão de mais indicadores técnicos para julgar tendências, apoiar pontos de resistência e aumentar o efeito de parada de perdas, como a forma da linha K, indicadores de canal, pontos de suporte críticos, etc.

  2. Aumentar a probabilidade de um modelo de aprendizagem de máquina determinar uma verdadeira ruptura e reduzir a taxa de falso sinal. Modelos de aprendizagem profunda, como o LSTM.

  3. Optimizar as estratégias de gestão de fundos, tais como ajustes dinâmicos de posições, rastreamento de linhas de stop loss, etc.

  4. Testar mais variedades e parâmetros de ciclo de tempo. Ajustar os parâmetros da faixa de Bryn, os parâmetros de volume de transação, etc., para otimizar a estratégia de adaptação ao mercado.

Resumir

A estratégia integra o indicador de correia e o indicador de volume de negociação para identificar o momento certo para comprar em um cenário de forte. Ao mesmo tempo, o indicador de média móvel é usado para avaliar a tendência e parar os prejuízos. Comparado ao indicador técnico único, tem maior precisão e capacidade de parar os prejuízos.

Código-fonte da estratégia
/*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")