Strategi ini adalah sistem perdagangan kuantitatif berdasarkan dua corak candlestick klasik: Hammer dan Hanging Man. Ia meramalkan titik perubahan pasaran yang berpotensi dengan mengenal pasti corak pembalikan ini. Sistem ini menggabungkan beberapa penunjuk teknikal untuk mengesahkan kesahihan isyarat, termasuk hubungan antara badan candlestick dan bayang-bayang, arah trend, dan elemen lain, mencapai penangkapan tepat titik pembalikan pasaran.
Logik teras strategi adalah untuk mengenal pasti dua corak candlestick utama secara programatik: 1. Hammer: Muncul dalam trend menurun, menunjukkan potensi pembalikan ke atas. dicirikan oleh badan kecil, bayangan bawah yang panjang (sekurang-kurangnya dua kali panjang badan), dan sedikit atau tidak ada bayangan atas. 2. Hanging Man: Muncul dalam trend menaik, menunjukkan potensi pembalikan ke bawah. Ciri-ciri serupa dengan Hammer tetapi muncul di lokasi yang berbeza dengan implikasi yang bertentangan.
Strategi ini mengukur corak ini melalui parameter yang ketat, termasuk: - Penambah panjang badan lilin minimum - Rasio bawah bayangan ke ketinggian lilin - Tempoh penahan
Strategi ini melaksanakan teori analisis teknikal klasik secara sistematik melalui pengukuran kuantitatif, menunjukkan nilai praktikal yang kuat. Melalui pengoptimuman parameter dan penyempurnaan mekanisme kawalan risiko, strategi ini dapat mengekalkan prestasi yang stabil dalam persekitaran pasaran yang berbeza. Reka bentuk modular juga menyediakan asas yang kukuh untuk pengoptimuman 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")