Chiến lược này là một hệ thống giao dịch thông minh kết hợp các công cụ phân tích kỹ thuật cổ điển bao gồm chéo trung bình động và nhận dạng mô hình nến. Chiến lược xác định các bước ngoặt tiềm năng của thị trường bằng cách phân tích mối quan hệ giữa bóng nến và cơ thể, trong khi kết hợp các tín hiệu chéo trung bình động kép. Hệ thống không chỉ tập trung vào xu hướng giá mà còn tính toán phạm vi trung bình để điều chỉnh động các tham số giao dịch để cải thiện khả năng thích nghi.
Logic cốt lõi bao gồm hai thành phần chính:
Mô-đun nhận dạng mẫu nến xác định các tín hiệu đảo ngược tiềm năng bằng cách tính toán tỷ lệ giữa bóng và cơ thể. Hệ thống bao gồm các tham số có thể điều chỉnh cho nhân bóng (wickMultiplier) và tỷ lệ phần trăm cơ thể (bodyPercentage) để tối ưu hóa chất lượng tín hiệu. Khi nến hiển thị các bóng phía trên hoặc phía dưới đủ điều kiện, hệ thống tạo ra các tín hiệu dài hoặc ngắn tương ứng.
Hệ thống chéo trung bình di chuyển kép sử dụng trung bình di chuyển đơn giản (SMA) 14 giai đoạn và 28 giai đoạn làm chỉ số xu hướng.
Chiến lược này xây dựng một khuôn khổ quyết định giao dịch tương đối hoàn chỉnh bằng cách kết hợp nhận dạng mẫu nến với các hệ thống chéo trung bình động.
/*backtest start: 2024-10-28 00:00:00 end: 2024-11-27 00:00:00 period: 1h basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 indicator("Wick Reversal Setup", overlay=true) // Input parameters wickMultiplier = input.float(3.5, title="Wick Multiplier", minval=0.5, maxval=20) bodyPercentage = input.float(0.25, title="Body Percentage", minval=0.1, maxval=1.0) // Calculate the average range over 50 periods avgRange = ta.sma(high - low, 50) // Define the lengths of wicks and bodies bodyLength = math.abs(close - open) upperWickLength = high - math.max(close, open) lowerWickLength = math.min(close, open) - low totalRange = high - low // Long signal conditions longSignal = (close > open and upperWickLength >= bodyLength * wickMultiplier and upperWickLength <= totalRange * bodyPercentage) or (close < open and lowerWickLength >= bodyLength * wickMultiplier and upperWickLength <= totalRange * bodyPercentage) or (close == open and close != high and upperWickLength >= bodyLength * wickMultiplier and upperWickLength <= totalRange * bodyPercentage) or (open == high and close == high and totalRange >= avgRange) // Short signal conditions shortSignal = (close < open and (high - open) >= bodyLength * wickMultiplier and lowerWickLength <= totalRange * bodyPercentage) or (close > open and (high - close) >= bodyLength * wickMultiplier and lowerWickLength <= totalRange * bodyPercentage) or (close == open and close != low and lowerWickLength >= bodyLength * wickMultiplier and lowerWickLength <= totalRange * bodyPercentage) or (open == low and close == low and totalRange >= avgRange) // Plot signals plotshape(series=longSignal, location=location.belowbar, color=color.green, style=shape.labelup, text="Long") plotshape(series=shortSignal, location=location.abovebar, color=color.red, style=shape.labeldown, text="Short") // This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © Sahaj_Beriwal //@version=5 strategy("My strategy", overlay=true, margin_long=100, margin_short=100) longCondition = ta.crossover(ta.sma(close, 14), ta.sma(close, 28)) if (longCondition) strategy.entry("L", strategy.long) shortCondition = ta.crossunder(ta.sma(close, 14), ta.sma(close, 28)) if (shortCondition) strategy.entry("S", strategy.short)