Las bandas de Bollinger y la estrategia cuantitativa de negociación basada en el VWAP

El autor:¿ Qué pasa?, fecha: 2024-01-04 15:59:46
Las etiquetas:

img

Resumen general

Esta estrategia combina las bandas de Bollinger (BB) y los indicadores de precio promedio ponderado por volumen (VWAP) para tomar decisiones de entrada y salida.

Estrategia lógica

La estrategia se basa principalmente en las siguientes normas para la entrada y salida:

  1. Línea de EMA rápida por encima de la línea de EMA lenta como requisito previo para juzgar la tendencia

  2. Comprar cuando el precio de cierre está por encima del VWAP, lo que indica un precio al alza

  3. Introduzca largo si el precio de cierre se ha situado por debajo de la banda inferior BB en las últimas 10 barras, lo que indica una anomalía del precio

  4. Vender cuando el precio de cierre supera la banda superior BB que indica la reversión del precio

Específicamente, primero juzga si la EMA de 50 días está por encima de la EMA de 200 días para determinar la tendencia general. Luego se combina con VWAP para juzgar si el precio está en una tendencia alcista a corto plazo. Finalmente, usando bandas de Bollinger para detectar una caída de anomalía a corto plazo como oportunidad de entrada.

La regla de salida es simple, salida cuando el precio va por encima de la banda superior BB que indica la inversión del precio.

Análisis de las ventajas

La estrategia combina múltiples indicadores para aumentar la validez de las señales de entrada. El uso de EMA para juzgar la tendencia general evita el comercio contra tendencia. VWAP captura el impulso ascendente a corto plazo. BB detecta anomalías a corto plazo como momento para las entradas.

Análisis de riesgos

  1. Opinión inexacta de la tendencia de la EMA que provoca operaciones contrarias a la tendencia
  2. VWAP más adecuado para datos horarios o intradiarios, menos eficiente en datos diarios
  3. Configuración incorrecta del parámetro BB, bandas demasiado anchas o estrechas, falta de señales

Para mitigar los riesgos, los parámetros de EMA y BB se pueden ajustar. Prueba diferentes indicadores para la detección de tendencias. Utiliza VWAP en un marco de tiempo más corto. Optimiza el parámetro BB para obtener el mejor ancho de banda.

Oportunidades de mejora

  1. Prueba de otros indicadores para la detección de tendencias como el MACD
  2. Optimización de los parámetros EMA y BB
  3. Añadir el mecanismo de stop loss
  4. Añadir filtros para evitar señales falsas
  5. Prueba de retroceso en diversos productos y plazos

Conclusión

La estrategia combina BB y VWAP para detectar anomalías de precios a corto plazo como momento de entrada. El uso de EMA para determinar la tendencia general evita el comercio contra tendencia. Puede descubrir rápidamente el impulso a corto plazo. Adecuado para el comercio intradiario y a corto plazo. Mejora aún más la estabilidad y la rentabilidad optimizando los parámetros e incorporando más lógica.


/*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)



Más.