Stratégie de filtrage de tendance de la bande de Bollinger

Auteur:ChaoZhang est là., Date: 2023-10-25 à 15h20
Les étiquettes:

img

Cette stratégie génère des signaux de trading basés sur des bandes de Bollinger et des moyennes mobiles doubles, avec un filtrage de tendance visant un taux de gain élevé et un bon ratio profit-perte.

La logique de la stratégie

  1. Utilisez les bandes supérieures, moyennes et inférieures de la bande de Bollinger pour la génération de signaux longs / courts. Vendez lorsque le prix touche la bande supérieure, achetez lorsqu'il touche la bande inférieure.

  2. Utilisez des moyennes mobiles à 20 périodes à moyen terme et à 60 périodes à long terme pour déterminer la direction de la tendance.

  3. Ajustez dynamiquement la position de stop loss en fonction de la largeur de la bande de Bollinger. Lorsque la largeur est supérieure à 0,5%, arrêtez la perte à la bande inférieure. Lorsque celle-ci est inférieure à 0,5%, réduisez la perte de stop à la moitié de la bande inférieure.

  4. Conditions d'entrée: briser la bande inférieure comme signal d'achat pendant la tendance haussière. briser la bande supérieure comme signal de vente pendant la tendance baissière.

  5. Conditions de sortie: Profitez lorsque vous touchez la bande supérieure ou la courte MA sur les longs. Profitez lorsque vous touchez la bande inférieure ou la courte MA sur les shorts.

  6. Conditions de stop loss: Stop out lorsque le prix dépasse la fourchette dynamique inférieure sur les longs. Stop out lorsque le prix dépasse la fourchette dynamique supérieure sur les shorts.

Les avantages

  1. L'utilisation de doubles MAs pour déterminer la tendance aide à filtrer le bruit des marchés qui ne sont pas en tendance ou qui sont liés à la fourchette.

  2. La bande moyenne BB fournit un support/résistance, les bandes supérieures/inférieures servent de niveaux de stop loss dynamiques pour contrôler le risque.

  3. L'ajustement de la plage d'arrêt-perte en fonction de la largeur BB réduit les chances d'être arrêté tout en maintenant un arrêt raisonnable.

  4. Le trading dans la direction de la tendance conduit à un taux de gain plus élevé.

Les risques

  1. Les doubles MA peuvent générer de fausses ruptures fréquemment, manquant des points tournants de tendance.

  2. Les BB peuvent être piégés dans des marchés instables et sans tendance.

  3. Le stop loss situé à proximité des niveaux de support/résistance susceptibles d'être retirés peut permettre une plage de stop loss plus large.

  4. Incapable de capitaliser efficacement sur les retraits à court terme.

Des possibilités d'amélioration

  1. Optimiser les périodes d'octroi d'autorisation afin de trouver la meilleure adaptation aux conditions du marché.

  2. Optimiser le paramètre du multiplicateur BB pour équilibrer le stop loss.

  3. Ajouter d'autres indicateurs de confirmation multifactorielle pour améliorer la qualité du signal.

  4. Incorporer le volume/l'élan pour confirmer la tendance, éviter les divergences.

  5. Optimisation de la gestion de l'argent, par exemple, stop loss fractionnaire fixe et fixe pour contrôler le risque de transaction unique.

  6. Gestion des chocs de prix, par exemple des écarts importants au cours d'une nuit.

Résumé

Il s'agit d'une stratégie globale robuste utilisant des double MA pour la direction de la tendance et des BB pour le support/résistance et les arrêts dynamiques. Des limitations existent comme de faux signaux de tendance et des arrêts trop proches. D'autres optimisations peuvent être effectuées sur le système MA, la stratégie de stop loss, la gestion de l'argent, etc. pour augmenter la robustesse dans diverses conditions de marché.


/*backtest
start: 2022-10-18 00:00:00
end: 2023-10-24 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
strategy(title="yuthavithi BB Scalper 2 strategy", overlay=true)

len = input(20, minval=1, title="Length")
multiplier = input(4, minval=1, title="multiplier")
trendTimeFrame = input(60, minval=1, title="Trend Time Frame")
useTrendFilter = input(true, type=bool, title = "Use Trend Filter")

src = input(close, title="Source")
out = sma(src, len)
//plot(out, title="SMA", color=blue)

stdOut = stdev(close, len)
bbUpper = out + stdOut * multiplier
bbLower = out - stdOut * multiplier
bbUpper2 = out + stdOut * (multiplier / 2)
bbLower2 = out - stdOut * (multiplier / 2)
bbUpperX2 = out + stdOut * multiplier * 2
bbLowerX2 = out - stdOut * multiplier * 2
bbWidth = (bbUpper - bbLower) / out


closeLongTerm = request.security(syminfo.tickerid, tostring(trendTimeFrame), close)
smaLongTerm = request.security(syminfo.tickerid, tostring(trendTimeFrame), sma(close,20))

//plot(smaLongTerm, color=red)

trendUp = useTrendFilter ? (closeLongTerm > smaLongTerm) : true
trendDown = useTrendFilter? (closeLongTerm < smaLongTerm) : true

bearish = ((cross(close,bbUpper2) == 1) or (cross(close,out) == 1)) and (close[1] > close) and trendDown
bullish = ((cross(close,bbLower2) == 1) or (cross(close,out) == 1)) and (close[1] < close) and trendUp


closeBuy = (high[1] > bbUpper[1]) and (close < bbUpper) and (close < open) and trendUp 
closeSell = (((low[1] < bbLower[1]) and (close > bbLower)) or ((low[2] < bbLower[2]) and (close[1] > bbLower[1]))) and (close > open) and trendDown


cutLossBuy = iff(bbWidth > 0.005, (low < bbLower) and (low[1] > bbLower[1]) and trendUp, (low < bbLowerX2) and (low[1] > bbLowerX2[1]) and trendUp)
cutLossSell = iff(bbWidth > 0.005, (high > bbUpper) and (high[1] < bbUpper[1]) and trendDown, (high > bbUpperX2) and (high[1] < bbUpperX2[1]) and trendDown)


if (bullish)
    strategy.entry("Buy", strategy.long, comment="Buy")

if (bearish)
    strategy.entry("Sell", strategy.short, comment="Sell")
    

strategy.close("Buy", closeBuy or cutLossBuy)
   
strategy.close("Sell", closeSell or cutLossSell)


Plus de