
Strategi ini ialah sistem perdagangan kuantitatif berdasarkan dua corak candlestick klasik: garis tukul dan lelaki tergantung. Strategi ini berfungsi dengan mengenal pasti corak pembalikan ini dalam pasaran untuk meramalkan potensi titik perubahan dalam tindakan harga. Sistem ini menggabungkan berbilang penunjuk teknikal untuk mengesahkan kesahihan isyarat, termasuk hubungan berkadar antara badan garis-K dan bayang-bayang, arah aliran dan faktor-faktor lain, untuk mencapai penangkapan tepat titik pembalikan pasaran.
Logik teras strategi ini adalah untuk mengenal pasti dua corak candlestick utama dalam cara program:
Strategi mengukur corak ini dengan menetapkan parameter yang ketat, termasuk:
Strategi ini merealisasikan aplikasi sistematik teori analisis teknikal klasik melalui kaedah kuantitatif dan mempunyai nilai praktikal yang kukuh. Dengan mengoptimumkan parameter dan menambah baik mekanisme kawalan risiko, strategi boleh mengekalkan prestasi yang stabil dalam persekitaran pasaran yang berbeza. Reka bentuk modular strategi juga menyediakan asas yang baik untuk pengoptimuman seterusnya.
/*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")