Đây là một chiến lược kết hợp sử dụng chỉ số RSI, MACD và Moving Averages. Nó kết hợp các tín hiệu mua quá mức / bán quá mức từ chỉ số RSI, độ nhạy của MACD và hiệu ứng chỉ số của chỉ số trung bình động khi xác định các điểm nhập cảnh.
Chiến lược chủ yếu đánh giá bốn điều kiện sau đây để quyết định tham gia dài hạn:
Khi đáp ứng hai điều kiện thoát sau đây, chiến lược sẽ đóng các vị trí để dừng lỗ:
Do đó, chiến lược kịp thời ngăn chặn tổn thất và tránh tổn thất lớn khi lấy lợi nhuận hoặc khôi phục.
Ưu điểm lớn nhất của chiến lược này nằm ở việc sử dụng kết hợp các chỉ số, cho phép tận dụng đầy đủ các ưu điểm của mỗi chỉ số:
Việc áp dụng chỉ số RSI tránh mất phí giao dịch do mở nhiều lần các vị trí trên các thị trường giới hạn phạm vi.
Độ nhạy của chỉ số biểu đồ MACD đảm bảo nắm bắt kịp thời các điểm uốn cong.
Mức trung bình động lọc tiếng ồn thị trường ngắn hạn và tạo ra hiệu ứng chỉ số đầy đủ.
Những rủi ro chính của chiến lược này bao gồm:
Rủi ro khôi phục cao. Rủi ro lớn nhất của trung bình động như các chiến lược theo xu hướng là sự rút lui lớn do đảo ngược xu hướng. Điều này có thể được kiểm soát tích cực bằng cách định kích thước vị trí, dừng lỗ v.v.
Khó khăn trong tối ưu hóa tham số. Các chiến lược kết hợp nhiều chỉ số có khó khăn cao hơn trong việc thiết lập và tối ưu hóa tham số. Các phương pháp như đi trước, thuật toán di truyền có thể được áp dụng cho các tham số tối ưu hóa.
Chiến lược có thể được tối ưu hóa thêm trong các khía cạnh sau:
Tăng các bộ lọc bổ sung để tránh thêm các tín hiệu sai, ví dụ: kết hợp với các chỉ số khối lượng, biến động vv.
Phân biệt tham số thử nghiệm phù hợp với nhiều sản phẩm hơn. Điều chỉnh các tham số để thích nghi với nhiều giống hơn.
Tối ưu hóa các thiết lập tham số trung bình động. Kiểm tra sự khác biệt của các tham số chiều dài khác nhau.
Nghiên cứu các đường trung bình chuyển động thích nghi, chuyển đổi các bộ tham số khác nhau dựa trên chế độ thị trường.
Tóm lại, chiến lược này là một phiên bản tối ưu hóa điển hình của chiến lược trung bình động và theo xu hướng. Nó hấp thụ điểm mạnh của các chỉ số chính như MACD và RSI trong các khía cạnh của thời gian nhập và dừng lỗ.
/*backtest start: 2022-12-29 00:00:00 end: 2024-01-04 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("Improved RSI MACD Strategy with Moving Averages", overlay=true) // Inputs src = input(close, title="RSI Source") // RSI Settings lengthRSI = input.int(14, minval=1) // Stop Loss Settings stopLossPct = input.float(0.09, title="Stop Loss Percentage") takeProfitPct = input.float(0.15, title="Take Profit Percentage") // MACD Settings fastlen = input(12) slowlen = input(26) siglen = input(9) // Strategy Settings longEntry = input(0, title="Long Entry Level") exitLevel = input(0, title="Exit Level") // EMA Settings emaShortLength = input(8, title="Short EMA Length") emaLongLength = input(21, title="Long EMA Length") atrMultiplier = input.float(2, title="atrMultiplier") atrLength = input.int(20, title="atrLength") // Indicators rsi1 = ta.rsi(src, lengthRSI) [macd, signal, hist] = ta.macd(src, fastlen, slowlen, siglen) // Calculate EMAs emaShort = ta.ema(src, emaShortLength) emaLong = ta.ema(src, emaLongLength) // Calculate ATR atr = ta.atr(atrLength) // Variables var bool canEnterLong = na // Strategy conditions longCondition = hist > longEntry and rsi1 > 50 and emaShort > emaLong and close > emaLong + atrMultiplier * atr // Entries and Exits if hist < exitLevel and emaShort < emaLong canEnterLong := true strategy.close("Long") // Store last entry price var lastEntryPrice = float(na) var lastEntryPrice2 = float(na) if longCondition strategy.entry("Long", strategy.long) canEnterLong := false lastEntryPrice := close if lastEntryPrice < close lastEntryPrice := close // Calculate Stop Loss and Take Profit Levels based on last entry price stopLossLevel = lastEntryPrice * (1 - stopLossPct) // Check for stop loss and take profit levels and close position if triggered if (strategy.position_size > 0) last_buy = strategy.opentrades[0] if (close < stopLossLevel) strategy.close("Long", comment="Stop Loss Triggered") if (close * (1 - takeProfitPct) > strategy.opentrades.entry_price(strategy.opentrades - 1) ) strategy.close("Long", comment="Take Profit Triggered")