Strategi perdagangan kuantitatif berdasarkan Bollinger Bands dan MACD


Tanggal Pembuatan: 2023-12-20 15:55:18 Akhirnya memodifikasi: 2023-12-20 15:55:18
menyalin: 0 Jumlah klik: 943
1
fokus pada
1621
Pengikut

Strategi perdagangan kuantitatif berdasarkan Bollinger Bands dan MACD

Ringkasan

Strategi ini menggabungkan Bollinger Bands dan MACD, menggunakan Bollinger Bands untuk menilai peluang pasar oversold dan MACD untuk menilai reversal tren, untuk mencapai strategi perdagangan kuantitatif yang murah dan mahal. Nama strategi ditetapkan sebagai Bollinger Bands MACD Reversal Strategy.

Prinsip Strategi

Strategi ini pertama-tama menghitung 20 hari Brin band, termasuk rel tengah, rel atas, dan rel bawah. Ketika harga menyentuh rel bawah, pasar dianggap berada dalam keadaan oversold. Saat ini dikombinasikan dengan indikator MACD untuk menilai apakah tren berbalik, jika MACD yang berselisih menembus garis sinyal ke atas, dinilai sebagai akhir dari penurunan putaran, yang sesuai adalah sinyal beli.

Secara khusus, Brin menghasilkan sinyal beli ketika sentuhan bawah rel dan MACD yang berbeda sedang menyala pada saat yang sama; dan sinyal stop ketika harga penutupan naik di atas titik stop.

Analisis Keunggulan Strategi

Strategi ini mengintegrasikan Bollinger Bands untuk menilai zona oversold dan MACD untuk menilai sinyal reversal tren, yang menghasilkan harga beli yang lebih rendah. Selain itu, strategi ini menambahkan metode stop-loss untuk mengunci keuntungan dan menghindari kerugian.

Secara khusus, ada beberapa keuntungan:

  1. Kombinasi zona oversold Brin dan MACD untuk mendapatkan titik beli yang lebih baik
  2. Menggunakan indikator MACD untuk menentukan titik balik tren, mengurangi probabilitas false breakout
  3. Menggunakan Stop Loss Stop Stop untuk Mengontrol Risiko

Analisis Risiko Strategi

Strategi ini juga memiliki beberapa risiko, yang terkonsentrasi pada beberapa aspek:

  1. Probabilitas adanya penembakan di Brin Belt, yang dapat menyebabkan penilaian over-the-counter gagal
  2. MACD gap breakout juga bisa menjadi false breakout, yang berarti ada kemungkinan kesalahan.
  3. Pengaturan posisi stop loss yang tidak masuk akal, mungkin terlalu longgar atau ketat, menyebabkan kurangnya pertahanan atau stop loss yang terlalu tajam

Langkah-langkah pencegahan yang dapat dilakukan untuk mengatasi risiko tersebut adalah sebagai berikut:

  1. Tergabung dengan indikator lain untuk memverifikasi efektivitas sinyal Brin Belt Breakthrough
  2. Meningkatkan indikator energi dan filter untuk menghindari MACD false breach
  3. Mengoptimalkan dan menguji berbagai parameter stop loss

Arah optimasi strategi

Strategi ini memiliki ruang untuk pengoptimalan lebih lanjut, yang meliputi:

  1. Optimalkan parameter Brin untuk mencari solusi yang lebih baik untuk menilai zona supermarket
  2. Meningkatkan efisiensi penilaian MACD dengan penyaring seperti indikator energi kuantitatif
  3. Menguji cara stop loss pada indikator seperti ATR untuk mencari parameter yang lebih baik
  4. Menambahkan modul penilaian tren untuk menghindari perdagangan berlawanan
  5. Model penilaian yang dilatih dengan metode pembelajaran mesin untuk meningkatkan efektivitas strategi secara keseluruhan

Meringkaskan

Strategi ini mengintegrasikan penilaian zona oversold Brin dan indikator pembalikan tren MACD, yang memungkinkan pilihan titik beli yang relatif lebih baik. Pada saat yang sama, pengaturan pengendalian risiko dengan cara stop loss. Ini adalah strategi jual beli rendah yang layak dipelajari dan dioptimalkan.

Kode Sumber Strategi
/*backtest
start: 2023-11-19 00:00:00
end: 2023-12-19 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © DojiEmoji

//@version=4
strategy("[KL] BOLL + MACD Strategy v2 (published)",overlay=true)

// BOLL bands {
BOLL_length = 20
BOLL_src = close
BOLL_mult = 2.0
BOLL_basis = sma(BOLL_src, BOLL_length)
BOLL_dev = BOLL_mult * stdev(BOLL_src, BOLL_length)
BOLL_upper = BOLL_basis + BOLL_dev
BOLL_lower = BOLL_basis - BOLL_dev
BOLL_offset = 0
plot(BOLL_basis, "Basis", color=#872323, offset = BOLL_offset)
BOLL_p1 = plot(BOLL_upper, "Upper", color=color.navy, offset = BOLL_offset, transp=50)
BOLL_p2 = plot(BOLL_lower, "Lower", color=color.navy, offset = BOLL_offset, transp=50)
fill(BOLL_p1, BOLL_p2, title = "Background", color=#198787, transp=85)
// }
// MACD signals {
MACD_fastLen = 12
MACD_slowLen = 26
MACD_Len = 9
MACD = ema(close, MACD_fastLen) - ema(close, MACD_slowLen)
aMACD = ema(MACD, MACD_Len)
MACD_delta = MACD - aMACD
// }
backtest_timeframe_start = input(defval = timestamp("01 Nov 2010 13:30 +0000"), title = "Backtest Start Time", type = input.time)
//backtest_timeframe_end = input(defval = timestamp("05 Mar 2021 19:30 +0000"), title = "Backtest End Time", type = input.time)
TARGET_PROFIT_MODE = input(false,title="Exit when Risk:Reward met")
REWARD_RATIO = input(3,title="Risk:[Reward] (i.e. 3) for exit")
// Trailing stop loss {
var entry_price = float(0)
ATR_multi_len = 26
ATR_multi = input(2, "ATR multiplier for stop loss")
ATR_buffer = atr(ATR_multi_len) * ATR_multi
risk_reward_buffer = (atr(ATR_multi_len) * ATR_multi) * REWARD_RATIO
take_profit_long = low > entry_price + risk_reward_buffer
take_profit_short = low < entry_price - risk_reward_buffer
var bar_count = 0 //number of bars since entry 
var trailing_SL_buffer = float(0)
var stop_loss_price = float(0)
stop_loss_price := max(stop_loss_price, close - trailing_SL_buffer)
// plot TSL line
trail_profit_line_color = color.green
if strategy.position_size == 0
    trail_profit_line_color := color.blue
    stop_loss_price := low
plot(stop_loss_price,color=trail_profit_line_color)
// } 

var touched_lower_bb = false

if true// and time <= backtest_timeframe_end
    if low <= BOLL_lower
        touched_lower_bb := true
    else if strategy.position_size > 0
        touched_lower_bb := false//reset state
    expected_rebound = MACD > MACD[1] and abs(MACD - aMACD) < abs(MACD[1] - aMACD[1])
    buy_condition = touched_lower_bb and MACD > aMACD or expected_rebound

    //ENTRY:
    if strategy.position_size == 0 and buy_condition
        entry_price := close
        trailing_SL_buffer := ATR_buffer
        stop_loss_price := close - ATR_buffer
        strategy.entry("Long",strategy.long, comment="buy")
        bar_count := 0
    else if strategy.position_size > 0
        bar_count := bar_count + 1

    //EXIT: 
    // Case (A) hits trailing stop
    if strategy.position_size > 0 and close <= stop_loss_price
        if close > entry_price
            strategy.close("Long", comment="take profit [trailing]")
            stop_loss_price := 0
        else if close <= entry_price and bar_count
            strategy.close("Long", comment="stop loss")
            stop_loss_price := 0
        bar_count := 0
    // Case (B) take targeted profit relative to risk 
    if strategy.position_size > 0 and TARGET_PROFIT_MODE
        if take_profit_long
            strategy.close("Long", comment="take profits [risk:reward]")
            stop_loss_price := 0
        bar_count := 0