Ini adalah strategi kombinasi yang menggunakan RSI, MACD dan Moving Averages. Ini menggabungkan sinyal overbought / oversold dari RSI, sensitivitas MACD dan efek indikator rata-rata bergerak saat menentukan titik masuk.
Strategi ini terutama menilai empat kondisi berikut untuk memutuskan masuk panjang:
Ketika dua kondisi keluar berikut terpenuhi, strategi akan menutup posisi untuk menghentikan kerugian:
Dengan demikian strategi tepat waktu menghentikan kerugian dan menghindari kerugian besar ketika mengambil keuntungan atau retracement.
Keuntungan terbesar dari strategi ini terletak pada kombinasi penggunaan indikator, memberikan manfaat penuh dari masing-masing indikator:
Penggunaan RSI menghindari kerugian biaya transaksi yang disebabkan oleh berulang kali membuka posisi di pasar yang terikat rentang.
Sensitivitas indikator histogram MACD memastikan penangkapan tepat waktu titik infleksi.
Rata-rata bergerak menyaring kebisingan pasar jangka pendek dan memberikan permainan penuh untuk efek indikator.
Risiko utama dari strategi ini meliputi:
Risiko retracement yang tinggi. Risiko terbesar dari moving average seperti strategi trend following adalah pullback besar yang disebabkan oleh pembalikan trend. Hal ini dapat dikendalikan secara aktif melalui ukuran posisi, stop loss dll.
Kesulitan dalam optimasi parameter. Strategi gabungan multi-indikator memiliki kesulitan yang lebih tinggi dalam pengaturan parameter dan optimasi. Metode seperti berjalan maju, algoritma genetik dapat diadopsi untuk parameter yang dioptimalkan.
Strategi ini dapat dioptimalkan lebih lanjut dalam aspek berikut:
Meningkatkan filter tambahan untuk menghindari sinyal palsu, misalnya menggabungkan dengan indikator volume, volatilitas dll.
Perbedaan parameter uji yang cocok dengan lebih banyak produk.
Mengoptimalkan pengaturan parameter rata-rata bergerak. Uji perbedaan dari berbagai parameter panjang.
Cari rata-rata bergerak adaptif, ganti set parameter yang berbeda berdasarkan rezim pasar.
Sebagai kesimpulan, strategi ini adalah versi yang dioptimalkan dari moving average dan trend following strategy. Strategi ini menyerap kekuatan dari indikator arus utama seperti MACD dan RSI dalam aspek waktu masuk dan stop loss. Langkah selanjutnya bisa meningkatkan dari perspektif seperti optimasi parameter dan pengendalian risiko untuk membuat strategi lebih kuat dan dapat beradaptasi dengan lebih banyak produk, sehingga menghasilkan stabilitas 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")