Chiến lược này kết hợp hai chỉ số kỹ thuật: Chỉ số sức mạnh tương đối (RSI) và Phân biệt hội tụ trung bình chuyển động (MACD). Nó sử dụng RSI để xác định điều kiện mua quá mức và bán quá mức, và MACD để xác định hướng xu hướng, tạo thành một chiến lược dài ngắn hoàn chỉnh. Khi RSI bị mua quá mức, một tín hiệu bán được tạo ra và vị trí được đóng khi đường nhanh MACD vượt qua đường chậm. Khi RSI bị bán quá mức, một tín hiệu mua được tạo ra và vị trí được đóng khi đường nhanh MACD vượt qua đường chậm. Điểm dừng lỗ được thiết lập bằng cách tính một nửa sự thay đổi giá trung bình của tài sản.
Bằng cách sử dụng chỉ số RSI để xác định các điều kiện mua quá mức và bán quá mức, chiến lược vào lúc bắt đầu đảo ngược. Bằng cách sử dụng MACD để xác định hướng xu hướng, nó đóng vị trí vào lúc bắt đầu xu hướng, có hiệu quả nắm bắt xu hướng. Hai chỉ số này bổ sung cho nhau, tạo thành một hệ thống giao dịch hoàn chỉnh.
Chiến lược này sử dụng chỉ số RSI để xác định các điều kiện mua quá nhiều và bán quá nhiều và MACD để xác định hướng xu hướng, tạo thành một hệ thống giao dịch dài ngắn hoàn chỉnh. Logic chiến lược rõ ràng và lợi thế là hiển nhiên, trong khi cũng có một số rủi ro. Thông qua tối ưu hóa tham số, thêm điều kiện lọc, quản lý vị trí và kết hợp với các chiến lược khác, hiệu suất của chiến lược này có thể được cải thiện hơn nữa, làm cho nó trở thành một chiến lược giao dịch mạnh mẽ.
/*backtest start: 2024-04-01 00:00:00 end: 2024-04-30 23:59:59 period: 2h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy(title="RSI & MACD Strategy", shorttitle="RSI & MACD", overlay=true) // Définition des entrées rsi_length = 14 rsi_overbought = 70 rsi_oversold = 30 macd_fast_length = 12 macd_slow_length = 26 macd_signal_length = 9 // Fonction pour calculer le RSI calculate_rsi(source, length) => price_change = ta.change(source) up = ta.rma(price_change > 0 ? price_change : 0, length) down = ta.rma(price_change < 0 ? -price_change : 0, length) rs = up / down rsi = 100 - (100 / (1 + rs)) rsi // Fonction pour calculer le MACD calculate_macd(source, fast_length, slow_length, signal_length) => fast_ma = ta.ema(source, fast_length) slow_ma = ta.ema(source, slow_length) macd = fast_ma - slow_ma signal = ta.ema(macd, signal_length) hist = macd - signal [macd, signal, hist] // Calcul des indicateurs rsi_value = calculate_rsi(close, rsi_length) [macd_line, signal_line, _] = calculate_macd(close, macd_fast_length, macd_slow_length, macd_signal_length) // Conditions d'entrée et de sortie // Entrée en vente : RSI passe de >= 70 à < 70 sell_entry_condition = ta.crossunder(rsi_value, rsi_overbought) // Sortie en vente : MACD fast MA croise au-dessus de slow MA sell_exit_condition = ta.crossover(macd_line, signal_line) // Entrée en achat : RSI passe de <= 30 à > 30 buy_entry_condition = ta.crossover(rsi_value, rsi_oversold) // Sortie en achat : MACD fast MA croise en-dessous de slow MA buy_exit_condition = ta.crossunder(macd_line, signal_line) // Affichage des signaux sur le graphique plotshape(series=sell_entry_condition, title="Sell Entry", location=location.belowbar, color=color.red, style=shape.triangleup, size=size.small) plotshape(series=sell_exit_condition, title="Sell Exit", location=location.abovebar, color=color.green, style=shape.triangledown, size=size.small) plotshape(series=buy_entry_condition, title="Buy Entry", location=location.abovebar, color=color.green, style=shape.triangleup, size=size.small) plotshape(series=buy_exit_condition, title="Buy Exit", location=location.belowbar, color=color.red, style=shape.triangledown, size=size.small) // Entrées et sorties de la stratégie if (sell_entry_condition) strategy.entry("Short", strategy.short) if (sell_exit_condition) strategy.close("Short") if (buy_entry_condition) strategy.entry("Long", strategy.long) if (buy_exit_condition) strategy.close("Long")