
La stratégie de trading à plusieurs niveaux de suivi et de retournement de la tendance des bandes de Bollinger est un système de trading intégré basé sur les indicateurs des bandes de Bollinger, qui combine habilement les caractéristiques de suivi et de retournement de tendance pour capturer les opportunités de marché grâce à l’interaction des prix avec les bandes de Bollinger. Le système est conçu avec un mécanisme de sortie à trois niveaux, comprenant des zones, des traversées de la ligne de parité et des arrêts mobiles, permettant à la stratégie de capturer des bénéfices maximaux tout en contrôlant efficacement les risques.
Le principe central de cette stratégie est d’utiliser les bandes de Brin comme zone de référence dynamique pour les fluctuations de prix, en combinant des règles d’entrée et de sortie multicouches soigneusement conçues.
La logique d’entrée est divisée en deux parties:
La logique de sortie est conçue avec trois niveaux de protection:
Les paramètres de la courbe de Bryn sont flexibles, incluant la période de la moyenne (défault 20) et le multiple de la différence standard (défault 2.0) [2]. Les paramètres de sortie peuvent également être ajustés en fonction des caractéristiques du marché, incluant X (défault 3), Y (défault 10) et le pourcentage de rétractation de l’arrêt mobile Z (défault 30%).
Capture d’opportunités de marché multiples: la stratégie comprend à la fois le suivi de la tendance et la logique de négociation inverse, permettant de trouver des opportunités de négociation dans différents environnements de marché. Lorsque le marché est en état de choc, le rebond/retour après que le prix a touché le bord de la ceinture de Brin peut être utilisé.
Contrôle du risque à plusieurs niveaux: la stratégie permet de protéger les fonds dans différentes situations en concevant trois niveaux de conditions de sortie différentes. Le premier niveau de jugement régional permet d’identifier rapidement les erreurs de direction de la transaction; Le deuxième niveau traverse la ligne de la même manière pour un changement de tendance à moyen terme; Le troisième niveau de stop-loss mobile protège les bénéfices déjà réalisés après un profit important.
Flexibilité des paramètres: la stratégie fournit plusieurs paramètres réglables, permettant aux traders d’optimiser le système en fonction des caractéristiques des différents marchés et des périodes de temps. La longueur et le multiplicateur des bandes de Brin peuvent être ajustés pour s’adapter à la volatilité du marché, les paramètres de temps des conditions de sortie ((X et Y) et le taux de rétractation des arrêts mobiles ((Z) peuvent être configurés en fonction des préférences de risque des traders.
Avantages visuels: les bandes de Brin et les nouvelles lignes de référence intermédiaires sont directement tracées sur le graphique, ce qui permet aux traders d’analyser visuellement la position des prix et les zones de support / résistance potentielles, améliorant ainsi l’efficacité de la prise de décision.
La structure du code est claire: le code stratégique est organisé de manière ordonnée, les spécifications de nommage des variables, les annotations sont détaillées, faciles à comprendre et à maintenir. La séparation logique entre les sorties et les sorties est claire, facilitant l’extension et l’optimisation ultérieures.
Manque de mécanisme de stop-loss explicite: les stratégies actuelles ne contiennent pas de stop-loss dans le sens traditionnel, ce qui peut entraîner des pertes plus importantes dans des conditions de marché extrêmes. Il est recommandé aux traders d’ajouter manuellement des stop-loss fixes ou des logiques de stop-loss dynamiques basées sur l’ATR en fonction de leur tolérance au risque.
Excessive dépendance à la bande de bourinage: dans les marchés à forte volatilité ou à faible liquidité, la bande de bourinage peut être trop large ou trop étroite, ce qui entraîne une baisse de la qualité du signal. Il est recommandé de tester différents paramètres de la bande de bourinage dans différents environnements de marché.
Sensitivité des paramètres: les performances de la stratégie peuvent être sensibles aux paramètres tels que la longueur des bandes de Bryn, le multiple de l’écart-type et le temps de jeu. Un mauvais choix de paramètres peut entraîner une survente des transactions ou la perte d’occasions importantes.
Les conditions de déclenchement des freins mobiles sont fixes: dans le code actuel, les conditions de déclenchement des freins mobiles sont fixées à 2 fois la distance de risque, ce qui peut ne pas s’appliquer à tous les environnements de marché. Dans les marchés trop volatiles, cela peut entraîner un déclenchement des freins trop loin et ne pas protéger efficacement les bénéfices.
Risque de symétrie conditionnelle multi-zones: la stratégie utilise une logique d’entrée et de sortie symétrique pour les directions multi-zones, mais dans les marchés réels, les mouvements à la baisse et à la baisse sont souvent asymétriques (par exemple, les marchés boursiers baissent généralement plus rapidement que les marchés à la hausse). Il est recommandé d’envisager de définir des paramètres différents pour les directions multi-zones.
Ajout d’un mécanisme de stop intelligent: il est possible d’introduire un stop dynamique basé sur l’ATR ou un stop distance basé sur la bande passante de Brin, ce qui rend le stop plus adapté aux fluctuations réelles du marché. La mise en œuvre peut se faire en ajoutant un paramètre stop dans la fonction strategy.entry ou en utilisant le paramètre stop_loss de la fonction strategy.exit.
Optimiser les conditions de filtrage d’entrée: il est possible d’envisager d’ajouter des indicateurs de confirmation de tendance, tels que les indicateurs de mouvement directionnel ((DMI) ou l’indice de force relative ((RSI), pour filtrer les signaux de mauvaise qualité. Par exemple, acceptez un signal de suivi de tendance uniquement lorsque l’ADX est supérieur à 25 ou un signal de revers uniquement lorsque le RSI est en survente / survente.
Configuration des paramètres d’adaptation: les paramètres de la ceinture de Bryn et les paramètres des conditions de sortie sont conçus pour s’adapter et s’ajuster automatiquement en fonction de la volatilité du marché. Par exemple, on peut calculer la volatilité des N cycles passés et ajuster dynamiquement le multiple de l’écart type de la ceinture de Bryn.
Amélioration du mécanisme d’arrêt mobile: les conditions de déclenchement et la distance de suivi de l’arrêt mobile peuvent être ajustées, au lieu d’être fixées à 2 fois la distance de risque. Prendre en compte les caractéristiques d’oscillation de différentes périodes de temps et ajuster le pourcentage de rétractation de l’arrêt mobile.
Ajout de filtres temporels: introduire des filtres de périodes de négociation, éviter les périodes de forte volatilité avant l’ouverture et la fermeture du marché, ou ajouter des filtres de meilleurs moments de négociation pour des marchés spécifiques.
Analyse multi-cycle: intégration d’un cadre d’analyse multi-cycle, qui exige que la direction de la tendance des cycles plus élevés soit cohérente avec la direction des transactions actuelles, afin d’améliorer la qualité du signal. Par exemple, accepter des signaux multi-cycles sur un graphique de 4 heures uniquement lorsque le solstice tend vers le haut.
Optimisation de la gestion des fonds: ajout d’une logique de calcul des positions basée sur la volatilité, augmentation des positions dans un environnement à faible volatilité et réduction des positions dans un environnement à forte volatilité, afin d’équilibrer les risques et les gains.
La stratégie de trading multi-niveaux de suivi des tendances des bandes de Brin et de renversement est un système de trading global conçu pour gérer efficacement les risques tout en capturant les opportunités de marché grâce aux caractéristiques dynamiques des indicateurs des bandes de Brin, combinées à des règles de sortie à plusieurs niveaux. Le plus grand avantage de cette stratégie réside dans sa flexibilité et son adaptabilité, sa capacité à trouver des opportunités de trading dans différents environnements de marché et à s’adapter aux différents types de transactions et périodes de temps par paramètres.
Bien que certaines stratégies présentent des points de risque, tels que le manque de mécanisme de stop-loss clair et la sensibilité des paramètres, les orientations d’optimisation proposées dans cet article, telles que l’ajout d’un stop-loss intelligent, l’optimisation des conditions de filtrage d’entrée et le réglage des paramètres adaptatifs, peuvent améliorer encore la robustesse et la rentabilité de la stratégie.
Pour les traders, il est recommandé d’effectuer un retour d’expérience suffisant avant la mise en œuvre et d’ajuster les paramètres en fonction des caractéristiques spécifiques du marché. En même temps, la stratégie est utilisée comme une partie intégrante d’un système de trading complet, combinée à d’autres techniques et analyses fondamentales, pour prendre des décisions de trading globales.
/*backtest
start: 2024-04-01 00:00:00
end: 2025-03-31 00:00:00
period: 6d
basePeriod: 6d
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT"}]
*/
//@version=6
strategy("Bollinger Bands Strategy", overlay=true)
// 輸入參數
length = input.int(20, "BB Length", minval=1, group="布林帶設定")
mult = input.float(2.0, "BB Multiplier", minval=0.001, maxval=50, group="布林帶設定")
X = input.int(3, "Exit Condition 1 Bars (X)", minval=1, group="出場設定")
Y = input.int(10, "Exit Condition 2 Bars (Y)", minval=1, group="出場設定")
Z = input.float(30.0, "Trail Profit Retreat Z%", minval=1.0, maxval=100.0, step=1.0, group="出場設定")
// 計算布林帶
source = close
basis = ta.sma(source, length) // 20 期均線
dev = mult * ta.stdev(source, length) // 標準差
upper = basis + dev // 上緣
lower = basis - dev // 下緣
mid1 = upper - (upper - basis)/3
mid2 = lower + (basis - lower)/3
// 繪製布林帶
plot(basis, "Basis", color=color.gray)
plot(upper, "Upper", color=color.blue)
plot(lower, "Lower", color=color.blue)
plot(mid1,"mid1",color = color.yellow)
plot(mid2,"mid2",color = color.yellow)
//fill(upper, lower, color=color.new(color.blue, 90), title="BB Fill")
// 進場條件
longEntry = ta.crossover(source, lower) or (low < lower and close > lower)
shortEntry = ta.crossunder(source, upper) or (high > upper and close < upper)
// 進場執行
if (longEntry)
strategy.entry("Long", strategy.long)
if (shortEntry)
strategy.entry("Short", strategy.short)
// 出場條件變數
var float longEntryPrice = na
var float shortEntryPrice = na
var int longBarsSinceEntry = 0
var int shortBarsSinceEntry = 0
// 更新持倉狀態
if (strategy.position_size > 0) // 做多持倉
if (na(longEntryPrice)) // 記錄進場價格和起始計數
longEntryPrice := strategy.position_avg_price
longBarsSinceEntry := 0
longBarsSinceEntry := longBarsSinceEntry + 1
if (strategy.position_size < 0) // 做空持倉
if (na(shortEntryPrice))
shortEntryPrice := strategy.position_avg_price
shortBarsSinceEntry := 0
shortBarsSinceEntry := shortBarsSinceEntry + 1
// 做多出場條件
if (strategy.position_size > 0)
// 條件 1:第 X 根 K 線後,收盤價 < lower + (basis - lower) / 3
longExitLevel1 = lower + (basis - lower) / 3
if (longBarsSinceEntry >= X and close < longExitLevel1)
strategy.close("Long", comment="Long Exit Condition 1")
// 條件 2:第 Y 根 K 線後,收盤價 < basis
if (longBarsSinceEntry >= Y and close < basis)
strategy.close("Long", comment="Long Exit Condition 2")
// 條件 3:移動停利(收盤價 > upper 觸發)
distanceLong = longEntryPrice - lower
trailPriceLong = longEntryPrice + (distanceLong * 2) // 假設 2 倍風險距離作為觸發點,可調整
trailOffsetLong = distanceLong * (1 - Z / 100)
strategy.exit("Long Trail", "Long", trail_price=trailPriceLong, trail_offset=trailOffsetLong)
// 做空出場條件
if (strategy.position_size < 0)
// 條件 1:第 X 根 K 線後,收盤價 > upper - (upper - basis) / 3
shortExitLevel1 = upper - (upper - basis) / 3
if (shortBarsSinceEntry >= X and close > shortExitLevel1)
strategy.close("Short", comment="Short Exit Condition 1")
// 條件 2:第 Y 根 K 線後,收盤價 > basis
if (shortBarsSinceEntry >= Y and close > basis)
strategy.close("Short", comment="Short Exit Condition 2")
// 條件 3:移動停利(收盤價 < lower 觸發)
distanceShort = upper - shortEntryPrice
trailPriceShort = shortEntryPrice - (distanceShort * 2) // 假設 2 倍風險距離作為觸發點,可調整
trailOffsetShort = distanceShort * (1 - Z / 100)
strategy.exit("Short Trail", "Short", trail_price=trailPriceShort, trail_offset=trailOffsetShort)
// 清除變數(當持倉結束時)
if (strategy.position_size == 0)
longEntryPrice := na
shortEntryPrice := na
longBarsSinceEntry := 0
shortBarsSinceEntry := 0