Diese Strategie kombiniert Bollinger Bands und MACD-Indikator, um Überverkaufsmöglichkeiten und Trendumkehrungen für den quantitativen Handel zu identifizieren.
Die Strategie berechnet zunächst 20-tägige Bollinger-Bänder, einschließlich mittlerer Band, oberer Band und unterer Band. Wenn der Preis die untere Band berührt, betrachtet er den Markt als überverkauft. Zu diesem Zeitpunkt wird mit dem MACD-Indikator kombiniert, um zu beurteilen, ob sich der Trend umkehrt. Wenn das MACD-Histogramm über die Signallinie positiv kreuzt, bestimmt es das Ende dieser Runde des Rückgangs, die dem Kaufsignal entspricht.
Insbesondere durch Berühren des unteren Bollingerbands und des MACD-Histogramms, das die Signallinie kreuzt, wird gleichzeitig das Kaufsignal positiv ausgelöst.
Die Strategie integriert Bollinger Bands, um die Überverkaufszone und den MACD zu beurteilen, um Trendumkehrsignale zu bestimmen und einen relativ niedrigeren Einstiegspreis zu realisieren.
Die Vorteile bestehen insbesondere darin:
Es bestehen noch einige Risiken, hauptsächlich in den folgenden Bereichen:
Zur Absicherung gegen die oben genannten Risiken können wir folgende Maßnahmen ergreifen:
Es gibt noch Raum für weitere Optimierungen, insbesondere:
Die Strategie integriert Bollinger Bands Überverkaufszone Urteil und MACD Trendumkehrindikator, um relativ bessere Einstiegspunkte zu erreichen. Es setzt auch Stop-Loss / Take-Profit-Methoden zur Kontrolle von Risiken. Dies ist eine lohnende Low Buy High Sell-Strategie zu referenzieren und zu optimieren. Kombiniert mit mehr Indikatorfiltern und maschinellen Lernmethoden, gibt es noch Raum für eine weitere Verbesserung seiner Leistung.
/*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