Chiến lược này là một hệ thống giao dịch định lượng kết hợp Chỉ số sức mạnh tương đối (RSI) và Trung bình di chuyển (MA) để xác định xu hướng thị trường và cơ hội giao dịch. Hệ thống cũng kết hợp các bộ lọc khối lượng và biến động để tăng độ tin cậy của tín hiệu giao dịch. Khái niệm cốt lõi là xác định hướng xu hướng thông qua sự chéo chéo của các trung bình di chuyển nhanh và chậm trong khi sử dụng RSI để xác nhận đà, cuối cùng tạo thành một khung quyết định giao dịch hoàn chỉnh.
Chiến lược sử dụng một cơ chế xác nhận hai tín hiệu: 1. Lớp xác nhận xu hướng: Sử dụng chéo giữa trung bình di chuyển nhanh (FastMA) và trung bình di chuyển chậm (SlowMA) để xác định xu hướng thị trường. Khi đường nhanh vượt qua trên đường chậm, xu hướng tăng được thiết lập; khi đường nhanh vượt qua dưới đường chậm, xu hướng giảm được thiết lập. 2. Lớp xác nhận động lượng: Sử dụng chỉ số RSI như một công cụ xác nhận động lượng. Trong xu hướng tăng, chỉ số RSI nên dưới 50, cho thấy tiềm năng tăng; trong xu hướng giảm, chỉ số RSI nên trên 50, cho thấy tiềm năng giảm. 3. Bộ lọc giao dịch: Thiết lập ngưỡng tối thiểu cho khối lượng và biến động ATR để lọc ra các tín hiệu không đủ thanh khoản hoặc biến động.
Chiến lược này thiết lập một hệ thống giao dịch toàn diện thông qua việc sử dụng tích hợp các chỉ số xu hướng và động lực. Sức mạnh của hệ thống nằm trong cơ chế xác nhận tín hiệu đa lớp và khung quản lý rủi ro toàn diện. Tuy nhiên, việc áp dụng thực tế đòi hỏi sự chú ý đến tác động của điều kiện thị trường đối với hiệu suất chiến lược và tối ưu hóa tham số dựa trên hoàn cảnh thực tế. Thông qua cải tiến và tối ưu hóa liên tục, chiến lược này có tiềm năng duy trì hiệu suất ổn định trong các môi trường thị trường khác nhau.
/*backtest start: 2024-01-17 00:00:00 end: 2025-01-16 00:00:00 period: 1d basePeriod: 1d exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT","balance":49999}] */ // © Boba2601 //@version=5 strategy("RSI-MA Synergy", overlay=true, margin_long=100, margin_short=100) // === Налаштування індикаторів === length_rsi = input.int(14, title="RSI Period", group="Індикатори") fastMALength = input.int(9, title="Fast MA Length", group="Індикатори") slowMALength = input.int(21, title="Slow MA Length", group="Індикатори") // === Налаштування стоп-лосу і тейк-профіту === useStopLossTakeProfit = input.bool(true, title="Використовувати стоп-лос і тейк-профіт", group="Стоп-лос і Тейк-профіт") stopLossPercent = input.float(2.0, title="Стоп-лос (%)", minval=0.1, step=0.1, group="Стоп-лос і Тейк-профіт") takeProfitPercent = input.float(4.0, title="Тейк-профіт (%)", minval=0.1, step=0.1, group="Стоп-лос і Тейк-профіт") // === Налаштування об'єму та волатильності === useVolumeFilter = input.bool(false, title="Використовувати фільтр об'єму", group="Об'єм та Волатильність") volumeThreshold = input.int(50000, title="Мінімальний об'єм", group="Об'єм та Волатильність") useVolatilityFilter = input.bool(false, title="Використовувати фільтр волатильності", group="Об'єм та Волатильність") atrLength = input.int(14, title="Період ATR для волатильності", group="Об'єм та Волатильність") volatilityThreshold = input.float(1.5, title="Мінімальна волатильність (ATR)", step=0.1, group="Об'єм та Волатильність") // === Розрахунок індикаторів === rsiValue = ta.rsi(close, length_rsi) fastMA = ta.sma(close, fastMALength) slowMA = ta.sma(close, slowMALength) // === Розрахунок об'єму та волатильності === averageVolume = ta.sma(volume, 20) atrValue = ta.atr(atrLength) // === Умови входу в позицію === longCondition = ta.crossover(fastMA, slowMA) and rsiValue < 50 if useVolumeFilter longCondition := longCondition and volume > volumeThreshold if useVolatilityFilter longCondition := longCondition and atrValue > volatilityThreshold shortCondition = ta.crossunder(fastMA, slowMA) and rsiValue > 50 if useVolumeFilter shortCondition := shortCondition and volume > volumeThreshold if useVolatilityFilter shortCondition := shortCondition and atrValue > volatilityThreshold // === Логіка входу та виходу з позиції === if (longCondition) strategy.entry("Long", strategy.long) if (useStopLossTakeProfit) stopLossPrice = close * (1 - stopLossPercent / 100) takeProfitPrice = close * (1 + takeProfitPercent / 100) strategy.exit("Exit Long", "Long", stop = stopLossPrice, limit = takeProfitPrice) if (shortCondition) strategy.entry("Short", strategy.short) if (useStopLossTakeProfit) stopLossPrice = close * (1 + stopLossPercent / 100) takeProfitPrice = close * (1 - takeProfitPercent / 100) strategy.exit("Exit Short", "Short", stop = stopLossPrice, limit = takeProfitPrice) // === Закриття позицій за зворотнім сигналом === if (strategy.position_size > 0 and (ta.crossunder(fastMA, slowMA) or rsiValue > 50)) strategy.close("Long", comment="Закрито по сигналу") if (strategy.position_size < 0 and (ta.crossover(fastMA, slowMA) or rsiValue < 50)) strategy.close("Short", comment="Закрито по сигналу")