Đây là một chiến lược theo xu hướng kết hợp giữa Mức trung bình chuyển động biểu thức (EMA) và Chỉ số sức mạnh tương đối (RSI). Chiến lược xác định các tín hiệu giao dịch bằng cách theo dõi sự chéo chéo của EMA nhanh và chậm trong khi kết hợp các mức mua quá mức / bán quá mức RSI và sự khác biệt của RSI để nắm bắt hiệu quả xu hướng thị trường. Hoạt động trên khung thời gian 1 giờ, nó tăng độ chính xác giao dịch thông qua xác minh nhiều chỉ số kỹ thuật.
Logic cốt lõi bao gồm các yếu tố chính sau: 1. Sử dụng EMA 9 giai đoạn và 26 giai đoạn để xác định hướng xu hướng, với xu hướng tăng được chỉ ra khi đường nhanh nằm trên đường chậm 2. Sử dụng RSI 14 giai đoạn với 65 và 35 như ngưỡng cho tín hiệu dài và ngắn 3. Phát hiện sự khác biệt của chỉ số RSI trong khoảng thời gian 1 giờ bằng cách so sánh mức giá cao nhất / thấp nhất với chỉ số RSI cao nhất / thấp nhất 4. Đăng nhập dài đòi hỏi: EMA nhanh trên EMA chậm, RSI trên 65 và không có sự phân kỳ RSI giảm 5. Tham gia ngắn đòi hỏi: EMA nhanh dưới EMA chậm, RSI dưới 35, và không có sự phân kỳ RSI tăng
Chiến lược này xây dựng một hệ thống giao dịch tương đối hoàn chỉnh bằng cách kết hợp trung bình động, chỉ số động lực và phân tích phân kỳ. Nó nhấn mạnh xác minh nhiều tín hiệu để giảm hiệu quả rủi ro phán đoán sai. Mặc dù có một số sự chậm trễ vốn có, chiến lược có giá trị thực tế thông qua tối ưu hóa tham số và cải thiện quản lý rủi ro.
/*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"}] */ //@version=5 strategy("EMA9_RSI_Strategy_LongShort", overlay=true) // Parameters fastLength = input.int(9, minval=1, title="Fast EMA Length") slowLength = input.int(26, minval=1, title="Slow EMA Length") rsiPeriod = input.int(14, minval=1, title="RSI Period") rsiLevelLong = input.int(65, minval=1, title="RSI Level (Long)") rsiLevelShort = input.int(35, minval=1, title="RSI Level (Short)") // Define 1-hour timeframe timeframe_1h = "60" // Fetch 1-hour data high_1h = request.security(syminfo.tickerid, timeframe_1h, high) low_1h = request.security(syminfo.tickerid, timeframe_1h, low) rsi_1h = request.security(syminfo.tickerid, timeframe_1h, ta.rsi(close, rsiPeriod)) // Current RSI rsi = ta.rsi(close, rsiPeriod) // Find highest/lowest price and corresponding RSI in the 1-hour timeframe highestPrice_1h = ta.highest(high_1h, 1) // ราคาสูงสุดใน 1 ช่วงของ timeframe 1 ชั่วโมง lowestPrice_1h = ta.lowest(low_1h, 1) // ราคาต่ำสุดใน 1 ช่วงของ timeframe 1 ชั่วโมง highestRsi_1h = ta.valuewhen(high_1h == highestPrice_1h, rsi_1h, 0) lowestRsi_1h = ta.valuewhen(low_1h == lowestPrice_1h, rsi_1h, 0) // Detect RSI Divergence for Long bearishDivLong = high > highestPrice_1h and rsi < highestRsi_1h bullishDivLong = low < lowestPrice_1h and rsi > lowestRsi_1h divergenceLong = bearishDivLong or bullishDivLong // Detect RSI Divergence for Short (switch to low price for divergence check) bearishDivShort = low > lowestPrice_1h and rsi < lowestRsi_1h bullishDivShort = high < highestPrice_1h and rsi > highestRsi_1h divergenceShort = bearishDivShort or bullishDivShort // Calculate EMA emaFast = ta.ema(close, fastLength) emaSlow = ta.ema(close, slowLength) // Long Conditions longCondition = emaFast > emaSlow and rsi > rsiLevelLong and not divergenceLong // Short Conditions shortCondition = emaFast < emaSlow and rsi < rsiLevelShort and not divergenceShort // Plot conditions plotshape(longCondition, title="Buy", location=location.belowbar, color=color.green, style=shape.labelup, text="Buy") plotshape(shortCondition, title="Sell", location=location.abovebar, color=color.red, style=shape.labeldown, text="Sell") // Execute the strategy if (longCondition) strategy.entry("Long", strategy.long, comment="entry long") if (shortCondition) strategy.entry("Short", strategy.short, comment="entry short") // Alert alertcondition(longCondition, title="Buy Signal", message="Buy signal triggered!") alertcondition(shortCondition, title="Sell Signal", message="Sell signal triggered!")