Sumber dimuat naik... memuat...

Strategi Dagangan Berbilang Tempoh Berdasarkan Purata Bergerak

Penulis:ChaoZhang, Tarikh: 2023-12-26 10:13:34
Tag:

img

Ringkasan

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.

Logika Strategi

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.

Kelebihan

Strategi ini menggabungkan kekuatan purata bergerak, Bollinger Bands dan RSI untuk menentukan titik masuk dan keluar dengan lebih tepat.

  1. 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.

  2. Gabungan RSI dan BB band atas menangkap harga swing tinggi dengan baik untuk mengambil keuntungan untuk mengelakkan keadaan overbought.

  3. Penilaian pelbagai tempoh membolehkan menangkap peluang perdagangan merentasi jangka masa untuk memaksimumkan keuntungan.

  4. Peraturan perdagangan yang logik menjadikan strategi mudah difahami untuk pelaburan jangka sederhana hingga panjang.

Risiko

Walaupun menggabungkan penunjuk untuk meningkatkan ketepatan keputusan, terdapat risiko utama:

  1. Parameter menetapkan risiko. Parameter untuk penunjuk memerlukan penyesuaian empirikal. Penyesuaian yang tidak mencukupi memberi kesan kepada prestasi strategi.

  2. Lebih sesuai untuk pasaran lembu. Di pasaran beruang, kelajuan penurunan harga boleh membuat stop loss tidak berkesan.

  3. Risiko saham tunggal kekal walaupun portfolio.

  4. Frekuensi perdagangan yang berpotensi berlebihan. Tetapan parameter yang optimum boleh mengakibatkan perdagangan yang kerap, yang menimbulkan kos transaksi dan cukai yang lebih tinggi.

Penyelesaian:

  1. Sesuaikan parameter berdasarkan backtest untuk mencapai frekuensi isyarat yang sesuai.

  2. Tuning tempoh purata bergerak untuk frekuensi kemasukan sederhana dan meminimumkan kerugian.

  3. Membahagikan pelaburan ke lebih banyak aset untuk meminimumkan risiko saham tunggal.

  4. Meredakan kriteria pembelian dan mengambil keuntungan secara sederhana untuk mengurangkan kekerapan perdagangan.

Peluang Peningkatan

Masih ada ruang tambahan untuk pengoptimuman:

  1. Tambah lebih banyak penapis seperti jumlah untuk memastikan jumlah pembelian yang diperkuat, meningkatkan ketepatan keputusan.

  2. Menggabungkan modul saiz kedudukan untuk saiz kedudukan secara dinamik berdasarkan keadaan pasaran.

  3. Menggunakan algoritma pembelajaran mendalam untuk menyesuaikan parameter secara automatik melalui latihan di seluruh set data yang besar.

  4. Memperkenalkan lebih banyak jangka masa untuk keputusan untuk memperluaskan penerapan.

Kesimpulan

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)


Lebih lanjut