Esta estratégia é um sistema de negociação quantitativo baseado em dois padrões clássicos de velas: Hammer e Hanging Man. Prevê pontos de virada potenciais do mercado identificando esses padrões de reversão. O sistema combina vários indicadores técnicos para confirmar a validade do sinal, incluindo a relação entre o corpo do velas e as sombras, a direção da tendência e outros elementos, alcançando a captura precisa dos pontos de reversão do mercado.
A lógica central da estratégia é identificar dois padrões chave de velas programaticamente: 1. Martelo: Aparece em tendências descendentes, sugerindo uma potencial reversão ascendente. Caracterizado por um corpo pequeno, longa sombra inferior (pelo menos duas vezes o comprimento do corpo) e sombra superior mínima ou nenhuma. 2. Homem pendurado: aparece em tendências ascendentes, sugerindo uma potencial reversão descendente.
A estratégia quantifica estes padrões através de parâmetros rigorosos, incluindo: - Multiplicador de comprimento mínimo do corpo da vela - Relação entre a sombra inferior e a altura da vela - Períodos de detenção
Esta estratégia implementa a teoria clássica da análise técnica sistematicamente através da quantificação, demonstrando um forte valor prático. Através da otimização de parâmetros e do refinamento do mecanismo de controle de risco, a estratégia pode manter um desempenho estável em diferentes ambientes 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")