Chiến lược này là một hệ thống giao dịch tổng hợp kết hợp chỉ số động lực RSI với chỉ số xu hướng EMA. Hoạt động trên cả khung thời gian 1 phút và 5 phút, nó đưa ra quyết định giao dịch dựa trên tín hiệu mua quá mức / bán quá mức RSI và xác định xu hướng EMA ba lần. Chiến lược kết hợp cả hai đặc điểm theo xu hướng và đảo ngược trung bình, cho phép nó nắm bắt các cơ hội giao dịch trong môi trường thị trường khác nhau.
Chiến lược này sử dụng EMA ba ngày 21/50/200 làm điểm chuẩn đánh giá xu hướng, kết hợp với chỉ số RSI sửa đổi (được tính bằng phương pháp Chebyshev) để xác định điều kiện mua quá mức / bán quá mức trên thị trường. Trong khung thời gian 1 phút, nó bắt đầu các vị trí ngắn khi RSI vượt quá 94 và đóng khi giảm xuống dưới 4, với các điểm dừng phá vỡ được thiết lập khi RSI trở lại 50. Trong khung thời gian 5 phút, nó bắt đầu các vị trí dài khi giá phục hồi sau khi giảm xuống dưới EMA 200 ngày, đóng các vị trí khi RSI bị mua quá mức hoặc phá vỡ dưới đường trung bình.
Chiến lược tăng cường sự ổn định và độ tin cậy giao dịch thông qua sự kết hợp của nhiều chỉ số kỹ thuật và phân tích nhiều khung thời gian. Mặc dù có một số rủi ro, chúng có thể được kiểm soát hiệu quả thông qua quản lý vị trí và cơ chế dừng lỗ thích hợp. Chiến lược có tiềm năng tối ưu hóa đáng kể và hiệu suất của nó có thể được cải thiện hơn nữa bằng cách giới thiệu các chỉ số kỹ thuật bổ sung và tối ưu hóa các tham số.
/*backtest start: 2023-11-12 00:00:00 end: 2024-07-10 00:00:00 period: 1d basePeriod: 1d exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("Combined RSI Primed and 3 EMA Strategy", overlay=true) // Input for EMA lengths emaLength1 = input(21, title="EMA Length 1") emaLength2 = input(50, title="EMA Length 2") emaLength3 = input(200, title="EMA Length 3") // Input for RSI settings rsiLength = input(14, title="RSI Length") rsiOverbought = input(94, title="RSI Overbought Level") rsiNeutral = input(50, title="RSI Neutral Level") rsiOversold = input(4, title="RSI Oversold Level") // Calculate EMAs ema1 = ta.ema(close, emaLength1) ema2 = ta.ema(close, emaLength2) ema3 = ta.ema(close, emaLength3) // Calculate RSI using Chebyshev method from RSI Primed rsi(source) => up = math.max(ta.change(source), 0) down = -math.min(ta.change(source), 0) rs = up / down rsiValue = down == 0 ? 100 : 100 - (100 / (1 + rs)) rsiValue rsiValue = rsi(close) // Plot EMAs plot(ema1, color=color.red, title="EMA 21") plot(ema2, color=color.white, title="EMA 50") plot(ema3, color=color.blue, title="EMA 200") // Plot RSI for visual reference hline(rsiOverbought, "Overbought", color=color.red) hline(rsiNeutral, "Neutral", color=color.gray) hline(rsiOversold, "Oversold", color=color.green) plot(rsiValue, color=color.blue, title="RSI") // Trading logic with position management var bool inPositionShort = false var bool inPositionLong = false // Trading logic for 1-minute timeframe if (rsiValue > rsiOverbought and not inPositionShort) strategy.entry("Sell", strategy.short) inPositionShort := true if (rsiValue < rsiOversold and inPositionShort) strategy.close("Sell") inPositionShort := false if (ta.crossover(rsiValue, rsiNeutral) and inPositionShort) strategy.exit("Break Even", "Sell", stop=close) // Trading logic for 5-minute timeframe var float lastBearishClose = na if (close < ema3 and close[1] >= ema3) // Check if the current close is below EMA200 lastBearishClose := close if (not na(lastBearishClose) and close > lastBearishClose and not inPositionLong) strategy.entry("Buy", strategy.long) inPositionLong := true if (rsiValue > rsiOverbought and inPositionLong) strategy.close("Buy") inPositionLong := false if (ta.crossunder(rsiValue, rsiNeutral) and inPositionLong) strategy.exit("Break Even", "Buy", stop=close) lastBearishClose := na // Reset after trade execution