Cette stratégie est un système de trading quantitatif basé sur deux modèles classiques de bougies: Hammer et Hanging Man. Il prédit les points de basculement potentiels du marché en identifiant ces modèles d'inversion. Le système combine plusieurs indicateurs techniques pour confirmer la validité du signal, y compris la relation entre le corps du bougie et les ombres, la direction de la tendance et d'autres éléments, permettant de capturer avec précision les points d'inversion du marché.
La logique de base de la stratégie est d'identifier deux modèles de bougies clés par programmation: 1. Marteau: apparaît dans les tendances à la baisse, suggérant un potentiel d'inversion vers le haut. Caractérisé par un petit corps, une longue ombre inférieure (au moins deux fois la longueur du corps) et une ombre supérieure minimale ou inexistante. 2. Hanging Man: apparaît dans les tendances haussières, suggérant un potentiel renversement à la baisse.
La stratégie quantifie ces tendances à l'aide de paramètres stricts, notamment: - Multiplicateur de la longueur minimale du corps de la bougie - Proportion entre l'ombre inférieure et la hauteur de la bougie - Périodes de détention
Cette stratégie met en œuvre systématiquement la théorie classique de l'analyse technique par la quantification, démontrant une forte valeur pratique.
/*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")