Estrategia de stop loss dinámico y objetivo multinivel

HEIKIN ASHI HA TARGET ZONE Trailing Stop PYRAMIDING BREAK-EVEN risk management
Fecha de creación: 2025-03-31 16:20:21 Última modificación: 2025-03-31 16:20:21
Copiar: 1 Número de Visitas: 309
2
Seguir
319
Seguidores

Estrategia de stop loss dinámico y objetivo multinivel Estrategia de stop loss dinámico y objetivo multinivel

Descripción general

La estrategia de objetivos y paradas de seguimiento de múltiples niveles es un sistema de seguimiento de tendencias basado en el modelo de gráficos de Hines-Ansi, diseñado para capturar el movimiento del mercado y proteger las ganancias. La estrategia permite entradas iniciales y segundas entradas (incrementos piramidales), con objetivos de ganancias y paradas de pérdidas independientes para cada entrada.

Principio de estrategia

La estrategia se basa en varios principios clave:

  1. Señales de la cartografía de Heinrich Heine: Utiliza el gráfico de Heinsey-Ansi para filtrar el ruido del mercado e identificar tendencias. La señal de múltiples cabezas se activa cuando el precio de cierre de la HA actual es superior al precio de apertura de la HA y superior al precio de cierre de la HA anterior; la señal de cabezas vacías, por el contrario.

  2. Sistema de admisión de dos niveles:

    • Entrada inicial: establezca objetivos predefinidos y niveles de parada basados en la señal inicial de HA
    • Segunda entrada: se permite una entrada adicional si el mercado continúa mostrando señales favorables de HA después de alcanzar el primer objetivo
  3. La ruptura de la protección de pérdidas y gananciasCuando se alcanza el primer objetivo, la estrategia automáticamente traslada el nivel de stop loss al precio de entrada (punto de equilibrio de ganancia-pérdida), asegurando que la operación no tenga pérdidas.

  4. Concepto de área objetivo: Cuando el precio se acerca al nivel objetivo (dentro de un umbral predefinido), la estrategia inicia una “zona objetivo”, aumentando el nivel objetivo para capturar más ganancias potenciales

  5. Mecanismo de detención de pérdidas:

    • Seguimiento de entrada inicial: después de alcanzar el objetivo inicial, el punto de parada se mueve siguiendo el precio más alto / más bajo, manteniendo una distancia fija
    • Seguimiento de entrada por segunda vez: Parámetros separados de seguimiento de pérdidas para la parte de alza de posición
  6. Seguimiento de estadoEstrategia de mantenimiento de varias variables para rastrear la dirección de la operación, el valor máximo del precio, si se alcanzó el primer objetivo y si se encuentra actualmente en la zona de destino, etc.

Ventajas estratégicas

  1. Gestión integral de los riesgosLa estrategia proporciona una gestión de riesgos multicapa mediante la prevención de pérdidas, la protección del equilibrio de pérdidas y la prevención de pérdidas colaterales, protegiendo el capital de la caída drástica.

  2. Las oportunidades piramidal: Al permitir la segunda entrada, la estrategia puede aumentar la posición en una tendencia confirmada, aumentar el potencial de ganancias, y al mismo tiempo no aumentar el riesgo general, ya que la primera operación está bloqueada en el punto de equilibrio de ganancias y pérdidas.

  3. Dinámica de captura de ganancias: Las áreas de objetivo y la función de aumento de objetivos permiten a las estrategias ampliar automáticamente los objetivos de ganancias en mercados fuertes, en lugar de salir prematuramente de una tendencia fuerte.

  4. Altitud de diseñoLa estrategia ofrece un amplio conjunto de parámetros que permiten a los operadores adaptarse a las condiciones del mercado, las características de la variedad de operaciones y las preferencias de riesgo personales.

  5. Ejecución automática: Una vez que la configuración de los parámetros se ha completado, la estrategia ejecuta todos los ajustes de entrada, salida y parada, eliminando el efecto del comercio emocional.

  6. Comentarios visualesLa estrategia incluye componentes visuales claros que muestran el nivel objetivo, el nivel de stop loss y el indicador de estado actual, lo que permite al comerciante monitorear fácilmente el progreso de las operaciones.

Riesgo estratégico

  1. Sensibilidad de los parámetrosEl rendimiento de la estrategia depende en gran medida de la configuración de los parámetros. Un objetivo inadecuado o parámetros de stop loss pueden conducir a una salida prematura de una buena operación o a un riesgo de caída excesivo. Este riesgo se puede mitigar mediante el retroceso histórico y la optimización de parámetros específicos del mercado.

  2. Riesgo de deslizamiento: Especialmente durante la ejecución de paradas de seguimiento, las brechas de mercado o la falta de liquidez pueden causar que el precio de ejecución real sea diferente del nivel de paradas ideal. Considerar la posibilidad de aumentar el amortiguamiento de deslizamiento o el uso de parámetros de seguimiento más conservadores puede reducir este riesgo.

  3. Reincorporación en el exceso de comercio: La habilitación de la segunda entrada puede conducir a la sobrecambio en mercados inestables. La aplicación de condiciones de filtración adicionales o restricciones de tiempo de segunda entrada puede reducir este tipo de situaciones.

  4. Riesgo de cambio de mercado: Si bien la estrategia funciona bien en un mercado en tendencia, puede funcionar mal en un mercado con una oscilación intermedia o en un mercado de giro repentino. El uso de la estrategia en combinación con un filtro de estado de mercado puede mejorar la efectividad general.

  5. Densidad de cálculo: Estrategias para rastrear múltiples variables y estados que pueden causar retrasos en la ejecución en algunas plataformas. Optimizar el código y simplificar ciertos cálculos puede mejorar el rendimiento.

Dirección de optimización de la estrategia

  1. Añadir un filtro de tendenciasLa integración de indicadores de tendencia (como las medias móviles, el ADX o los indicadores de intensidad de la tendencia) puede mejorar la calidad de entrada y el comercio solo en la dirección de la tendencia confirmada. Esto reducirá las señales erróneas en los mercados convulsos.

  2. Introducir condiciones de filtro de tiempo: Añadir una ventana de tiempo o un período de enfriamiento para la segunda entrada, para evitar el exceso de operaciones en un corto período de tiempo o la entrada y salida frecuentes de la misma tendencia.

  3. Ajuste por volatilidad: Al ajustar dinámicamente los parámetros de los objetivos y de los parámetros de los parámetros de los parámetros de los parámetros de los parámetros de los parámetros de los parámetros de los parámetros de los parámetros de los parámetros de los parámetros de los parámetros de los parámetros de los parámetros de los parámetros de los parámetros de los parámetros de los parámetros de los parámetros de los parámetros de los parámetros de los parámetros de los parámetros de los parámetros de los parámetros de los parámetros de los parámetros de los parámetros de los parámetros de los parámetros de los parámetros de los parámetros de los parámetros de los parámetros de los parámetros de los parámetros de los parámetros de los parámetros de los parámetros de los parámet

  4. Mejoras en la lógica de Heinz Anssi: Los juicios actuales de HA son relativamente simples, y se puede mejorar la calidad de la señal teniendo en cuenta la morfología de la columna de HA o el indicador de la dinámica de HA.

  5. Añadir bloqueo parcial de gananciasImplementación de la función de bloqueo de ganancias por etapas, que permite cerrar parte de las posiciones cuando se alcanza un determinado nivel de ganancias, mientras que el resto continúa funcionando, equilibrando la protección de las ganancias y la maximización de los beneficios potenciales.

  6. Optimización de la lógica de la zona objetivoSe puede considerar un algoritmo de ajuste de objetivos dinámicos basado en la volatilidad del mercado o en los movimientos de precios recientes, para adaptarse mejor a las condiciones cambiantes del mercado.

Resumir

Las estrategias de objetivos multicapa y stop-loss son un sistema de negociación integral que combina la identificación de tendencias de Hines, la gestión dinámica de objetivos, las oportunidades de segunda entrada y el control de riesgos multicapa. La principal ventaja de la estrategia reside en su mecanismo de expansión de ganancias flexible y su marco de gestión de riesgos estricto, lo que la hace adecuada para capturar movimientos significativos en mercados con tendencias.

Aunque la estrategia ofrece un marco sólido, su eficacia sigue dependiendo del ajuste de los parámetros y las condiciones de mercado adecuadas. La estrategia puede mejorar aún más su robustez y adaptabilidad mediante la adición de filtros de estado de mercado, mecanismos de ajuste de volatilidad y una lógica de confirmación de entrada más compleja. Finalmente, la estrategia representa una especie de columna de equilibrio que protege el capital de negociación a través de un control de riesgo sistematizado mientras intenta maximizar la captura de tendencias.

Código Fuente de la Estrategia
/*backtest
start: 2024-03-31 00:00:00
end: 2025-03-29 08:00:00
period: 2d
basePeriod: 2d
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT"}]
*/

//@version=6
strategy("Algo Trading v1 | SUNNY GUHA By OIESU", overlay=true, margin_long=100, margin_short=100, pyramiding=100)

// ———— USER INPUTS ———— //
// First Entry Settings
float initialTarget  = input.float(10000, "First Entry: Target ($)", minval=1, tooltip="First target level")
float initialStopLoss = input.float(3000, "First Entry: Stop Loss ($)", minval=1, tooltip="Initial stop loss distance")
bool  useTrailFirst = input.bool(true, "First Entry: Enable Trail", tooltip="Enable trailing features after first target hit")
float profitTrailStepFirst = input.float(1500, "First Entry: Trail Amount ($)", minval=1, tooltip="Trail amount after first target hit")
bool  useTargetZoneFirst = input.bool(true, "First Entry: Enable Target Zone", tooltip="Enable target zone feature")
float targetZoneThresholdFirst = input.float(1000, "First Entry: Target Zone Threshold ($)", minval=1, tooltip="Distance to activate target zone")
float targetIncreaseStepFirst = input.float(2000, "First Entry: Target Increase ($)", minval=1, tooltip="Amount to increase target")

// Second Entry Settings
bool  enableSecondEntries = input.bool(true, "Enable Second Entries", tooltip="Allow re-entries after first target hit")
float secondTarget = input.float(5000, "Second Entry: Target ($)", minval=1, tooltip="Target for second entries")
float secondStopLoss = input.float(2000, "Second Entry: Stop Loss ($)", minval=1, tooltip="Stop loss for second entries")
bool  useTrailSecond = input.bool(true, "Second Entry: Enable Trail", tooltip="Enable trailing for second entries")
float profitTrailStepSecond = input.float(1500, "Second Entry: Trail Amount ($)", minval=1, tooltip="Trail amount for second entries")
bool  useTargetZoneSecond = input.bool(true, "Second Entry: Enable Target Zone", tooltip="Enable target zone")
float targetZoneThresholdSecond = input.float(1000, "Second Entry: Target Zone Threshold ($)", minval=1)
float targetIncreaseStepSecond = input.float(2000, "Second Entry: Target Increase ($)", minval=1)

// ———— HEIKIN-ASHI CALCULATIONS ———— //
var float haOpen   = na
var float haClose  = na
var float haHigh   = na
var float haLow    = na

haClose := (open + high + low + close)/4
haOpen  := na(haOpen[1]) ? (open + close)/2 : (haOpen[1] + haClose[1])/2
haHigh  := math.max(high, math.max(haOpen, haClose))
haLow   := math.min(low, math.min(haOpen, haClose))

// ———— TRACKING VARIABLES ———— //
var float highestPrice     = na  // Tracks highest price for long positions
var float lowestPrice      = na  // Tracks lowest price for short positions
var float basePrice        = na  // Entry price for position
var float targetLevel      = na  // Current target level
var float stopLevel        = na  // Current stop level
var bool  firstTargetHit   = false  // Indicates if first target was hit
var string tradeDirection  = "none"  // Current trade direction
var bool   isSecondEntry   = false   // Tracks if current position is a second entry
var bool   inTargetZone    = false   // Tracks if price is in target zone

// ———— SIGNAL DETECTION ———— //
bullish = haClose > haOpen and haClose > haClose[1]
bearish = haClose < haOpen and haClose < haClose[1]

// Entry conditions - only allow second entries if enabled and after first target hit
longCondition  = bullish and (tradeDirection != "long" or (enableSecondEntries and firstTargetHit))
shortCondition = bearish and (tradeDirection != "short" or (enableSecondEntries and firstTargetHit))

// Position Management - Long Positions
if strategy.position_size > 0
    highestPrice := math.max(high, nz(highestPrice, high))

    if isSecondEntry
        // Second Entry Management
        inTargetZone := useTargetZoneSecond and high >= targetLevel - targetZoneThresholdSecond

        if inTargetZone and useTargetZoneSecond
            targetLevel := targetLevel + targetIncreaseStepSecond

        if useTrailSecond
            stopLevel := math.max(stopLevel, highestPrice - profitTrailStepSecond)

        if low <= stopLevel
            strategy.close_all("Second Entry Stop")
            basePrice := na
            targetLevel := na
            stopLevel := na
            highestPrice := na
            lowestPrice := na
            firstTargetHit := false
            isSecondEntry := false
            inTargetZone := false
            tradeDirection := "none"
    else
        // First Entry Management - improved profit locking
        if not firstTargetHit and high >= basePrice + initialTarget
            // First target hit - ALWAYS lock profit at break-even
            firstTargetHit := true
            stopLevel := basePrice  // Move stop to break-even
            targetLevel := useTrailFirst ? high + targetIncreaseStepFirst : basePrice + initialTarget
        else if firstTargetHit
            // Only modify target if trailing is enabled
            if useTrailFirst
                inTargetZone := useTargetZoneFirst and high >= targetLevel - targetZoneThresholdFirst
                if inTargetZone and useTargetZoneFirst
                    targetLevel := targetLevel + targetIncreaseStepFirst
                // Trail stop-loss but never below break-even
                stopLevel := math.max(basePrice, highestPrice - profitTrailStepFirst)
        else
            // Before first target hit
            targetLevel := basePrice + initialTarget
            stopLevel := basePrice - initialStopLoss

        // Exit on stop hit - this could only be at break-even or better after first target
        if low <= stopLevel
            strategy.close_all("First Entry Stop")
            basePrice := na
            targetLevel := na
            stopLevel := na
            highestPrice := na
            lowestPrice := na
            firstTargetHit := false
            isSecondEntry := false
            inTargetZone := false
            tradeDirection := "none"

// Position Management - Short Positions
if strategy.position_size < 0
    lowestPrice := math.min(low, nz(lowestPrice, low))

    if isSecondEntry
        // Second Entry Management
        inTargetZone := useTargetZoneSecond and low <= targetLevel + targetZoneThresholdSecond

        if inTargetZone and useTargetZoneSecond
            targetLevel := targetLevel - targetIncreaseStepSecond

        if useTrailSecond
            stopLevel := math.min(stopLevel, lowestPrice + profitTrailStepSecond)

        if high >= stopLevel
            strategy.close_all("Second Entry Stop")
            basePrice := na
            targetLevel := na
            stopLevel := na
            highestPrice := na
            lowestPrice := na
            firstTargetHit := false
            isSecondEntry := false
            inTargetZone := false
            tradeDirection := "none"
    else
        // First Entry Management - improved profit locking
        if not firstTargetHit and low <= basePrice - initialTarget
            // First target hit - ALWAYS lock profit at break-even
            firstTargetHit := true
            stopLevel := basePrice  // Move stop to break-even
            targetLevel := useTrailFirst ? low - targetIncreaseStepFirst : basePrice - initialTarget
        else if firstTargetHit
            // Only modify target if trailing is enabled
            if useTrailFirst
                inTargetZone := useTargetZoneFirst and low <= targetLevel + targetZoneThresholdFirst
                if inTargetZone and useTargetZoneFirst
                    targetLevel := targetLevel - targetIncreaseStepFirst
                // Trail stop-loss but never above break-even
                stopLevel := math.min(basePrice, lowestPrice + profitTrailStepFirst)
        else
            // Before first target hit
            targetLevel := basePrice - initialTarget
            stopLevel := basePrice + initialStopLoss

        // Exit on stop hit - this could only be at break-even or better after first target
        if high >= stopLevel
            strategy.close_all("First Entry Stop")
            basePrice := na
            targetLevel := na
            stopLevel := na
            highestPrice := na
            lowestPrice := na
            firstTargetHit := false
            isSecondEntry := false
            inTargetZone := false
            tradeDirection := "none"

// New Position Entry
if strategy.position_size == 0
    if longCondition
        tradeDirection := "long"
        basePrice := close
        targetLevel := basePrice + (firstTargetHit ? secondTarget : initialTarget)
        stopLevel := basePrice - (firstTargetHit ? secondStopLoss : initialStopLoss)
        highestPrice := high
        isSecondEntry := firstTargetHit
        strategy.entry("Long", strategy.long)
    else if shortCondition
        tradeDirection := "short"
        basePrice := close
        targetLevel := basePrice - (firstTargetHit ? secondTarget : initialTarget)
        stopLevel := basePrice + (firstTargetHit ? secondStopLoss : initialStopLoss)
        lowestPrice := low
        isSecondEntry := firstTargetHit
        strategy.entry("Short", strategy.short)

// ———— VISUALIZATION ———— //
// Entry signals
plotshape(longCondition and (strategy.position_size == 0),     title="Buy", style=shape.triangleup, location=location.belowbar, color=color.green, size=size.small)

plotshape(shortCondition and (strategy.position_size == 0),     title="Sell", style=shape.triangledown, location=location.abovebar, color=color.red, size=size.small)

// Target and stop levels with clearer colors
plot(targetLevel, title="Target Level", color=color.orange, linewidth=2)
plot(stopLevel, title="Stop Level", color=color.red, linewidth=2)

// Break-even level - shown prominently after first target hit
plot(strategy.position_size != 0 and firstTargetHit ? basePrice : na,     title="Break-Even Level", color=color.green, linewidth=2, style=plot.style_linebr)

// Debug plots for state tracking
plotchar(firstTargetHit, title="First Target Hit", char="T", location=location.top, color=color.yellow, size=size.tiny)
plotchar(isSecondEntry, title="Second Entry", char="2", location=location.top, color=color.white, size=size.tiny)
plotchar(useTrailFirst and firstTargetHit, title="Trail Active", char="→", location=location.top, color=color.blue, size=size.tiny)
plotchar(inTargetZone, title="Target Zone", char="Z", location=location.top, color=color.fuchsia, size=size.tiny)