Strategi Trading Multi-Periode Berdasarkan Moving Average

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

img

Gambaran umum

Strategi ini menggabungkan tiga indikator - moving average, Bollinger Bands dan Relative Strength Index (RSI) untuk perdagangan saham multi-periode. Ini mempertimbangkan persilangan rata-rata bergerak cepat dan lambat, RSI di bawah 50 dan harga dekat di bawah BB band tengah saat membeli.

Logika Strategi

Strategi ini terutama memanfaatkan tiga indikator untuk pengambilan keputusan. Pertama, indikator MACD terdiri dari rata-rata bergerak cepat dan lambat. Crossover dari garis cepat di atas garis lambat menghasilkan sinyal beli. Kedua, Bollinger Bands dengan band tengah, atas dan bawah. Harga di dekat band bawah menyajikan peluang membeli di swing low, sementara harga di dekat band atas menyajikan peluang jual di swing high. Akhirnya, RSI mencerminkan kecepatan dan tingkat perubahan tindakan harga dan mengidentifikasi potensi swing high dan swing low.

Secara khusus, strategi pertama membutuhkan rata-rata bergerak cepat melintasi di atas rata-rata bergerak lambat, yang menunjukkan penguatan tren naik yang menunjukkan pembelian. Ini juga membutuhkan RSI di bawah 50, yang menunjukkan harga mungkin berada di tingkat oversold dan menyajikan peluang pembelian. Selain itu, ini membutuhkan harga dekat di bawah BB middle band, yang menunjukkan harga swing rendah dan titik masuk yang baik.

Untuk profit taking dan stop loss, ketika RSI naik di atas 70, itu menunjukkan harga mungkin berada di tingkat overbought dan momentum uptrend sedang berkurang, cocok untuk profit taking.

Keuntungan

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

  1. Rata-rata bergerak menentukan momentum tren kenaikan harga. BB band tengah menentukan swing low untuk masuk. RSI menghindari membeli pada puncak harga. Ketiga bersama-sama memberikan peluang pembelian yang relatif ideal selama tren kenaikan harga.

  2. Kombinasi RSI dan BB band atas menangkap swing harga tinggi dengan baik untuk mengambil keuntungan untuk menghindari kondisi overbought.

  3. Penilaian multi-periode memungkinkan menangkap peluang perdagangan di seluruh kerangka waktu untuk memaksimalkan keuntungan.

  4. Aturan perdagangan yang logis membuat strategi mudah dimengerti untuk investasi jangka menengah hingga panjang.

Risiko

Meskipun menggabungkan indikator untuk meningkatkan keakuratan keputusan, ada risiko utama:

  1. Parameter pengaturan risiko. parameter untuk indikator perlu penyesuaian empiris. penyesuaian yang tidak memadai dampak kinerja strategi.

  2. Lebih cocok untuk pasar bull. Di pasar bear, kecepatan penurunan harga dapat membuat stop loss tidak efektif.

  3. Risiko saham tunggal tetap ada meskipun portofolio.

  4. Frekuensi perdagangan yang berpotensi berlebihan. Pengaturan parameter yang optimal dapat mengakibatkan perdagangan yang sering, menimbulkan biaya transaksi dan pajak yang lebih tinggi.

Solusi:

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

  2. Tune periode rata-rata bergerak ke frekuensi masuk moderat dan meminimalkan kerugian.

  3. Mendiversifikasi investasi di lebih banyak aset untuk meminimalkan risiko saham tunggal.

  4. Meredakan kriteria pembelian dan mengambil keuntungan secara moderat untuk mengurangi frekuensi perdagangan.

Peluang Peningkatan

Masih ada ruang tambahan untuk optimasi:

  1. Tambahkan lebih banyak filter seperti volume untuk memastikan volume yang diperkuat pada pembelian, meningkatkan akurasi keputusan.

  2. Mengintegrasikan modul ukuran posisi untuk ukuran posisi secara dinamis berdasarkan kondisi pasar.

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

  4. Memperkenalkan lebih banyak kerangka waktu untuk putusan untuk memperluas penerapan.

Kesimpulan

Secara keseluruhan strategi ini memiliki logika yang jelas, mudah dimengerti, sinergi indikator untuk mengurangi sinyal palsu. Penyesuaian parameter lebih lanjut dan penambahan indikator dapat terus meningkatkan ketahanan dan ketepatan keputusan. Ini cocok untuk investasi jangka menengah hingga panjang dan perdagangan kuantitatif. Meskipun demikian, tidak ada strategi yang menghilangkan risiko pasar sepenuhnya. Ukuran posisi yang tepat dan tingkat stop loss selalu 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 banyak