Esta estrategia es un sistema de negociación cuantitativo basado en dos patrones clásicos de velas: Hammer y Hanging Man. Predice puntos de inflexión potenciales del mercado mediante la identificación de estos patrones de inversión. El sistema combina múltiples indicadores técnicos para confirmar la validez de la señal, incluida la relación entre el cuerpo de la vela y las sombras, la dirección de la tendencia y otros elementos, logrando una captura precisa de los puntos de inversión del mercado.
La lógica central de la estrategia es identificar dos patrones clave de candlestick programáticamente: 1. Martillo: Aparece en tendencias bajistas, lo que sugiere una posible reversión ascendente. Caracterizado por un cuerpo pequeño, una sombra inferior larga (al menos el doble de la longitud del cuerpo) y una sombra superior mínima o nula. 2. Hombre colgado: aparece en tendencias alcistas, lo que sugiere una posible reversión a la baja.
La estrategia cuantifica estos patrones a través de parámetros estrictos, incluidos: - Múltiplicador de longitud mínima del cuerpo de la vela - Relación entre la sombra inferior y la altura de la vela - Periodos de retención
Esta estrategia implementa la teoría clásica del análisis técnico de manera sistemática a través de la cuantificación, demostrando un fuerte valor práctico. A través de la optimización de parámetros y el refinamiento del mecanismo de control de riesgos, la estrategia puede mantener un rendimiento estable en diferentes entornos de mercado.
/*backtest start: 2024-12-10 00:00:00 end: 2025-01-08 08:00:00 period: 1h basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT","balance":49999}] */ //@version=6 strategy("Hammer and Hanging Man Strategy", overlay=true) // Input parameters length = input.int(5, title="Minimum Candle Body Length (Multiplier)", minval=1) shadowRatio = input.float(1, title="Lower Shadow to Candle Height Ratio", minval=1.0) holdPeriods = input.int(26, title="Hold Periods (Bars)", minval=1) // Holding period in bars // Function to calculate the absolute value absValue(x) => x >= 0 ? x : -x // Function to check if it is a Hammer isHammer() => bodyLength = absValue(close - open) candleHeight = high - low lowerShadow = math.min(open, close) - low upperShadow = high - math.max(open, close) smallBody = bodyLength <= candleHeight / length longLowerShadow = lowerShadow >= bodyLength * shadowRatio shortUpperShadow = upperShadow <= bodyLength smallBody and longLowerShadow and shortUpperShadow and close > open // Function to check if it is a Hanging Man isHangingMan() => bodyLength = absValue(close - open) candleHeight = high - low lowerShadow = math.min(open, close) - low upperShadow = high - math.max(open, close) smallBody = bodyLength <= candleHeight / length longLowerShadow = lowerShadow >= bodyLength * shadowRatio shortUpperShadow = upperShadow <= bodyLength smallBody and longLowerShadow and shortUpperShadow and close < open // Detect the candles hammer = isHammer() hangingMan = isHangingMan() // Trading logic: Long on Hammer, Short on Hanging Man if hammer strategy.entry("Long", strategy.long) // Long entry on Hammer if hangingMan strategy.entry("Short", strategy.short) // Short entry on Hanging Man // Exit after X bars if strategy.position_size > 0 and bar_index - strategy.opentrades.entry_bar_index(0) >= holdPeriods strategy.close("Long") if strategy.position_size < 0 and bar_index - strategy.opentrades.entry_bar_index(0) >= holdPeriods strategy.close("Short") // Visualization of signals plotshape(hammer, title="Hammer", location=location.belowbar, color=color.green, style=shape.labelup, text="Hammer") plotshape(hangingMan, title="Hanging Man", location=location.abovebar, color=color.red, style=shape.labeldown, text="Hanging Man")