Strategi Dagangan Kuantitatif Berdasarkan Bollinger Bands dan MACD

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

img

Ringkasan

Strategi ini adalah strategi perdagangan kuantitatif berdasarkan Bollinger Bands dan penunjuk MACD. Ia menggabungkan perdagangan pecah Bollinger Bands dan penjejakan trend MACD untuk meningkatkan kualiti isyarat perdagangan.

Prinsip Strategi

Strategi ini terutamanya menggunakan Bollinger Bands dan penunjuk MACD untuk menentukan isyarat perdagangan.

Bollinger Bands terdiri daripada band tengah, band atas dan band bawah. Isyarat beli dihasilkan apabila harga menembusi band bawah. Isyarat jual dihasilkan apabila harga menembusi band atas. Strategi ini menggunakan prinsip pecah Bollinger Bands untuk menentukan isyarat pecah yang lebih kuat.

Indikator MACD mencerminkan hubungan antara purata bergerak jangka pendek dan jangka panjang. Ia menggunakan persilangan garis perbezaan dan garis isyarat untuk menentukan titik masuk dan keluar. Strategi ini mengintegrasikan penggunaan penunjuk MACD untuk menapis isyarat perdagangan Bollinger Bands dan menghasilkan isyarat beli yang lebih berkesan apabila garis perbezaan melintasi di atas garis isyarat.

Secara keseluruhan, strategi ini menggabungkan trend tracking Bollinger Bands dan kelebihan purata bergerak MACD, bertujuan untuk menangkap turun naik pasaran yang lebih besar dalam trend yang kuat.

Kelebihan Strategi

  1. Menggabungkan Bollinger Bands dan penunjuk MACD menjadikan isyarat perdagangan lebih boleh dipercayai.

  2. Pengesanan trend Bollinger Bands dan crossover purata bergerak MACD boleh menghasilkan isyarat kemasukan yang lebih kuat di pasaran yang sedang berkembang.

  3. Isyarat palsu boleh ditapis dengan berkesan melalui penilaian penunjuk dua, mengurangkan risiko perdagangan.

  4. Terdapat ruang yang besar untuk pengoptimuman parameter strategi, yang boleh diselaraskan mengikut produk dan kitaran yang berbeza.

Risiko Strategi

  1. Dalam pasaran terikat julat, isyarat dagangan yang dihasilkan oleh Bollinger Bands dan MACD mungkin kerap, membawa risiko perdagangan berlebihan.

  2. Tiga kali berturut-turut MACD melintasi emas pada tahap rendah mungkin menghadapi risiko pembalikan ke bawah.

  3. Strategi ini menggunakan beberapa penunjuk, menjadikan pengoptimuman parameter dan ujian strategi agak sukar.

Untuk menangani risiko ini, kaedah seperti menyesuaikan tempoh penahan, menetapkan stop loss, mengoptimumkan parameter boleh digunakan untuk mengawalnya.

Arahan untuk Pengoptimuman Strategi

  1. Uji parameter Bollinger Bands jangka panjang untuk mengurangkan kekerapan dagangan.

  2. Mengoptimumkan parameter garis MACD pantas dan perlahan untuk meningkatkan kepekaan penunjuk.

  3. Tambah penunjuk lain untuk penapisan, seperti KDJ, RSI dll, untuk meningkatkan kualiti isyarat.

  4. Tetapkan berhenti dinamik untuk keluar secara automatik perdagangan dan mengawal risiko perdagangan tunggal.

Kesimpulan

Secara teori, dengan mengintegrasikan perdagangan pecah Bollinger Bands dan penapisan penunjuk MACD, strategi ini dapat menghasilkan isyarat perdagangan berkualiti tinggi. Melalui pengoptimuman parameter dan langkah kawalan risiko, hasil backtest yang baik dapat dicapai. Walau bagaimanapun, tidak ada strategi yang dapat mengelakkan kerugian sepenuhnya. Prestasi perdagangan sebenar memerlukan penilaian yang berhati-hati.


/*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 lanjut