Ini adalah strategi gabungan yang menggunakan RSI, MACD dan Purata Bergerak. Ia menggabungkan isyarat overbought / oversold dari RSI, kepekaan MACD dan kesan penunjuk purata bergerak ketika menentukan titik masuk.
Strategi ini terutamanya menilai empat syarat berikut untuk memutuskan kemasukan panjang:
Apabila kedua-dua syarat keluar berikut dipenuhi, strategi akan menutup kedudukan untuk menghentikan kerugian:
Oleh itu strategi tepat pada masanya menghentikan kerugian dan mengelakkan kerugian besar apabila mengambil keuntungan atau retracement.
Kelebihan terbesar strategi ini terletak pada penggunaan gabungan penunjuk, memberikan sepenuhnya kelebihan setiap penunjuk:
Penggunaan RSI mengelakkan kerugian bayaran urus niaga yang disebabkan oleh pembukaan kedudukan berulang kali di pasaran terhad julat.
Sensitiviti penunjuk histogram MACD memastikan penangkapan tepat pada masanya titik perubahan.
Purata bergerak menapis bunyi pasaran jangka pendek dan memberikan permainan penuh kepada kesan penunjuk.
Risiko utama strategi ini termasuk:
Risiko retracement yang tinggi. Risiko terbesar dari purata bergerak seperti strategi trend berikut adalah pullback besar yang disebabkan oleh pembalikan trend. Ini boleh dikawal secara aktif dengan menggunakan saiz kedudukan, stop loss dan lain-lain.
Kesukaran dalam pengoptimuman parameter. Strategi gabungan pelbagai penunjuk mempunyai kesukaran yang lebih tinggi dalam penetapan parameter dan pengoptimuman. Kaedah seperti berjalan ke hadapan, algoritma genetik boleh diterima pakai untuk parameter yang dioptimumkan.
Strategi ini boleh dioptimumkan lagi dalam aspek berikut:
Menambah penapis tambahan untuk mengelakkan isyarat palsu, contohnya menggabungkan dengan jumlah, penunjuk turun naik dan lain-lain.
Perbezaan parameter ujian yang sesuai dengan lebih banyak produk. Sesuaikan parameter untuk menyesuaikan lebih banyak jenis.
Mengoptimumkan tetapan parameter purata bergerak. Uji perbezaan pelbagai parameter panjang.
Penyelidikan purata bergerak adaptif, menukar set parameter yang berbeza berdasarkan rejimen pasaran.
Kesimpulannya, strategi ini adalah versi yang dioptimumkan khas dari purata bergerak dan strategi trend berikut. Ia menyerap kekuatan penunjuk arus perdana seperti MACD dan RSI dalam aspek kemasukan masa dan menghentikan kerugian. Langkah seterusnya boleh meningkatkan dari perspektif seperti pengoptimuman parameter dan kawalan risiko untuk menjadikan strategi lebih kukuh dan dapat disesuaikan dengan lebih banyak produk, sehingga menghasilkan kestabilan yang lebih tinggi.
/*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")