Stratégie de suivi des tendances en bandes de Bollinger à double moyenne mobile

Auteur:ChaoZhang est là., Date: 2023-12-22 à 14h54
Les étiquettes:

img

Résumé

Cette stratégie utilise une combinaison de bandes de Bollinger et de moyennes mobiles pour l'identification et l'entrée de tendance.

La logique de la stratégie

  1. Calculer le canal de Bollinger pour déterminer la direction de la tendance du marché

    • Utiliser le plus haut et le plus bas pour calculer les bandes de canaux
    • La bande médiane du canal est la moyenne des hauts et des bas
    • Déterminer la direction de la tendance en fonction de l'emplacement des prix dans le canal
  2. Calculer la taille du corps de la bougie haussière pour les signaux de stop loss et de renversement

    • Le corps de la bougie haussière est la valeur absolue de la fermeture moins l' ouverture
    • Calculer la moyenne de N périodes des corps de bougies, comparer à celui du corps actuel pour le stop loss et l'inversion
  3. Entrer des transactions dans la direction du canal à la confirmation de la tendance

    • Longues entrées près de la bande inférieure dans les tendances haussières
    • Entrées courtes près de la bande supérieure dans les tendances à la baisse
  4. Utiliser des moyennes mobiles pour la filtration afin d'éviter de faux signaux

    • Calcul de la moyenne mobile du prix de clôture pour la période N
    • Générer des signaux uniquement sur les percées de moyenne mobile

Les avantages

  1. Identification systématique de tendance combinant bandes et moyennes mobiles

    Les bandes identifient clairement les canaux de prix et la direction de la tendance. Les moyennes mobiles filtrent le bruit.

  2. Contrôle efficace des risques par le biais d'un arrêt des pertes de la carrosserie de la bougie

    La comparaison du corps de la bougie actuelle avec la moyenne historique détecte l'inversion de tendance pour le stop loss et la réduction de la position.

  3. Règles quantitatives claires pour l'entrée et le stop loss

    Règles strictes en matière de moyenne mobile et de direction du canal pour l'entrée.

Analyse des risques

  1. Perte potentielle sur les marchés à plage

    Les prix qui oscillent autour des bandes peuvent entraîner des pertes mineures répétées.

  2. Stop-loss prématuré dans des tendances fortes

    Les retracements à court terme peuvent déclencher des arrêts dans les fortes tendances haussières/baissières.

  3. Signaux erronés dus à un mauvais réglage des paramètres

    Des paramètres de moyenne mobile et de bandes sous-optimaux peuvent provoquer des signaux erronés. Les paramètres doivent être optimisés pour la fiabilité du signal.

Des possibilités d'amélioration

  1. Optimiser la période de révision de la moyenne mobile

    Ajustez la période pour réduire le lissage afin de détecter plus rapidement les changements de tendance.

  2. Test des mécanismes de stop loss alternatifs

    Évaluer les arrêts de trail, les arrêts ATR, etc. pour trouver le système optimal.

  3. Incorporer des modèles d'apprentissage automatique

    Former des modèles sur des données historiques détaillées pour augmenter la prédiction des tendances et des signaux.

Conclusion

Cette stratégie équilibre l'identification des tendances et le contrôle des risques à l'aide de bandes de Bollinger et de moyennes mobiles. L'approche quantitative systématique avec des règles d'entrée/sortie claires permet une capture efficace des récompenses avec un risque contrôlé.


/*backtest
start: 2023-12-14 00:00:00
end: 2023-12-21 00:00:00
period: 15m
basePeriod: 5m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/


//@version=2
strategy("Noro's Bands Scalper Strategy v1.3", shorttitle = "Scalper str 1.3", overlay=true, default_qty_type = strategy.percent_of_equity, default_qty_value=100.0, pyramiding=0)

//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
takepercent = input(0, defval = 0, minval = 0, maxval = 1000, title = "take, %")
needct = input(false, defval = false, title = "Counter-trend entry")
len = input(20, defval = 20, minval = 2, maxval = 200, title = "Period")
needbb = input(true, defval = true, title = "Show Bands")
needbg = input(true, defval = true, title = "Show Background")
src = close

//PriceChannel 1
lasthigh = highest(src, len)
lastlow = lowest(src, len)
center = (lasthigh + lastlow) / 2

//Distance
dist = abs(src - center)
distsma = sma(dist, len)
hd = center + distsma
ld = center - distsma
hd1 = center + distsma / 2
ld1 = center - distsma / 2

//Trend
trend = close < ld and high < center ? -1 : close > hd and low > center ? 1 : trend[1]

//Lines
colo = needbb == false ? na : black
plot(hd, color = colo, linewidth = 1, transp = 0, title = "High band")
plot(center, color = colo, linewidth = 1, transp = 0, title = "center")
plot(ld, color = colo, linewidth = 1, transp = 0, title = "Low band")

//Background
col = needbg == false ? na : trend == 1 ? lime : red
bgcolor(col, transp = 80)

//Body
body = abs(close - open)
smabody = ema(body, 30)
candle = high - low

//Engulfing
min = min(open, close)
max = max(open, close)
bar = close > open ? 1 : close < open ? -1 : 0
upeng = bar == 1 and bar[1] == -1 and min >= min[1] and max <= max[1] ? 1 : 0
dneng = bar == -1 and bar[1] == 1 and min >= min[1] and max <= max[1] ? 1 : 0

//Signals
up7 = trend == 1 and ((bar == -1 and bar[1] == -1) or (body > smabody and close < open)) ? 1 : 0
dn7 = trend == 1 and bar == 1 and bar[1] == 1 and close > strategy.position_avg_price * (100 + takepercent) / 100 ? 1 : 0
up8 = trend == -1 and bar == -1 and bar[1] == -1 and close < strategy.position_avg_price * (100 - takepercent) / 100 ? 1 : 0
dn8 = trend == -1 and ((bar == 1 and bar[1] == 1) or (body > smabody and close > open)) ? 1 : 0

if up7 == 1 or up8 == 1 
    strategy.entry("Long", strategy.long, needlong == false ? 0 : trend == -1 and needct == false ? 0 : na)

if dn7 == 1 or dn8 == 1
    strategy.entry("Short", strategy.short, needshort == false ? 0 : trend == 1 and needct == false ? 0 : na)

Plus de