La banda de Bollinger, la media móvil y la estrategia de negociación combinada MACD

El autor:¿ Qué pasa?, Fecha: 2024-02-04 15:42:23
Las etiquetas:

img

Resumen de la estrategia

Esta estrategia combina la banda de Bollinger, la media móvil y el MACD, formando un sistema de negociación relativamente completo.

Nombre y razón de la estrategia

La estrategia se llama Triangle Anchoring Trend Tracking Strategy. El nombre destaca su uso de tres indicadores técnicos para determinar la dirección de la tendencia y los puntos de entrada de anclaje.

La lógica básica del trading es:

  1. Compara la banda media de Bollinger, la EMA y la línea cero del MACD para determinar si el mercado está en una fase de tendencia alcista o bajista.

  2. Después de que se identifica una tendencia, la estrategia comprueba si la EMA cruza la banda media BB y si el histograma MACD cruza la línea de señal para determinar las entradas.

  3. Establezca el objetivo de ganancia y el stop loss. Una vez introducido, el objetivo fijo y los niveles de stop loss están preestablecidos.

Análisis de ventajas

La mayor ventaja de esta estrategia es el uso simultáneo de las herramientas de tendencia, media móvil y MACD para guiar las decisiones.

En primer lugar, la banda media de BB refleja claramente la dirección principal de la tendencia actual.

En segundo lugar, el propio BB tiene fuertes características de envolvente. El área alrededor de la banda media también indica ciertos niveles de soporte/resistencia. Por lo tanto, los cruces de EMA tienen valor de señal.

Además, el MACD mide la crecimiento y disminución del impulso alcista / bajista.

Por último, el objetivo de ganancia preestablecido y el stop loss controlan el riesgo/beneficio de las operaciones individuales, garantizando la estabilidad general.

Análisis de riesgos

A pesar del uso de múltiples herramientas analíticas, los principales riesgos son:

  1. Los parámetros BB incorrectos no reflejan claramente la tendencia principal.

  2. El sistema EMA señala largo pero el MACD no se vuelve claramente positivo, las fuerzas bajistas pueden expandirse.

  3. El rango objetivo de ganancias/stop loss es demasiado amplio, las pérdidas individuales se amplían.

Las principales soluciones son:

  1. Ajustar los parámetros BB para garantizar que la banda media refleje efectivamente la tendencia principal.

  2. Introduzca más indicadores técnicos para juzgar el impulso toro/oso.

  3. Evaluar las operaciones históricas y optimizar el objetivo de ganancia / stop loss.

Direcciones de optimización

La estrategia puede mejorarse aún más en los siguientes aspectos:

  1. Introducir más indicadores como KDJ, ATR, etc. para ayudar a juzgar la tendencia y mejorar la precisión.

  2. Implementar paradas más sofisticadas como paradas de arrastramiento, paradas de fuga, etc.

  3. Evaluar el rendimiento de diferentes productos, ajustar los parámetros para adaptarse a las condiciones del mercado.

  4. Estrategia de prueba y ajuste basada en los resultados de las pruebas de retroceso en diferentes plazos y mercados.

  5. Incorporar el aprendizaje automático para la optimización automática de parámetros y la actualización dinámica de la estrategia.

Conclusión

Esta estrategia aprovecha BB, MA y MACD juntos. Tiene un juicio de tendencia claro, ciertas características de envolvente y también captura algunas reversiones. Con más herramientas auxiliares para juzgar entradas / salidas, puede lograr un rendimiento más confiable. Se justifica una mayor evaluación y mejora de esta estrategia y se espera que produzca una herramienta cuantitativa robusta.


/*backtest
start: 2024-01-04 00:00:00
end: 2024-02-03 00:00:00
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Combined Strategy", overlay=true, shorttitle="Comb Strat", default_qty_type=strategy.percent_of_equity, default_qty_value=10)

// Precio de beneficio y Stop Loss
takeProfitTicks = 87636
stopLossTicks = 53350

// Bollinger Bands + EMA
length_bb = input(150, title="BB Length")
src_bb = input(close, title="BB Source")
mult = input(2.0, title="BB StdDev")
basis = ta.sma(src_bb, length_bb)
dev = mult * ta.stdev(src_bb, length_bb)
upper = basis + dev
lower = basis - dev

len_ema = input(34, title="EMA Length")
src_ema = input(close, title="EMA Source")
out_ema = ta.ema(src_ema, len_ema)

typeMA = input("SMA", title="Method")
smoothingLength = input(5, title="Length")

var float smoothingLine = na
if (typeMA == "SMA")
    smoothingLine := ta.sma(out_ema, smoothingLength)
else if (typeMA == "EMA")
    smoothingLine := ta.ema(out_ema, smoothingLength)

// MACD
fast_length = input(title="Fast Length", defval=9)
slow_length = input(title="Slow Length", defval=17)
src_macd = input(title="Source", defval=close)
signal_length = input.int(title="Signal Smoothing", minval=1, maxval=50, defval=9)
sma_source = input.string(title="Oscillator MA Type", defval="EMA", options=["SMA", "EMA"])
sma_signal = input.string(title="Signal Line MA Type", defval="EMA", options=["SMA", "EMA"])

fast_ma = sma_source == "SMA" ? ta.sma(src_macd, fast_length) : ta.ema(src_macd, fast_length)
slow_ma = sma_source == "SMA" ? ta.sma(src_macd, slow_length) : ta.ema(src_macd, slow_length)
macd = fast_ma - slow_ma
signal = sma_signal == "SMA" ? ta.sma(macd, signal_length) : ta.ema(macd, signal_length)
hist = macd - signal

// Condiciones de compra y venta
longCondition = (out_ema > basis) and (macd > signal) and (signal > 0)
shortCondition = (out_ema < basis) and (macd < signal) and (signal < 0)

// Variables de estado
var bool longExecuted = na
var bool shortExecuted = na

// Estrategia
if (longCondition and not longExecuted)
    strategy.entry("Long", strategy.long)
    longExecuted := true
    shortExecuted := na
if (shortCondition and not shortExecuted)
    strategy.entry("Short", strategy.short)
    shortExecuted := true
    longExecuted := na

// Take Profit y Stop Loss para Compras y Ventas Cortas
strategy.exit("Take Profit/Close Long", from_entry="Long", profit=takeProfitTicks, loss=stopLossTicks)
strategy.exit("Take Profit/Close Short", from_entry="Short", profit=takeProfitTicks, loss=stopLossTicks)

// Cierre de posiciones cuando la dirección cambia
if ((out_ema < basis) and (macd < signal))
    strategy.close("Long")
    longExecuted := na
if ((out_ema > basis) and (macd > signal))
    strategy.close("Short")
    shortExecuted := na

// Plots
plot(basis, "BB Basis", color=#FF6D00)
plot(upper, "BB Upper", color=color.new(#2962FF, 0.5))
plot(lower, "BB Lower", color=color.new(#2962FF, 0.5))

plot(smoothingLine, title="Smoothing Line", color=#f37f20, linewidth=2)

hline(0, "Zero Line", color=color.new(#787B86, 50))
plot(hist, title="Histogram", style=plot.style_columns, color=(hist >= 0 ? (hist[1] < hist ? color.green : color.red) : (hist[1] < hist ? color.red : color.green)))
plot(macd, title="MACD", color=color.blue)
plot(signal, title="Signal", color=color.orange)


Más.