Estrategia de negociación cuantitativa basada en bandas de Bollinger y MACD

El autor:¿ Qué pasa?, Fecha: 2024-02-23 14:30
Las etiquetas:

img

Resumen general

Esta estrategia es una estrategia de negociación cuantitativa basada en las bandas de Bollinger y los indicadores MACD. Combina el comercio de ruptura de las bandas de Bollinger y el seguimiento de tendencias del MACD para mejorar la calidad de las señales de negociación.

Principio de la estrategia

La estrategia utiliza principalmente las bandas de Bollinger y los indicadores MACD para determinar las señales de negociación.

Las bandas de Bollinger consisten en una banda media, banda superior y banda inferior. Una señal de compra se genera cuando el precio rompe la banda inferior. Una señal de venta se genera cuando el precio rompe la banda superior. La estrategia utiliza el principio de ruptura de las bandas de Bollinger para determinar señales de ruptura más fuertes.

El indicador MACD refleja la relación entre los promedios móviles a corto y largo plazo. Utiliza cruces de la línea de diferencia y la línea de señal para determinar los puntos de entrada y salida.

En general, la estrategia combina el seguimiento de tendencias de las bandas de Bollinger y las ventajas de la media móvil del MACD, con el objetivo de capturar mayores fluctuaciones del mercado en tendencias fuertes.

Ventajas de la estrategia

  1. La combinación de bandas de Bollinger e indicadores MACD hace que las señales comerciales sean más confiables.

  2. El seguimiento de tendencias de las bandas de Bollinger y los cruces de la media móvil MACD pueden producir señales de entrada más fuertes en los mercados de tendencia.

  3. Las señales falsas pueden filtrarse eficazmente mediante el juicio de dos indicadores, reduciendo el riesgo comercial.

  4. Existe un gran margen de optimización de parámetros de la estrategia, que puede ajustarse de acuerdo con diferentes productos y ciclos.

Riesgos de la estrategia

  1. En los mercados de rango, las señales de negociación generadas por las bandas de Bollinger y el MACD pueden ser frecuentes, lo que conlleva riesgos de sobrenegociación.

  2. Las tres cruces doradas del MACD sucesivas en niveles bajos pueden enfrentar el riesgo de una inversión a la baja.

  3. La estrategia utiliza múltiples indicadores, lo que dificulta la optimización de parámetros y las pruebas de estrategia.

Para abordar estos riesgos, se pueden utilizar métodos como ajustar los períodos de retención, establecer pérdidas de parada, optimizar parámetros para controlarlos.

Direcciones para la optimización de la estrategia

  1. Prueba los parámetros de las bandas de Bollinger de período más largo para reducir la frecuencia de negociación.

  2. Optimizar los parámetros de línea rápida y lenta del MACD para mejorar la sensibilidad del indicador.

  3. Añadir otros indicadores para filtrar, como KDJ, RSI, etc., para mejorar la calidad de la señal.

  4. Configurar paradas dinámicas para salir automáticamente de las operaciones y controlar los riesgos comerciales únicos.

Conclusión

En teoría, al integrar el comercio de ruptura de bandas de Bollinger y el filtrado del indicador MACD, esta estrategia puede producir señales comerciales de alta calidad. A través de la optimización de parámetros y las medidas de control de riesgos, se pueden lograr buenos resultados de backtest. Sin embargo, ninguna estrategia puede evitar completamente las pérdidas.


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

//@version=5
strategy("Nabz-BBMACD-2022-V1.1", shorttitle="BBM-Nabz", overlay=true)


// My 1st Pine Scrpt Indicator
// Work on best on 1Hr Chart
// Open for Help/Donations.


var float lastentry=1
int result = 0
float x = 0
drawshape = false

/////////////EMA
shortest = ta.ema(close, 20)
short = ta.ema(close, 50)
longer = ta.ema(close, 100)
longest = ta.ema(close, 200)

plot(shortest, color = color.red)
plot(short, color = color.orange)
plot(longer, color = color.aqua)
plot(longest, color = color.blue)

///////////// RSI
RSIlength = input(6,title="RSI Period Length") 
RSIoverSold = 50
RSIoverBought = 50
price = close
vrsi = ta.rsi(price, RSIlength)


///////////// Bollinger Bands
BBlength = input.int(200, minval=1,title="Bollinger Period Length")
BBmult = 2 // input(2.0, minval=0.001, maxval=50,title="Bollinger Bands Standard Deviation")
BBbasis = ta.sma(price, BBlength)
BBdev = BBmult * ta.stdev(price, BBlength)
BBupper = BBbasis + BBdev
BBlower = BBbasis - BBdev
source = close
buyEntry = ta.crossover(source, BBlower)
sellEntry = ta.crossunder(source, BBupper)



////////////// MACD
fastLength = input(12)
slowlength = input(26)
MACDLength = input(9)
MACD = ta.ema(close, fastLength) - ta.ema(close, slowlength)
aMACD = ta.ema(MACD, MACDLength)
delta = MACD - aMACD


///////////// Colors
switch1=input(true, title="Enable Bar Color?")
switch2=input(true, title="Enable Background Color?")
TrendColor = RSIoverBought and (price[1] > BBupper and price < BBupper) and BBbasis < BBbasis[1] ? color.red : RSIoverSold and (price[1] < BBlower and price > BBlower) and BBbasis > BBbasis[1] ? color.green : na


///////////Strategy

bool tcu = not (ta.crossunder(price[0],shortest[0]))


if (((price[1]<BBlower[1]) and (ta.crossover(price,BBlower))))
    lastentry := low[1]
    strategy.entry("RSI_BB_L", strategy.long, comment="Buy 1st IF")
    
if (((ta.crossover(delta, 0.0) and (ta.crossover(price,BBlower)))))
    lastentry := low[1]
    strategy.entry("RSI_BB_L", strategy.long, comment="Buy 2nd IF")    
    
if (((ta.crossover(delta, 0.0)) and (low[0]>shortest[0])) and (price[1]<low))
    lastentry := low[1]
    strategy.entry("RSI_BB_L", strategy.long, comment="Buy 3rd IF")   //else

if (((ta.crossover(delta, 0.01)) and (high[1]<BBupper)) and (tcu))
    lastentry := low[1]
    strategy.entry("RSI_BB_L", strategy.long, comment="Buy 4th IF")

       
if ((ta.crossunder(low[0],shortest[0]) and close<shortest))
    strategy.close(id="RSI_BB_L", comment="Close by 1st IF")
    
    
    
if (price<lastentry)
    drawshape := true
    
if (price<strategy.opentrades.entry_price(0)/1.01175734321249)
    strategy.close(id="RSI_BB_L", comment="Close by 2nd IF")



plot(strategy.opentrades.entry_price(0), color=color.yellow)


Más.