
Strategi ini adalah strategi gabungan yang menggunakan RSI, MACD dan purata bergerak. Ia menggabungkan isyarat overbought dan oversold RSI, sensitiviti MACD dan kesan indikator purata bergerak dalam menentukan masa masuk ke pasaran.
Strategi ini memberi tumpuan kepada empat faktor utama dalam membuat keputusan:
Strategi ini menamatkan kerugian apabila dua syarat berikut dipenuhi:
Dengan cara ini, strategi ini dapat menghentikan kerugian semasa keuntungan ditarik balik dan mengelakkan kerugian yang lebih besar.
Kelebihan utama strategi ini ialah ia menggunakan kombinasi indikator yang menggunakan kelebihan masing-masing, iaitu:
Strategi ini mempunyai dua risiko utama:
Risiko penarikan balik yang lebih besar. Risiko terbesar untuk strategi trend seperti purata bergerak adalah penarikan balik yang lebih besar yang disebabkan oleh perubahan pasaran. Penarikan balik boleh dikawal secara aktif dengan mengurangkan saiz kedudukan dan tetapan hentikan kerugian.
Pengoptimuman parameter adalah lebih sukar. Pengaturan parameter dan pengoptimuman strategi gabungan pelbagai indikator adalah lebih sukar. Kaedah pengoptimuman parameter seperti kaedah langkah, algoritma genetik dan lain-lain boleh digunakan untuk menentukan parameter yang optimum.
Strategi ini boleh terus dioptimumkan dalam beberapa aspek:
Menambah syarat tambahan untuk menyaring lebih jauh daripada isyarat palsu. Contohnya, menggabungkan indikator jumlah dagangan, indikator kadar turun naik dan sebagainya.
Uji perbezaan tetapan parameter untuk pelbagai jenis. Sesuaikan parameter untuk lebih banyak jenis.
Mengoptimumkan parameter purata bergerak. Uji perbezaan parameter panjang yang berbeza.
Kajian ini menggunakan purata bergerak yang beradaptasi. Ia menggunakan kombinasi parameter yang berlainan untuk beralih mengikut keadaan pasaran.
Secara keseluruhan, strategi ini adalah strategi pengesanan rata-rata bergerak dan trend trend yang tipikal. Ia menyerap kelebihan beberapa petunjuk utama seperti MACD, RSI, dan lain-lain. Ia unik dalam menentukan masa masuk ke pasaran dan menghentikan kerugian.
/*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")