Strategi ini menggabungkan dua penunjuk teknikal: Indeks Kekuatan Relatif (RSI) dan Divergensi Convergensi Purata Bergerak (MACD). Ia menggunakan RSI untuk menentukan keadaan overbought dan oversold, dan MACD untuk mengenal pasti arah trend, membentuk strategi panjang-pendek yang lengkap. Apabila RSI overbought, isyarat jual dihasilkan, dan kedudukan ditutup apabila garis pantas MACD melintasi di atas garis perlahan. Apabila RSI oversold, isyarat beli dihasilkan, dan kedudukan ditutup apabila garis pantas MACD melintasi di bawah garis perlahan. Titik stop-loss ditetapkan dengan mengira separuh daripada perubahan harga purata aset.
Dengan menggunakan RSI untuk menentukan keadaan overbought dan oversold, strategi memasuki pada permulaan pembalikan. Dengan menggunakan MACD untuk mengenal pasti arah trend, ia menutup kedudukan pada permulaan trend, dengan berkesan menangkap trend. Kedua-dua penunjuk saling melengkapi, membentuk sistem perdagangan yang lengkap.
Strategi ini menggunakan RSI untuk menentukan keadaan overbought dan oversold dan MACD untuk mengenal pasti arah trend, membentuk sistem perdagangan panjang-pendek yang lengkap. Logik strategi jelas, dan kelebihan jelas, sementara terdapat juga risiko tertentu. Melalui pengoptimuman parameter, menambah keadaan penapisan, pengurusan kedudukan, dan menggabungkan dengan strategi lain, prestasi strategi ini dapat ditingkatkan lagi, menjadikannya strategi perdagangan yang kukuh.
/*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")