Strategi ini adalah sistem perdagangan kuantitatif yang didasarkan pada dua pola candlestick klasik: Hammer dan Hanging Man. Ini memprediksi titik balik pasar potensial dengan mengidentifikasi pola pembalikan ini. Sistem ini menggabungkan beberapa indikator teknis untuk mengkonfirmasi validitas sinyal, termasuk hubungan antara tubuh candlestick dan bayangan, arah tren, dan elemen lain, mencapai penangkapan yang tepat dari titik pembalikan pasar.
Logika inti dari strategi ini adalah untuk mengidentifikasi dua pola candlestick kunci secara programatis: 1. Hammer: Terlihat pada tren menurun, menunjukkan potensi pembalikan ke atas. 2. Hanging Man: Tampak dalam tren naik, menunjukkan potensi pembalikan ke bawah. Karakteristik serupa dengan Hammer tetapi muncul di lokasi yang berbeda dengan implikasi yang berlawanan.
Strategi mengukur pola-pola ini melalui parameter yang ketat, termasuk: - Multiplikator panjang tubuh lilin minimum - Rasio bawah bayangan ke tinggi lilin - Periode penyimpanan
Strategi ini menerapkan teori analisis teknis klasik secara sistematis melalui kuantifikasi, menunjukkan nilai praktis yang kuat. Melalui optimasi parameter dan penyempurnaan mekanisme kontrol risiko, strategi dapat mempertahankan kinerja yang stabil di lingkungan pasar yang berbeda. Desain modular juga memberikan dasar yang kuat untuk optimasi berikutnya.
/*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")