Estratégia de negociação quantitativa baseada em Bandas de Bollinger e VWAP


Data de criação: 2024-01-04 15:59:46 última modificação: 2024-01-04 15:59:46
cópia: 0 Cliques: 1122
1
focar em
1621
Seguidores

Estratégia de negociação quantitativa baseada em Bandas de Bollinger e VWAP

Visão geral

A estratégia combina dois indicadores, a faixa de Brin ((BB) e o valor médio típico do preço (VWAP) para tomar decisões de compra e venda. Pode detectar anomalias de preços de curto prazo e, em seguida, negociar, adequado para negociações de curto prazo.

Princípio da estratégia

A estratégia consiste em comprar e vender de acordo com as seguintes regras:

  1. A linha EMA rápida é maior do que a linha EMA lenta como um pré-requisito para julgar a tendência

  2. Quando o preço de fechamento é superior ao VWAP, julgue que o preço subiu e compre

  3. Se uma das 10 linhas K anteriores tiver um preço de fechamento abaixo do preço de fechamento de Brin, será considerada uma compra anormal.

  4. Quando o preço de fechamento é superior ao Brin, o preço é invertido e vendido

Concretamente, a estratégia julga primeiro a EMA de 50 dias acima da EMA de 200 dias, usando a EMA lenta para julgar a tendência geral. Em seguida, em combinação com o VWAP, julga se o preço está em uma tendência ascendente no curto prazo.

A regra de saída é mais simples: quando o preço é mais alto do que o Brin, o preço é considerado como tendo ocorrido uma reversão e é retirado.

Análise de vantagens

A estratégia combina várias anomalias de preços de determinação de indicadores para aumentar a eficácia do sinal de entrada. Usar a EMA para determinar a tendência maior evita a operação de contra-balanço. Combinado com o VWAP, pode capturar oportunidades de alta de preços de curto prazo.

Análise de Riscos

  1. EMA julga que grande tendência não pode levar a operação de grande mercado contracorrente
  2. O indicador VWAP é melhor usado para efeitos de dados horários ou diários, com desconto se usado para efeitos de dados de linha diária
  3. Parâmetros de banda Brin mal definidos, restrição de trilhos para cima e para baixo muito larga ou muito estreita pode causar falha de sinal

Para esses riscos, pode-se ajustar adequadamente o parâmetro do ciclo EMA ou tentar outros indicadores de grande tendência. O parâmetro VWAP pode ser aplicado a dados intradiários ou ajustado para outros indicadores de linha curta. Ajustar o parâmetro da faixa de Bryn para encontrar a melhor amplitude.

Direção de otimização

  1. Tente usar outros indicadores para avaliar grandes tendências, como o MACD
  2. Optimizar os parâmetros da banda EMA e Brin para encontrar a melhor configuração
  3. Aumentar o mecanismo de suspensão de perdas
  4. Combinação com outros indicadores para filtrar falsos sinais
  5. Testar diferentes variedades e dados de ciclo

Resumir

A estratégia combina os dois indicadores Brin Belt e VWAP para julgar as anomalias de preços de curto prazo como o momento de entrada. Usar a EMA para julgar a tendência maior para evitar operações adversas.

Código-fonte da estratégia
/*backtest
start: 2023-12-04 00:00:00
end: 2024-01-03 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/
// © mohanee

//@version=4
strategy(title="VWAP and BB strategy [EEMANI]", overlay=true,pyramiding=2, default_qty_value=3, default_qty_type=strategy.fixed,    initial_capital=10000, currency=currency.USD)
//This strategy combines VWAP and BB indicators
//BUY RULE
//1. EMA50 > EMA 200
//2. if current close > vwap session  value 
//3. check if  price dipped BB lower band for any of last 10 candles
//EXIT RULE
//1. price closes above BB upper band   
//STOP LOSS EXIT
//1. As configured --- default is set to 5%

is_price_dipped_bb(pds,source1) =>
    t_bbDipped=false
    for i=1 to pds
        t_bbDipped:=  (t_bbDipped   or  close[i]<source1) ? true : false
        if t_bbDipped==true
            break
        else
            continue
            
    t_bbDipped
    
// variables  BEGIN
shortEMA = input(50, title="fast EMA", minval=1)
longEMA = input(200, title="slow EMA", minval=1)

//BB

smaLength = input(20, title="BB SMA Length", minval=1)
bbsrc = input(close, title="BB Source")



//addOnDivergence = input(true,title="Add to existing on Divergence")
//exitOption = input(title="exit on RSI or BB", type=input.string, options=["RSI", "BB"],      defval="BB")

//bbSource = input(title="BB  source", type=input.string, options=["close", "vwap"],      defval="close")
     
//vwap_res = input(title="VWAP Resolution", type=input.resolution, defval="session")
stopLoss = input(title="Stop Loss%", defval=5, minval=1)

//variables  END




longEMAval= ema(close, longEMA)
shortEMAval= ema(close, shortEMA)


vwapVal=vwap(close)



// Drawings

//plot emas
plot(longEMAval, color = color.orange, linewidth = 1, transp=0)
plot(shortEMAval, color = color.green, linewidth = 1, transp=0)


//bollinger calculation 
mult = input(2.0, minval=0.001, maxval=50, title="StdDev")
basis = sma(bbsrc, smaLength)
dev = mult * stdev(bbsrc, smaLength)
upperBand = basis + dev
lowerBand = basis - dev
offset = input(0, "Offset", type = input.integer, minval = -500, maxval = 500)
//bollinger calculation 

//plot bb
//plot(basis, "Basis", color=#872323, 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=#198787, transp=95)


plot(vwapVal, color = color.purple, linewidth = 1, transp=0)


// Colour background

barcolor(shortEMAval>longEMAval and close<=lowerBand ? color.yellow: na)
  

//longCondition=  shortEMAval > longEMAval and  close>open and  close>vwapVal
longCondition= shortEMAval >= longEMAval  and  close>=vwapVal and close>open  //      close>vwapVal   and   



//Entry
strategy.entry(id="VWAP_BB LE", comment="VB LE" , long=true,  when= longCondition and  is_price_dipped_bb(10,lowerBand) )  //and strategy.position_size<1 

//add to the existing position
//strategy.entry(id="VWAP_RSI LE", comment="VR LE Add" , long=true,  when= addOnDivergence==true and strategy.position_size>=1 and close<strategy.position_avg_price   and (close<lowerBand or  low<lowerBand) and rsiVal>rsi_buy_line)

barcolor(strategy.position_size>=1  ? color.blue: na)



strategy.close(id="VWAP_BB LE", comment="TP Exit VB LE",   when=crossover(close,upperBand) )

//stoploss
stopLossVal =   strategy.position_avg_price * (1-(stopLoss*0.01) )
strategy.close(id="VB LE", comment="SL Exit",   when= close < stopLossVal)