Il s'agit d'une stratégie de suivi de tendance basée sur l'indicateur Bollinger Bands. Il utilise la rupture des bandes supérieures et inférieures de Bollinger Bands pour déterminer la direction de la tendance et ouvrir les positions correspondantes.
La stratégie utilise des bandes de Bollinger pour déterminer la direction de la tendance. Les bandes de Bollinger sont construites en calculant l'écart type des prix pour former les bandes supérieure et inférieure. Lorsque les prix franchissent la bande supérieure, cela indique un début de tendance haussière. Lorsque les prix franchissent la bande inférieure, cela indique un début de tendance baissière.
La logique de négociation spécifique est la suivante:
Calculer les bandes moyennes, supérieures et inférieures des bandes de Bollinger.
Quand le prix franchit la bande supérieure, allez long. Quand le prix franchit la bande inférieure, allez court.
Utilisez un stop loss pour contrôler les risques et sortir lorsque les prix commencent à reculer.
Rentre dans la tendance lorsque les prix franchiront à nouveau les bandes.
L'utilisation de bandes de Bollinger pour déterminer les tendances et la combinaison avec un stop loss dynamique peut contrôler efficacement les risques.
Les avantages de cette stratégie sont les suivants:
Utiliser les bandes de Bollinger pour déterminer les tendances, simple et efficace.
La combinaison de l'entrée de rupture et du stop loss dynamique de suivi équilibre la capture de tendance et le contrôle des risques.
Structure de code propre et concise, facile à comprendre et à modifier.
Peu de paramètres, facile à optimiser.
Applicable à différents produits, flexible.
De bons résultats de backtest, avec un potentiel de profit important.
Les principaux risques sont les suivants:
Les bandes de Bollinger reposent uniquement sur les statistiques, les risques de correction de la courbe.
Difficile de distinguer l'expansion de la gamme et les tendances réelles, peut entraîner des jugements erronés.
Les points d'arrêt de perte trop serrés, risque d'être arrêté par des oscillations normales.
Aucune prise en compte des coûts de transaction.
Période limitée de rétro-essai, risques de surmonture.
Les solutions sont les suivantes:
Optimiser les paramètres ou ajouter d'autres indicateurs pour la vérification du signal.
Améliorer l'identification des oscillations et des canaux.
Ajustez dynamiquement le stop loss en fonction de l'ATR, etc.
Ajoutez des commissions, des frais de dérapage.
Élargir la période de backtest, vérification sur plusieurs marchés.
La stratégie peut être optimisée par:
Test des effets combinés de différents indicateurs.
Amélioration de l'identification des oscillations de tendance.
Introduction de l'apprentissage automatique pour l'optimisation des paramètres dynamiques.
Optimisation de la stratégie de stop-loss basée sur les résultats des backtests.
Évaluation et addition des coûts de transaction.
Optimisation de l'espace des paramètres pour des réglages optimaux.
Ajouter la gestion de l'argent au contrôle des risques de position.
Cette stratégie détermine la direction de la tendance avec des bandes de Bollinger et contrôle le risque avec un stop-loss. La logique globale est simple et claire. Elle a une bonne capacité de capture de tendance, mais peut être améliorée en introduisant plus d'indicateurs techniques, en optimisant les paramètres, en ajoutant des coûts, etc. pour la rendre plus robuste.
/*backtest start: 2022-09-15 00:00:00 end: 2023-09-21 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 strategy(title="Bollinger Band Breakout", shorttitle = "BB Strategy",initial_capital=1000, default_qty_type = strategy.percent_of_equity, default_qty_value = 10, commission_type = strategy.commission.percent, commission_value = 0.3, max_bars_back = 1000, overlay=true) // Inputs // sma = input(20, minval=1) mult = input(1.2, minval=0.001, maxval=50) src = input(close) // alert msg // message_long_entry = input("long entry") message_short_entry = input("short entry") // Calculations // basis = sma(close, sma) dev = mult * stdev(close, sma) upper = basis + dev lower = basis - dev // Backtest // fromyear = input(2019, defval = 2019, minval = 1900, maxval = 2100, title = "From Year") toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year") frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month") tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month") fromday = input(1, defval = 01, minval = 01, maxval = 31, title = "From day") today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day") leverage = input(1, "Leverage") term = (time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)) // PLOT // plot(basis, color = color.gray, linewidth = 2) lu = plot(upper, color = color.green, linewidth = 2) ll = plot(lower, color = color.red, linewidth = 2) fill(lu, ll, color = color.gray) // Signals // long = crossover(close, upper) short = crossunder(close, lower) // Strategy entry // strategy.initial_capital = 50000 if (long and term) strategy.entry("long", strategy.long, qty=strategy.initial_capital/close*leverage, when = long and barstate.isconfirmed, alert_message = message_long_entry) if (short and term) strategy.entry("short", strategy.short, qty=strategy.initial_capital/close*leverage, when = short and barstate.isconfirmed, alert_message = message_short_entry) // strategy exit // strategy.exit("long tsl", "long", loss = close*0.075 / syminfo.mintick, trail_points = close*0.05 / syminfo.mintick, trail_offset = close*0.005 / syminfo.mintick) strategy.exit("short tsl", "short", loss = close*0.075 / syminfo.mintick, trail_points = close*0.05 / syminfo.mintick, trail_offset = close*0.005 / syminfo.mintick)