Estratégia de rompimento de alta com base em Bandas de Bollinger e VWAP


Data de criação: 2024-02-06 14:36:26 última modificação: 2024-02-06 14:36:26
cópia: 1 Cliques: 885
1
focar em
1617
Seguidores

Estratégia de rompimento de alta com base em Bandas de Bollinger e VWAP

Visão geral

Esta estratégia usa o indicador da faixa de Brin para rastrear o VWAP e adota uma estratégia de múltiplos cabeças quando o VWAP se move para cima e quebra a faixa de Brin, sendo julgado como uma quebra de múltiplos cabeças; e quando o VWAP se move para baixo e quebra a faixa de Brin, é julgado como uma confirmação de cabeça vazia, e a posição de equilíbrio sai do campo. Ao mesmo tempo, a estratégia também introduz o Pivot Point, o principal ponto de apoio, como um critério auxiliar para o sinal de entrada, para filtrar algumas falsas quebras.

Princípio da estratégia

  1. Calcular o valor do VWAP.
  2. Calcule o VWAP da faixa de Brin, que inclui a faixa superior, a faixa média e a faixa inferior
  3. Para avaliar se o VWAP irá romper o meio do trajeto da faixa de Bryn para cima, e se for e o preço estiver acima do Pivot Point do suporte principal, use uma entrada de estratégia multi-cabeça.
  4. O Stop Loss está definido em 5%.
  5. Se o VWAP derrubar a linha de descida de Brin para baixo, a cabeça-vazia é confirmada e o equilíbrio é desligado; se o stop-loss for acionado, também é desligado.

Análise de vantagens

  1. O VWAP possui uma forte capacidade de rastreamento de tendências, combinado com a inicialização de um Brinks que pode determinar com precisão as tendências.
  2. A adição do Pivot Point como condição auxiliar pode filtrar muitas brechas falsas e evitar perdas desnecessárias.
  3. Adotar estratégias de saída parcial para bloquear parte dos lucros e controlar os riscos.
  4. A retrospectiva mostrou que a estratégia teve um excelente desempenho em um mercado de ações com alta estabilidade.

Análise de Riscos

  1. Em situações de turbulência, a falha de ruptura pode causar prejuízos.
  2. O Pivot Point não pode evitar completamente a falsa ruptura, mas precisa ser combinado com mais indicadores de filtragem.
  3. A saída de alguns jogadores aumentou a frequência das operações e também o custo das transações.
  4. O resultado não é o ideal em um mercado de ações, e é preciso ter um bom controle de riscos.

Direção de otimização

  1. Pode ser combinado com MACD, KDJ e outros indicadores para auxiliar na filtragem de sinais de entrada e saída.
  2. A combinação de parâmetros ótima pode ser encontrada através da optimização do comprimento e do desvio padrão da faixa de Bryn.
  3. Algoritmos de aprendizagem de máquina podem ser introduzidos para otimizar dinamicamente os parâmetros da faixa de Bryn.
  4. Pode-se testar diferentes níveis de perda para encontrar o ponto de perda ideal.
  5. Pode-se adicionar um mecanismo de adaptação de saída, ajustando o lucro-alvo de acordo com a volatilidade do mercado.

Resumir

Esta estratégia é, em geral, um sistema de ruptura estável. Sua forma de operação padronizada, o espaço de otimização de parâmetros é grande e adequado para a transação quantitativa.

Código-fonte da estratégia
/*backtest
start: 2024-01-06 00:00:00
end: 2024-02-05 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/
// © ediks123

//@version=4
strategy("BBofVWAP with entry at Pivot Point", overlay=false, pyramiding=1,   default_qty_type=strategy.percent_of_equity,  default_qty_value=20, initial_capital=10000, currency=currency.USD)  //default_qty_value=10, default_qty_type=strategy.fixed,

// Function outputs 1 when it's the first bar of the D/W/M/Y
is_newbar(res) =>
    ch = 0
    if(res == 'Y')
        t  = year(time('D'))
        ch := change(t) != 0 ? 1 : 0
    else
        t = time(res)
        ch := change(t) != 0 ? 1 : 0
    ch


//variables BEGIN
//smaLength=input(200,title="Slow MA Length")

bbLength=input(50,title="BB Length")  
//bbsrc = input(close, title="BB Source")
mult = input(2.0, minval=0.001, maxval=50, title="StdDev")
offset = input(0, "Offset", type = input.integer, minval = -500, maxval = 500)

pp_period = input(title = "Pivot Period", type=input.string, defval="Week", options = ['Day', 'Week'])

pp_res = pp_period == 'Day' ? 'D' : pp_period == 'Week' ? 'W' : pp_period == 'Month' ? 'M' : 'Y' 

riskCapital = input(title="Risk % of capital", defval=10, minval=1)
stopLoss=input(5,title="Stop Loss",minval=1)



//sma200=sma(close,smaLength)
//plot(sma200, title="SMA 200", color=color.orange)

myVwap=vwap(hlc3)

//bollinger calculation
basis = sma(myVwap, bbLength)
dev = mult * stdev(myVwap, bbLength)
upperBand = basis + dev
lowerBand = basis - dev

//plot bb
plot(basis, "Basis", color=color.teal, style=plot.style_circles , offset = offset)
p1 = plot(upperBand, "Upper", color=color.teal, offset = offset)
p2 = plot(lowerBand, "Lower", color=color.teal, offset = offset)
fill(p1, p2, title = "Background", color=color.teal, transp=95)

plot(myVwap, title="VWAP", color=color.purple)


//pivot points 


// Calc High
high_cur = 0.0
high_cur := is_newbar(pp_res) ? high : max(high_cur[1], high)

phigh = 0.0
phigh := is_newbar(pp_res) ? high_cur[1] : phigh[1]

// Calc Low
low_cur = 0.0
low_cur := is_newbar(pp_res) ? low : min(low_cur[1], low)

plow = 0.0
plow := is_newbar(pp_res) ? low_cur[1] : plow[1]

// Calc Close
pclose = 0.0
pclose := is_newbar(pp_res) ? close[1] : pclose[1]


vPP = (phigh + plow + pclose) / 3

//pivot points


//Entry--
//Echeck how many units can be purchased based on risk manage ment and stop loss
qty1 = (strategy.equity  * riskCapital / 100 ) /  (close*stopLoss/100)  

//check if cash is sufficient  to buy qty1  , if capital not available use the available capital only
qty1:= (qty1 * close >= strategy.equity ) ? (strategy.equity / close) : qty1


strategy.entry(id="BB_VWAP_PP",long=true, qty=qty1, when=   crossover(myVwap,basis)  and close>=vPP  )

bgcolor(strategy.position_size>=1?color.blue:na, transp=75)
barcolor(strategy.position_size>=1?color.green:na)

stopLossVal=  strategy.position_size>=1 ?  close * (1 - (stopLoss*0.01) ) : 0.00

//partial exit
//strategy.close(id="BBofVwap", qty=strategy.position_size/3, when=crossunder(myVwap,upperBand) and strategy.position_size>=1 )  //and close>strategy.position_avg_price)



//exit on lowerband or stoploss 
strategy.close(id="BB_VWAP_PP", comment="P" , qty=strategy.position_size/3, when= crossunder(myVwap,upperBand) and strategy.position_size>=1 and close>strategy.position_avg_price)  //
strategy.close(id="BB_VWAP_PP", comment="Exit All", when=crossunder(myVwap,lowerBand) and strategy.position_size>=1 )
//strategy.close(id="BBofVwapWithFibPivot", comment="Exit All", when=crossunder(close,vPP) and strategy.position_size>=1 )

strategy.close(id="BB_VWAP_PP", comment="Stop Loss Exit", when=crossunder(close,stopLossVal) and strategy.position_size>=1 )