Stratégie de trading quantitative basée sur les bandes de Bollinger et le MACD


Date de création: 2023-12-20 15:55:18 Dernière modification: 2023-12-20 15:55:18
Copier: 0 Nombre de clics: 943
1
Suivre
1621
Abonnés

Stratégie de trading quantitative basée sur les bandes de Bollinger et le MACD

Aperçu

Cette stratégie combine les bandes de Brin et le MACD pour déterminer les opportunités de survente du marché et le MACD pour déterminer le renversement de la tendance, pour réaliser une stratégie de trading quantitatif à bas prix et à haut prix. Le nom de la stratégie est défini comme la stratégie de renversement de Brin MACD.

Principe de stratégie

La stratégie commence par calculer les bandes de Brin du 20e jour, comprenant le milieu, le haut et le bas. Lorsque le prix touche le bas, le marché est considéré comme étant en survente.

Plus précisément, le Brin génère un signal d’achat lorsque le contact de la voie descendante et le MACD de la différence sont déclenchés simultanément vers la ligne de signal de rupture; un signal d’arrêt est généré lorsque la hausse du prix de clôture dépasse le point d’arrêt.

Analyse des forces stratégiques

La stratégie intègre les courbes de Brin pour juger les zones de survente et les signaux de renversement de tendance pour juger le MACD, ce qui permet de réaliser un prix d’achat plus bas. En même temps, la stratégie intègre le mode de stop-loss, qui permet de bloquer les gains et d’éviter les pertes.

Les avantages sont les suivants:

  1. Combinaison des zones de survente de la ceinture de Brin et de l’indicateur MACD pour un meilleur point d’achat
  2. Utilisation de l’indicateur MACD pour déterminer le point de basculement de la tendance et réduire la probabilité d’une fausse rupture
  3. La mise en place d’une méthode de prévention des pertes permettant de contrôler efficacement les risques

Analyse stratégique des risques

Cette stratégie comporte également des risques, principalement liés aux aspects suivants:

  1. La probabilité d’une rupture de la ceinture de Brin pourrait faire échouer le jugement sur les zones de survente
  2. Une rupture de la MACD peut aussi être une fausse rupture, ce qui signifie qu’il y a une probabilité d’erreur
  3. La position d’arrêt est mal réglée, peut être trop relâchée ou stricte, entraînant une défense insuffisante ou un arrêt trop brusque.

Les mesures suivantes peuvent être prises pour contrer ces risques:

  1. Combiné à d’autres indicateurs de validation de l’efficacité du signal de rupture de la bande de Brin
  2. Augmentation des indicateurs de quantité d’énergie et des filtres pour éviter une fausse percée du MACD
  3. Optimiser et tester différents paramètres de stop loss

Orientation de l’optimisation de la stratégie

Il y a de la place pour d’autres améliorations à la stratégie, notamment:

  1. Optimiser les paramètres de la bande de Brin pour trouver une meilleure solution de jugement des zones de survente
  2. Augmentation des filtres tels que les indicateurs de quantité d’énergie, améliorant l’efficacité des jugements MACD
  3. Tester les modes de stop-loss sur des indicateurs tels que l’ATR pour trouver les meilleurs paramètres
  4. Ajout d’un module de jugement de tendance pour éviter le trading à contre-courant
  5. Des modèles de jugement entraînés avec des méthodes d’apprentissage automatique pour améliorer l’efficacité globale des stratégies

Résumer

Cette stratégie intègre le jugement des zones de survente de la ceinture de Brin et l’indicateur de renversement de tendance MACD, permettant une sélection de point d’achat relativement avantageuse. En même temps, la stratégie de contrôle des risques de la méthode de stop-loss est configurée.

Code source de la stratégie
/*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