Chiến lược này là một hệ thống giao dịch định lượng dựa trên hai mô hình nến cổ điển: Hammer và Hanging Man. Nó dự đoán các bước ngoặt tiềm năng của thị trường bằng cách xác định các mô hình đảo ngược này. Hệ thống kết hợp nhiều chỉ số kỹ thuật để xác nhận tính hợp lệ của tín hiệu, bao gồm mối quan hệ giữa thân nến và bóng tối, hướng xu hướng và các yếu tố khác, đạt được việc nắm bắt chính xác các điểm đảo ngược thị trường.
Logic cốt lõi của chiến lược là xác định hai mô hình nến chính theo chương trình: 1. Hammer: xuất hiện trong xu hướng giảm, gợi ý khả năng đảo ngược lên. Được đặc trưng bởi một cơ thể nhỏ, bóng dưới dài (ít nhất gấp đôi chiều dài cơ thể), và tối thiểu hoặc không có bóng trên. 2. Hanging Man: xuất hiện trong xu hướng tăng, gợi ý khả năng đảo ngược xuống. Các đặc điểm tương tự như Hammer nhưng xuất hiện ở các vị trí khác nhau với ý nghĩa ngược lại.
Chiến lược định lượng các mô hình này thông qua các tham số nghiêm ngặt, bao gồm: - Số nhân chiều dài cơ thể nến tối thiểu - Tối thấp hơn để tỷ lệ chiều cao nến - Thời gian giữ
Chiến lược này thực hiện lý thuyết phân tích kỹ thuật cổ điển một cách có hệ thống thông qua định lượng, chứng minh giá trị thực tế mạnh mẽ. Thông qua tối ưu hóa tham số và tinh chỉnh cơ chế kiểm soát rủi ro, chiến lược có thể duy trì hiệu suất ổn định trong các môi trường thị trường khác nhau.
/*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")