Estrategia de seguimiento de la ruptura de la acción del precio del MACD dual

MACD ATR
Fecha de creación: 2024-11-25 11:15:50 Última modificación: 2024-11-25 11:15:50
Copiar: 1 Número de Visitas: 532
1
Seguir
1617
Seguidores

Estrategia de seguimiento de la ruptura de la acción del precio del MACD dual

Descripción general

Se trata de una estrategia de negociación que combina el indicador dual MACD y el análisis del comportamiento del precio. La estrategia determina la tendencia del mercado observando el cambio de color del diagrama vertical dual MACD en un período de 15 minutos, mientras que busca formas fuertes en un período de 5 minutos y confirma señales de ruptura en un período de 1 minuto. La estrategia utiliza un mecanismo de stop loss y seguimiento de paradas dinámico basado en ATR para maximizar el espacio de ganancias al tiempo que gestiona el riesgo de manera efectiva.

Principio de estrategia

La estrategia utiliza dos conjuntos de indicadores MACD de diferentes parámetros ((34/144/9 y 100/200/50) para confirmar la tendencia del mercado. Cuando los dos gráficos verticales MACD muestran la misma tendencia de color, el sistema busca en el gráfico de 5 minutos una forma de pared fuerte, que se caracteriza por una entidad que es 1.5 veces mayor que la línea de sombra. Una vez que se encuentra una pared fuerte, el sistema monitorea en el gráfico de 1 minuto si hay una ruptura.

Ventajas estratégicas

  1. Análisis multi-ciclo: combina tres períodos de tiempo de 15 minutos, 5 minutos y 1 minuto para mejorar la fiabilidad de la señal
  2. Confirmación de tendencias: uso de doble verificación cruzada MACD para reducir las señales falsas
  3. Análisis del comportamiento de los precios: identificación de los niveles de precios clave a través de las formas de las curvas de fuerza
  4. Gestión de riesgos dinámica: mecanismo de suspensión de pérdidas y seguimiento basado en ATR
  5. Filtración de señales: estrictas condiciones de entrada para reducir errores
  6. Alto grado de automatización: automatización total de las transacciones y reducción de la intervención humana

Riesgo estratégico

  1. Riesgo de cambio de tendencia: Falsos breaks en un mercado muy volátil
  2. Riesgo de deslizamiento: las operaciones de alta frecuencia con un ciclo de un minuto pueden sufrir efectos de deslizamiento
  3. Riesgo de exceso de operaciones: las frecuentes señales pueden conducir a exceso de operaciones
  4. Dependencia del entorno del mercado: el rendimiento puede ser bajo en un mercado convulso Medidas de mitigación:
  • Añadir filtro de tendencias
  • Establecer un umbral de fluctuación mínimo
  • Añadir un límite de transacciones
  • Introducción de un mecanismo de identificación del entorno de mercado

Dirección de optimización de la estrategia

  1. Optimización de parámetros MACD: los parámetros MACD se pueden ajustar según las características de los diferentes mercados
  2. Optimización de stop loss: Considere agregar stop loss dinámico basado en la volatilidad
  3. Filtrado de horas de transacción: añadir restricciones a la ventana de horas de transacción
  4. Gestión de la ubicación: implementación de un mecanismo de construcción y salida por lotes
  5. Filtración del entorno del mercado: añadir indicadores de intensidad de tendencia
  6. Control de retirada: introducción de un mecanismo de control de riesgos basado en una curva de intereses y derechos

Resumir

Se trata de un sistema de estrategias de análisis tecnológico y gestión de riesgos integrado. Asegura la calidad de las operaciones mediante análisis de múltiples ciclos y un estricto filtro de señales, al tiempo que utiliza el riesgo de gestión eficaz de los paros dinámicos y el seguimiento de los mecanismos de paradas. La estrategia tiene una gran adaptabilidad, pero aún necesita una optimización continua en función del entorno del mercado.

Código Fuente de la Estrategia
/*backtest
start: 2024-01-01 00:00:00
end: 2024-11-24 00:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// @version=5
strategy("Price Action + Double MACD Strategy with ATR Trailing", overlay=true)

// Inputs for MACD
fastLength1 = input.int(34, title="First MACD Fast Length")
slowLength1 = input.int(144, title="First MACD Slow Length")
signalLength1 = input.int(9, title="First MACD Signal Length")

fastLength2 = input.int(100, title="Second MACD Fast Length")
slowLength2 = input.int(200, title="Second MACD Slow Length")
signalLength2 = input.int(50, title="Second MACD Signal Length")

// Input for ATR Trailing
atrMultiplier = input.float(1.5, title="ATR Multiplier for Trailing")

// Inputs for Stop Loss
atrStopMultiplier = input.float(1.0, title="ATR Multiplier for Stop Loss")

// MACD Calculations
[macdLine1, signalLine1, macdHist1] = ta.macd(close, fastLength1, slowLength1, signalLength1)
[macdLine2, signalLine2, macdHist2] = ta.macd(close, fastLength2, slowLength2, signalLength2)

// Get 15M MACD histogram colors
macdHist1Color = request.security(syminfo.tickerid, "15", (macdHist1 >= 0 ? (macdHist1[1] < macdHist1 ? #26A69A : #B2DFDB) : (macdHist1[1] < macdHist1 ? #FFCDD2 : #FF5252)))
macdHist2Color = request.security(syminfo.tickerid, "15", (macdHist2 >= 0 ? (macdHist2[1] < macdHist2 ? #26A69A : #B2DFDB) : (macdHist2[1] < macdHist2 ? #FFCDD2 : #FF5252)))

// Check MACD color conditions
isMacdUptrend = macdHist1Color == #26A69A and macdHist2Color == #26A69A
isMacdDowntrend = macdHist1Color == #FF5252 and macdHist2Color == #FF5252

// Function to detect strong 5M candles
isStrongCandle(open, close, high, low) =>
    body = math.abs(close - open)
    tail = math.abs(high - low) - body
    body > tail * 1.5  // Ensure body is larger than the tail

// Variables to track state
var float fiveMinuteHigh = na
var float fiveMinuteLow = na
var bool tradeExecuted = false
var bool breakoutDetected = false
var float entryPrice = na
var float stopLossPrice = na
var float longTakeProfit = na
var float shortTakeProfit = na

// Check for new 15M candle and reset flags
if ta.change(time("15"))
    tradeExecuted := false      // Reset trade execution flag
    breakoutDetected := false  // Reset breakout detection
    if isStrongCandle(open[1], close[1], high[1], low[1])
        fiveMinuteHigh := high[1]
        fiveMinuteLow := low[1]
    else
        fiveMinuteHigh := na
        fiveMinuteLow := na

// Get 1-minute close prices
close1m = request.security(syminfo.tickerid, "5", close)

// Ensure valid breakout direction and avoid double breakouts
if not na(fiveMinuteHigh) and not breakoutDetected
    for i = 1 to 3
        if close1m[i] > fiveMinuteHigh and not tradeExecuted  // 1M breakout check with close
            breakoutDetected := true
            if isMacdUptrend 
                // Open Long trade
                entryPrice := close
                stopLossPrice := close - (atrStopMultiplier * ta.atr(14))  // ATR-based stop loss
                longTakeProfit := close + (atrMultiplier * ta.atr(14)) // Initialize take profit

                strategy.entry("Long", strategy.long)
                tradeExecuted := true
            break // Exit the loop after detecting a breakout

        else if close1m[i] < fiveMinuteLow and not tradeExecuted  // 1M breakout check with close
            breakoutDetected := true
            if isMacdDowntrend
                // Open Short trade
                entryPrice := close
                stopLossPrice := close + (atrStopMultiplier * ta.atr(14))  // ATR-based stop loss
                shortTakeProfit := close - (atrMultiplier * ta.atr(14)) // Initialize take profit

                strategy.entry("Short", strategy.short)
                tradeExecuted := true
            break // Exit the loop after detecting a breakout

// Update trailing take-profit dynamically
if tradeExecuted and strategy.position_size > 0  // Long trade
    longTakeProfit := math.max(longTakeProfit, close + (atrMultiplier * ta.atr(14)))
    strategy.exit("Long TP/SL", "Long", stop=stopLossPrice, limit=longTakeProfit)

else if tradeExecuted and strategy.position_size < 0  // Short trade
    shortTakeProfit := math.min(shortTakeProfit, close - (atrMultiplier * ta.atr(14)))
    strategy.exit("Short TP/SL", "Short", stop=stopLossPrice, limit=shortTakeProfit)

// Reset trade state when position is closed
if strategy.position_size == 0
    tradeExecuted := false
    entryPrice := na
    longTakeProfit := na
    shortTakeProfit := na