Strategi Perdagangan Kuantitatif Berdasarkan Bollinger Bands dan MACD

Penulis:ChaoZhang, Tanggal: 2024-02-23 14:30
Tag:

img

Gambaran umum

Strategi ini adalah strategi perdagangan kuantitatif berdasarkan Bollinger Bands dan indikator MACD. Ini menggabungkan perdagangan breakout Bollinger Bands dan pelacakan tren MACD untuk meningkatkan kualitas sinyal perdagangan.

Prinsip Strategi

Strategi ini terutama menggunakan Bollinger Bands dan indikator MACD untuk menentukan sinyal perdagangan.

Bollinger Bands terdiri dari band tengah, band atas dan band bawah. Sinyal beli dihasilkan ketika harga menembus band bawah. Sinyal jual dihasilkan ketika harga menembus band atas. Strategi ini menggunakan prinsip breakout Bollinger Bands untuk menentukan sinyal breakout yang lebih kuat.

Indikator MACD mencerminkan hubungan antara rata-rata bergerak jangka pendek dan jangka panjang. Ini menggunakan persilangan garis selisih dan garis sinyal untuk menentukan titik masuk dan keluar. Strategi ini mengintegrasikan penggunaan indikator MACD untuk menyaring sinyal perdagangan Bollinger Bands dan menghasilkan sinyal beli yang lebih efektif ketika garis selisih melintasi di atas garis sinyal.

Secara keseluruhan, strategi ini menggabungkan pelacakan tren Bollinger Bands dan keuntungan rata-rata bergerak MACD, bertujuan untuk menangkap fluktuasi pasar yang lebih besar dalam tren yang kuat.

Keuntungan dari Strategi

  1. Menggabungkan Bollinger Bands dan indikator MACD membuat sinyal perdagangan lebih dapat diandalkan.

  2. Pelacakan tren Bollinger Bands dan crossover rata-rata bergerak MACD dapat menghasilkan sinyal masuk yang lebih kuat di pasar tren.

  3. Sinyal palsu dapat secara efektif disaring melalui penilaian indikator ganda, mengurangi risiko perdagangan.

  4. Ada ruang besar untuk optimasi parameter strategi, yang dapat disesuaikan sesuai dengan produk dan siklus yang berbeda.

Risiko dari Strategi

  1. Di pasar yang terikat rentang, sinyal perdagangan yang dihasilkan oleh Bollinger Bands dan MACD mungkin sering, membawa risiko over-trading.

  2. Tiga golden cross MACD berturut-turut pada level rendah mungkin menghadapi risiko pembalikan ke bawah.

  3. Strategi ini menggunakan beberapa indikator, membuat optimasi parameter dan pengujian strategi cukup sulit.

Untuk mengatasi risiko-risiko ini, metode seperti penyesuaian periode ditahan, pengaturan stop loss, mengoptimalkan parameter dapat digunakan untuk mengendalikannya.

Arahan untuk Optimasi Strategi

  1. Uji parameter Bollinger Bands jangka panjang untuk mengurangi frekuensi perdagangan.

  2. Mengoptimalkan parameter garis cepat dan lambat MACD untuk meningkatkan sensitivitas indikator.

  3. Tambahkan indikator lain untuk penyaringan, seperti KDJ, RSI dll, untuk meningkatkan kualitas sinyal.

  4. Atur stop dinamis untuk keluar secara otomatis dari perdagangan dan mengendalikan risiko perdagangan tunggal.

Kesimpulan

Secara teori, dengan mengintegrasikan perdagangan breakout Bollinger Bands dan penyaringan indikator MACD, strategi ini dapat menghasilkan sinyal perdagangan berkualitas tinggi. Melalui optimasi parameter dan langkah-langkah pengendalian risiko, hasil backtest yang baik dapat dicapai. Namun, tidak ada strategi yang dapat sepenuhnya menghindari kerugian. Kinerja perdagangan yang sebenarnya membutuhkan penilaian yang bijaksana.


/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Nabz-BBMACD-2022-V1.1", shorttitle="BBM-Nabz", overlay=true)


// My 1st Pine Scrpt Indicator
// Work on best on 1Hr Chart
// Open for Help/Donations.


var float lastentry=1
int result = 0
float x = 0
drawshape = false

/////////////EMA
shortest = ta.ema(close, 20)
short = ta.ema(close, 50)
longer = ta.ema(close, 100)
longest = ta.ema(close, 200)

plot(shortest, color = color.red)
plot(short, color = color.orange)
plot(longer, color = color.aqua)
plot(longest, color = color.blue)

///////////// RSI
RSIlength = input(6,title="RSI Period Length") 
RSIoverSold = 50
RSIoverBought = 50
price = close
vrsi = ta.rsi(price, RSIlength)


///////////// Bollinger Bands
BBlength = input.int(200, minval=1,title="Bollinger Period Length")
BBmult = 2 // input(2.0, minval=0.001, maxval=50,title="Bollinger Bands Standard Deviation")
BBbasis = ta.sma(price, BBlength)
BBdev = BBmult * ta.stdev(price, BBlength)
BBupper = BBbasis + BBdev
BBlower = BBbasis - BBdev
source = close
buyEntry = ta.crossover(source, BBlower)
sellEntry = ta.crossunder(source, BBupper)



////////////// MACD
fastLength = input(12)
slowlength = input(26)
MACDLength = input(9)
MACD = ta.ema(close, fastLength) - ta.ema(close, slowlength)
aMACD = ta.ema(MACD, MACDLength)
delta = MACD - aMACD


///////////// Colors
switch1=input(true, title="Enable Bar Color?")
switch2=input(true, title="Enable Background Color?")
TrendColor = RSIoverBought and (price[1] > BBupper and price < BBupper) and BBbasis < BBbasis[1] ? color.red : RSIoverSold and (price[1] < BBlower and price > BBlower) and BBbasis > BBbasis[1] ? color.green : na


///////////Strategy

bool tcu = not (ta.crossunder(price[0],shortest[0]))


if (((price[1]<BBlower[1]) and (ta.crossover(price,BBlower))))
    lastentry := low[1]
    strategy.entry("RSI_BB_L", strategy.long, comment="Buy 1st IF")
    
if (((ta.crossover(delta, 0.0) and (ta.crossover(price,BBlower)))))
    lastentry := low[1]
    strategy.entry("RSI_BB_L", strategy.long, comment="Buy 2nd IF")    
    
if (((ta.crossover(delta, 0.0)) and (low[0]>shortest[0])) and (price[1]<low))
    lastentry := low[1]
    strategy.entry("RSI_BB_L", strategy.long, comment="Buy 3rd IF")   //else

if (((ta.crossover(delta, 0.01)) and (high[1]<BBupper)) and (tcu))
    lastentry := low[1]
    strategy.entry("RSI_BB_L", strategy.long, comment="Buy 4th IF")

       
if ((ta.crossunder(low[0],shortest[0]) and close<shortest))
    strategy.close(id="RSI_BB_L", comment="Close by 1st IF")
    
    
    
if (price<lastentry)
    drawshape := true
    
if (price<strategy.opentrades.entry_price(0)/1.01175734321249)
    strategy.close(id="RSI_BB_L", comment="Close by 2nd IF")



plot(strategy.opentrades.entry_price(0), color=color.yellow)


Lebih banyak