
Bei dieser Strategie handelt es sich um ein quantitatives Handelssystem, das auf zwei klassischen Candlestick-Mustern basiert: der Hammerlinie und dem Hanging Man. Die Strategie funktioniert, indem diese Umkehrmuster im Markt identifiziert werden, um potenzielle Wendepunkte in der Kursentwicklung vorherzusagen. Das System kombiniert mehrere technische Indikatoren, um die Gültigkeit des Signals zu bestätigen, einschließlich der proportionalen Beziehung zwischen dem K-Linienkörper und dem Schatten, der Trendrichtung und anderen Faktoren, um eine genaue Erfassung der Marktumkehrpunkte zu erreichen.
Die Kernlogik der Strategie besteht darin, zwei wichtige Candlestick-Muster auf programmatische Weise zu identifizieren:
Die Strategie quantifiziert diese Muster durch die Festlegung strenger Parameter, darunter:
Diese Strategie realisiert die systematische Anwendung der klassischen Theorie der technischen Analyse durch quantitative Methoden und hat einen hohen praktischen Wert. Durch die Optimierung der Parameter und die Verbesserung der Risikokontrollmechanismen kann die Strategie in unterschiedlichen Marktumgebungen eine stabile Performance aufrechterhalten. Der modulare Aufbau der Strategie bietet zudem eine gute Grundlage für spätere Optimierungen.
/*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")