Diese Strategie ist ein quantitatives Handelssystem, das auf zwei klassischen Kerzenmustern basiert: Hammer und Hanging Man. Es prognostiziert potenzielle Marktwendepunkte, indem es diese Umkehrmuster identifiziert. Das System kombiniert mehrere technische Indikatoren, um die Signalgültigkeit zu bestätigen, einschließlich der Beziehung zwischen Kerzenkörper und Schatten, Trendrichtung und anderen Elementen, um präzise Marktumkehrpunkte zu erfassen.
Die Kernlogik der Strategie besteht darin, zwei wichtige Kerzenmuster programmatisch zu identifizieren: 1. Hammer: Erscheint in Abwärtstrends, was auf eine mögliche Aufwärtswende hindeutet. 2. Hanging Man: Erscheint in Aufwärtstrends, was auf eine mögliche Abwärtsumkehr hindeutet.
Die Strategie quantifiziert diese Muster anhand strenger Parameter, darunter: - Multiplikator für die Mindestlänge des Kerzenkörpers - Niedrigere Schatten zu Kerzenhöhe-Verhältnis - Aufbewahrungszeiten
Diese Strategie implementiert die klassische Theorie der technischen Analyse systematisch durch Quantifizierung und zeigt einen starken praktischen Wert. Durch die Optimierung von Parametern und die Verfeinerung des Risikokontrollmechanismus kann die Strategie eine stabile Leistung in verschiedenen Marktumgebungen aufrechterhalten. Das modulare Design bietet auch eine solide Grundlage für die spätere Optimierung.
/*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")