
Strategi ini adalah sistem perdagangan kuantitatif berdasarkan dua pola kandil klasik: garis palu dan manusia gantung. Strategi ini bekerja dengan mengidentifikasi pola pembalikan di pasar untuk memprediksi titik balik potensial dalam aksi harga. Sistem ini menggabungkan beberapa indikator teknis untuk mengonfirmasi validitas sinyal, termasuk hubungan proporsional antara badan garis K dan bayangan, arah tren, dan faktor-faktor lainnya, untuk mencapai penangkapan titik pembalikan pasar yang akurat.
Logika inti dari strategi ini adalah mengidentifikasi dua pola kandil utama dengan cara terprogram:
Strategi ini mengukur pola-pola ini dengan menetapkan parameter yang ketat, termasuk:
Strategi ini mewujudkan penerapan sistematis teori analisis teknis klasik melalui metode kuantitatif dan memiliki nilai praktis yang kuat. Dengan mengoptimalkan parameter dan meningkatkan mekanisme pengendalian risiko, strategi tersebut dapat mempertahankan kinerja yang stabil di berbagai lingkungan pasar. Desain modular dari strategi ini juga menyediakan landasan yang baik untuk pengoptimalan selanjutnya.
/*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")