Strategi ini menggabungkan Bollinger Bands dan indikator MACD untuk mengidentifikasi peluang oversold dan pembalikan tren untuk perdagangan kuantitatif.
Strategi ini pertama-tama menghitung Bollinger Band 20 hari, termasuk band tengah, band atas dan band bawah. Ketika harga menyentuh band bawah, itu menganggap pasar oversold. Pada titik ini, menggabungkan dengan indikator MACD untuk menilai apakah tren sedang terbalik. Jika histogram MACD melintasi di atas garis sinyal secara positif, itu menentukan akhir putaran penurunan ini, yang sesuai dengan sinyal beli.
Secara khusus, menyentuh Bollinger lower band dan garis sinyal penyeberangan histogram MACD secara positif memicu sinyal beli secara bersamaan.
Strategi ini mengintegrasikan Bollinger Bands untuk menilai zona oversold dan MACD untuk menentukan sinyal pembalikan tren, mewujudkan harga masuk yang relatif lebih rendah.
Khususnya, keuntungannya adalah:
Masih ada beberapa risiko terutama dalam aspek berikut:
Untuk melindungi diri dari risiko di atas, kita dapat mengambil langkah-langkah berikut:
Masih ada ruang untuk optimasi lebih lanjut, terutama termasuk:
Strategi ini mengintegrasikan penilaian zona oversold Bollinger Bands dan indikator pembalikan tren MACD untuk mencapai titik masuk yang relatif lebih baik. Ini juga menetapkan metode stop loss / take profit untuk mengendalikan risiko. Ini adalah strategi jual tinggi beli rendah yang bermanfaat untuk referensi dan dioptimalkan. Dikombinasikan dengan lebih banyak filter indikator dan metode pembelajaran mesin, masih ada ruang untuk meningkatkan kinerjanya.
/*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