
Strategi ini menggabungkan kedua-dua petunjuk teknikal, iaitu RSI dan MACD, untuk menentukan keadaan overbought dan oversold, dan MACD untuk menentukan arah trend. Strategi ini membentuk satu set strategi multi-kamar yang lengkap. Apabila RSI mengeluarkan isyarat jual ketika overbought, MACD melintasi garis perlahan dan melonggarkan posisi ke atas. Apabila RSI mengeluarkan isyarat beli ketika overbought, MACD melintasi garis perlahan dan melonggarkan posisi ke bawah.
Dengan menggunakan RSI untuk menilai keadaan overbought dan oversold, campur tangan pada awal pembalikan pasaran; menggunakan MACD untuk menentukan arah trend, pada awal trend, posisi rata, dapat memahami trend dengan lebih baik. Kedua-dua penunjuk saling melengkapi, membentuk sistem perdagangan yang lengkap.
Strategi ini membentuk satu sistem perdagangan pelbagai ruang yang lengkap dengan menilai keadaan overbought dan oversold oleh RSI dan arah trend oleh MACD. Logik strategi jelas, kelebihan jelas, tetapi ada juga risiko tertentu. Dengan cara mengoptimumkan parameter, menambahkan syarat penapis, pengurusan kedudukan, dan menggabungkan dengan strategi lain, anda dapat meningkatkan lagi prestasi strategi ini, menjadikannya strategi perdagangan yang mantap.
/*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")