Strategi ini menggabungkan tiga penunjuk - purata bergerak, Bollinger Bands dan Indeks Kekuatan Relatif (RSI) untuk perdagangan saham pelbagai tempoh. Ia mempertimbangkan persilangan purata bergerak pantas dan perlahan, RSI di bawah 50 dan harga dekat di bawah jalur tengah BB semasa membeli. Ia menganggap RSI di atas 70 dan harga dekat di atas jalur atas BB semasa menjual.
Strategi ini terutamanya menggunakan tiga penunjuk untuk membuat keputusan. Pertama, penunjuk MACD terdiri daripada purata bergerak cepat dan perlahan. Persalinan garis cepat di atas garis perlahan menghasilkan isyarat beli. Kedua, Bollinger Bands dengan jalur tengah, atas dan bawah. Harga berhampiran jalur bawah menunjukkan peluang membeli dalam swing low, sementara harga berhampiran jalur atas menunjukkan peluang menjual pada swing high. Akhirnya, RSI mencerminkan kelajuan dan kadar perubahan tindakan harga dan mengenal pasti potensi swing high dan swing low.
Secara khusus, strategi pertama memerlukan purata bergerak cepat melintasi di atas purata bergerak perlahan, yang menunjukkan penguatan trend menaik yang mencadangkan pembelian. Ia juga memerlukan RSI di bawah 50, menunjukkan harga mungkin berada dalam tahap oversold dan menghadirkan peluang membeli. Di samping itu, ia memerlukan harga dekat di bawah jalur tengah BB, yang menunjukkan pergerakan harga rendah dan titik masuk yang baik.
Untuk mengambil keuntungan dan menghentikan kerugian, apabila RSI meningkat di atas 70, ia menunjukkan harga mungkin berada dalam tahap overbought dan momentum uptrend semakin berkurangan, sesuai untuk mengambil keuntungan.
Strategi ini menggabungkan kekuatan purata bergerak, Bollinger Bands dan RSI untuk menentukan titik masuk dan keluar dengan lebih tepat.
Rata-rata bergerak menentukan momentum trend kenaikan harga. BB band tengah menunjukkan swing low untuk masuk. RSI mengelakkan membeli pada puncak harga. Ketiga-tiga bersama-sama memberikan peluang pembelian yang agak ideal semasa trend kenaikan harga.
Gabungan RSI dan BB band atas menangkap harga swing tinggi dengan baik untuk mengambil keuntungan untuk mengelakkan keadaan overbought.
Penilaian pelbagai tempoh membolehkan menangkap peluang perdagangan merentasi jangka masa untuk memaksimumkan keuntungan.
Peraturan perdagangan yang logik menjadikan strategi mudah difahami untuk pelaburan jangka sederhana hingga panjang.
Walaupun menggabungkan penunjuk untuk meningkatkan ketepatan keputusan, terdapat risiko utama:
Parameter menetapkan risiko. Parameter untuk penunjuk memerlukan penyesuaian empirikal. Penyesuaian yang tidak mencukupi memberi kesan kepada prestasi strategi.
Lebih sesuai untuk pasaran lembu. Di pasaran beruang, kelajuan penurunan harga boleh membuat stop loss tidak berkesan.
Risiko saham tunggal kekal walaupun portfolio.
Frekuensi perdagangan yang berpotensi berlebihan. Tetapan parameter yang optimum boleh mengakibatkan perdagangan yang kerap, yang menimbulkan kos transaksi dan cukai yang lebih tinggi.
Penyelesaian:
Sesuaikan parameter berdasarkan backtest untuk mencapai frekuensi isyarat yang sesuai.
Tuning tempoh purata bergerak untuk frekuensi kemasukan sederhana dan meminimumkan kerugian.
Membahagikan pelaburan ke lebih banyak aset untuk meminimumkan risiko saham tunggal.
Meredakan kriteria pembelian dan mengambil keuntungan secara sederhana untuk mengurangkan kekerapan perdagangan.
Masih ada ruang tambahan untuk pengoptimuman:
Tambah lebih banyak penapis seperti jumlah untuk memastikan jumlah pembelian yang diperkuat, meningkatkan ketepatan keputusan.
Menggabungkan modul saiz kedudukan untuk saiz kedudukan secara dinamik berdasarkan keadaan pasaran.
Menggunakan algoritma pembelajaran mendalam untuk menyesuaikan parameter secara automatik melalui latihan di seluruh set data yang besar.
Memperkenalkan lebih banyak jangka masa untuk keputusan untuk memperluaskan penerapan.
Secara keseluruhan, strategi ini mempunyai logik yang jelas, mudah difahami, sinergi indikator untuk mengurangkan isyarat palsu. Penyesuaian parameter lanjut dan penambahan indikator boleh terus meningkatkan ketahanan dan ketepatan keputusan. Ia sesuai untuk pelaburan jangka menengah hingga panjang dan perdagangan kuantitatif. Walau bagaimanapun, tidak ada strategi yang menghilangkan risiko pasaran sepenuhnya. Saiz kedudukan yang sesuai dan tahap stop loss sentiasa diperlukan.
/*backtest start: 2023-11-25 00:00:00 end: 2023-12-25 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // //@author Alorse //@version=4 strategy("MACD + BB + RSI [Alorse]", shorttitle="BB + MACD + RSI [Alorse]", overlay=true, pyramiding=0, currency=currency.USD, default_qty_type=strategy.percent_of_equity, initial_capital=1000, default_qty_value=20, commission_type=strategy.commission.percent, commission_value=0.01) txtVer = "1.0.1" version = input(title="Version", type=input.string, defval=txtVer, options=[txtVer], tooltip="This is informational only, nothing will change.") src = input(title="Source", type=input.source, defval=close) // MACD fast_length = input(title="Fast Length", type=input.integer, defval=12, group="MACD") slow_length = input(title="Slow Length", type=input.integer, defval=26, group="MACD") signal_length = input(title="Signal Smoothing", type=input.integer, minval = 1, maxval = 50, defval = 9, group="MACD") sma_source = input(title="Oscillator MA Type", type=input.string, defval="EMA", options=["SMA", "EMA"], group="MACD") sma_signal = input(title="Signal Line MA Type", type=input.string, defval="EMA", options=["SMA", "EMA"], group="MACD") fast_ma = sma_source == "SMA" ? sma(src, fast_length) : ema(src, fast_length) slow_ma = sma_source == "SMA" ? sma(src, slow_length) : ema(src, slow_length) macd = fast_ma - slow_ma signal = sma_signal == "SMA" ? sma(macd, signal_length) : ema(macd, signal_length) // Bollinger Bands bbGroup = "Bollindger Bands" length = input(20, title="Length", group=bbGroup) mult = input(2.0, title="StdDev", minval=0.001, maxval=5, group=bbGroup) basis = sma(src, length) dev = mult * stdev(src, length) upper = basis + dev lower = basis - dev // RSI rsiGroup = "RSI" lenRSI = input(14, title="Length", minval=1, group=rsiGroup) // lessThan = input(50, title="Less than", minval=1 , maxval=100, group=rsiGroup) RSI = rsi(src, lenRSI) // Strategy Conditions buy = crossover(macd, signal) and RSI < 50 and close < basis sell = RSI > 70 and close > upper // Stop Loss slGroup = "Stop Loss" useSL = input(false, title="╔══════ Enable ══════╗", group=slGroup, tooltip="If you are using this strategy for Scalping or Futures market, we do not recommend using Stop Loss.") SLbased = input(title="Based on", type=input.string, defval="Percent", options=["ATR", "Percent"], group=slGroup, tooltip="ATR: Average True Range\nPercent: eg. 5%.") multiATR = input(10.0, title="ATR Mult", type=input.float, group=slGroup, inline="atr") lengthATR = input(14, title="Length", type=input.integer, group=slGroup, inline="atr") SLPercent = input(10, title="Percent", type=input.float, group=slGroup) * 0.01 longStop = 0.0 shortStop = 0.0 if SLbased == "ATR" longStop := valuewhen(buy, low, 0) - (valuewhen(buy, rma(tr(true), lengthATR), 0) * multiATR) longStopPrev = nz(longStop[1], longStop) longStop := close[1] > longStopPrev ? max(longStop, longStopPrev) : longStop shortStop := (valuewhen(sell, rma(tr(true), lengthATR), 0) * multiATR) + valuewhen(sell, high, 0) shortStopPrev = nz(shortStop[1], shortStop) shortStop := close[1] > shortStopPrev ? max(shortStop, shortStopPrev) : shortStop if SLbased == "Percent" longStop := strategy.position_avg_price * (1 - SLPercent) shortStop := strategy.position_avg_price * (1 + SLPercent) strategy.entry("Long", true, when=buy) strategy.close("Long", when=sell, comment="Exit") if useSL strategy.exit("Stop Loss", "Long", stop=longStop)