Strategi ini menggabungkan penunjuk momentum MACD dan penunjuk overbought dan oversold RSI untuk mengesahkan sama ada RSI telah menyelesaikan pembalikan touch bottom / touch top yang sesuai ketika MACD berlaku. Ini menghasilkan isyarat perdagangan yang lebih dipercayai.
Hitung DIFF, DEA, dan tiang MACD dalam indikator MACD. Apabila DIFF di atas melintasi DEA, ia menghasilkan isyarat garpu emas, dan apabila ia melintasi, ia menghasilkan isyarat garpu mati.
Hitung RSI untuk menentukan sama ada titik bawah melonjak atau titik puncak kembali. Dan tetapkan tetingkap melihat kembali untuk menentukan sama ada titik bawah atau puncak telah berlaku pada peringkat terkini.
Apabila MACD bergolak, jika RSI telah selesai bertolak belakang di dalam tetingkap melihat kembali, maka akan dihasilkan isyarat melihat lebih. Apabila MACD bergolak mati, jika RSI telah selesai bertolak belakang, maka akan muncul isyarat melihat lebih.
Tetapkan titik berhenti untuk mengawal risiko selepas masuk.
MACD menilai trend bertukar dan sensitif. RSI menilai keadaan overbought dan oversold.
Pada masa yang sama mengesahkan token MACD dan RSI, boleh menapis isyarat palsu.
Lihat ke belakang untuk menilai kebolehpercayaan isyarat tambahan.
Tetapan stop loss membantu dalam pengurusan risiko.
MACD dan RSI sama-sama ketinggalan dan mungkin terlepas titik kemasukan terbaik.
Pada masa yang sama menunggu dua isyarat penunjuk adalah kurang berkemungkinan, isyarat kurang.
Tidak mengambil kira arah trend besar-besaran, mudah untuk ditiru.
Tetapan stop-loss yang tidak betul mungkin terlalu ringan atau ketat.
Penyelesaian:
Menyesuaikan parameter MACD dan RSI untuk mengurangkan kebarangkalian ketinggalan.
Perluasan julat berkesan untuk memberi lebih banyak isyarat.
Menambah penapis trend untuk mengelakkan pergerakan berlawanan arah.
Uji seting parameter hentian yang berbeza untuk mencari yang terbaik.
Uji keserasian lain seperti SMA.
Tambah Stop Loss Bergerak, Buat Stop Loss Lebih Fleksibel
Menambah trend indicator untuk menilai kelayakan masuk.
Memperkenalkan pembelajaran mesin untuk meramalkan pergerakan indikator.
Pilihan masa kemasukan yang dioptimumkan dengan lebih banyak faktor.
Strategi ini menggunakan gabungan kedua-dua penunjuk MACD dan RSI, masuk ke pasaran setelah memilih isyarat pembalikan yang boleh dipercayai. Strategi ini jelas, parameter menyesuaikan fleksibiliti, boleh diperluaskan dari segi pilihan penunjuk, penghakiman trend, dan cara menghentikan kerugian, untuk mendapatkan lebih banyak peluang perdagangan dengan mengekalkan asas yang stabil.
/*backtest
start: 2023-08-24 00:00:00
end: 2023-09-23 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
//based on Range Strat - MACD/RSI
// strategy("MACD/RSI - edited",
// overlay=true,
// default_qty_type=strategy.percent_of_equity,
// default_qty_value=10, precision=2, initial_capital=100000,
// pyramiding=2,
// commission_value=0.05)
//Backtest date range
StartDate = input(timestamp("13 Jun 2022"), title="Start Date")
EndDate = input(timestamp("13 Jun 2024"), title="Start Date")
inDateRange = true
// RSI Input Settings
rsisrc = input(title="RSI Source", defval=close, group="RSI Settings")
length = input(title="Length", defval=14, group="RSI Settings" )
overSold = input(title="Over Sold Threshold", defval=30, group="RSI Settings" )
overBought = input(title="Over Bought Threshold", defval=70, group="RSI Settings" )
rsi_lookback = input(title="RSI cross lookback period", defval=7, group="RSI Settings")
// Calculating RSI
vrsi = ta.rsi(rsisrc, length)
co = ta.crossover(vrsi, overSold)
cu = ta.crossunder(vrsi, overBought)
// Function looking for a happened condition during lookback period
f_somethingHappened(_cond, _lookback) =>
bool _crossed = false
for i = 1 to _lookback
if _cond[i]
_crossed := true
_crossed
coCheck = f_somethingHappened(co, rsi_lookback)
cuCheck = f_somethingHappened(cu, rsi_lookback)
// MACD Input Settings
macdsrc = input(title="MACD Source", defval=close, group="MACD Settings")
fast_length = input(title="Fast Length", defval=12, group="MACD Settings")
slow_length = input(title="Slow Length", defval=26, group="MACD Settings")
signal_length = input.int(title="Signal Smoothing", minval = 1, maxval = 50, defval = 9, group="MACD Settings")
sma_source = input.string(title="Oscillator MA Type", defval="EMA", options=["SMA", "EMA"], group="MACD Settings")
sma_signal = input.string(title="Signal Line MA Type", defval="EMA", options=["SMA", "EMA"], group="MACD Settings")
// Calculating MACD
fast_ma = sma_source == "SMA" ? ta.sma(macdsrc, fast_length) : ta.ema(macdsrc, fast_length)
slow_ma = sma_source == "SMA" ? ta.sma(macdsrc, slow_length) : ta.ema(macdsrc, slow_length)
macd = fast_ma - slow_ma
signal = sma_signal == "SMA" ? ta.sma(macd, signal_length) : ta.ema(macd, signal_length)
delta = macd - signal
MACDcrossover = ta.crossover(delta, 0)
MACDcrossunder = ta.crossunder(delta, 0)
// Stop Loss Input Settings
longLossPerc = input(title="Long Stop Loss (%)", defval=15, group="Stop Loss Settings") * 0.01
shortLossPerc = input(title="Short Stop Loss (%)", defval=15, group="Stop Loss Settings") * 0.01
// Calculating Stop Loss
longStopPrice = strategy.position_avg_price * (1 - longLossPerc)
shortStopPrice = strategy.position_avg_price * (1 + shortLossPerc)
// Strategy Entry
if (not na(vrsi))
if (inDateRange and MACDcrossover and coCheck)
strategy.entry("LONG", strategy.long, comment="LONG")
if (inDateRange and MACDcrossunder and cuCheck)
strategy.entry("SHORT", strategy.short, comment="SHORT")
// Submit exit orders based on calculated stop loss price
if (strategy.position_size > 0)
strategy.exit(id="LONG STOP", stop=longStopPrice)
if (strategy.position_size < 0)
strategy.exit(id="SHORT STOP", stop=shortStopPrice)