Quantitative Handelsstrategie basierend auf Bollinger Bands und MACD


Erstellungsdatum: 2023-12-20 15:55:18 zuletzt geändert: 2023-12-20 15:55:18
Kopie: 0 Klicks: 943
1
konzentrieren Sie sich auf
1621
Anhänger

Quantitative Handelsstrategie basierend auf Bollinger Bands und MACD

Überblick

Die Strategie kombiniert die Bollinger Bands mit dem MACD-Index und nutzt die Bollinger Bands, um Übersellmöglichkeiten zu ermitteln, und den MACD-Index, um eine Trendwende zu ermitteln. Die Strategie wird als Bollinger MACD-Umkehrstrategie bezeichnet.

Strategieprinzip

Die Strategie berechnet zunächst die 20-Tage-Bulling-Bänder, einschließlich der mittleren, oberen und unteren Bahnen. Wenn der Preis die Unterbahn berührt, wird der Markt als überverkauft angesehen. In Verbindung mit dem MACD-Indikator wird beurteilt, ob der Trend umgekehrt ist.

Konkret erzeugt Brin ein Kaufsignal, wenn ein Downtrend-Kontakt und ein MACD-Differenz gleichzeitig zur Durchbruch-Signallinie ausgelöst werden; ein Stop-Signal wird erzeugt, wenn ein Anstieg des Schlusskurses den Stop-Loss überschreitet.

Strategische Stärkenanalyse

Die Strategie integriert die Brin-Band-Bewertung überverkaufter Gebiete und die MACD-Bewertung von Trendwende-Signalen, um einen niedrigeren Kaufpreis zu erzielen. Die Strategie enthält außerdem einen Stop-Stop-Methode, mit der Gewinne gesperrt und Verluste vermieden werden können.

Die Vorzüge sind:

  1. Kombination von Brin Belt Overselling Zonen und MACD-Indikator, um einen günstigen Kaufpunkt zu erreichen
  2. Verwenden Sie die MACD-Indikatoren, um Trendwendepunkte zu ermitteln und die Wahrscheinlichkeit eines Fehlbruchs zu verringern
  3. Ein Stop-Loss-Stopp ermöglicht eine effektive Risikokontrolle

Strategische Risikoanalyse

Die Strategie birgt auch Risiken, die sich auf folgende Bereiche konzentrieren:

  1. Die Wahrscheinlichkeit, dass der Brin-Band durchbrochen wurde, könnte dazu führen, dass der Urteil über die Überverkaufszone fehlschlägt.
  2. Ein MACD-Differenzbruch kann auch ein Falschbruch sein, um die Wahrscheinlichkeit eines Fehlers zu beurteilen.
  3. Unvernünftiges Einstellen der Stopppositionen, möglicherweise zu locker oder zu streng, was zu unzureichender Abwehr oder zu starkem Stoppen führt

Die folgenden Maßnahmen können gegen diese Risiken eingesetzt werden:

  1. In Kombination mit anderen Kennzahlen, die die Wirksamkeit des Brin-Band-Break-Signals bestätigen
  2. Filter, wie z.B. die Erhöhung der Energiezufuhr, um MACD-Falschdurchbrüche zu vermeiden
  3. Optimierung und Test verschiedener Parameterstop-Systeme

Richtung der Strategieoptimierung

Die Strategie kann noch weiter optimiert werden, insbesondere durch:

  1. Optimierung der Brin-Band-Parameter und Suche nach besseren Lösungen für die Beurteilung von Überverkaufszonen
  2. Erhöhung von Filtern wie Energieindikatoren, um die MACD-Beschlusswirksamkeit zu verbessern
  3. Testen Sie die Stop-Loss-Methode für Indikatoren wie ATR, um bessere Parameter zu finden
  4. Das Modul zur Trendbeurteilung wurde hinzugefügt, um einen Abweichhandel zu vermeiden.
  5. Das Ziel ist es, die Gesamtwirksamkeit von Strategien zu verbessern, indem es die Entscheidungsmodelle in Verbindung mit Methoden des maschinellen Lernens trainiert.

Zusammenfassen

Die Strategie integriert die Brin-Band-Over-Sell-Richtung und den MACD-Trend-Reversal-Indikator und ermöglicht eine relativ günstige Kaufoption. Gleichzeitig wird ein Stop-Loss-Stopp-Methode eingerichtet, um das Risiko zu kontrollieren. Dies ist eine Low-Buy-High-Sell-Strategie, die es wert ist, sie zu nutzen und zu optimieren.

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