Cette stratégie est conçue sur la base de l'indicateur Bollinger Bands pour créer une stratégie de trading de rupture dynamique. Elle combine les conditions du filtre du corps de la bougie et du filtre de couleur pour rechercher des opportunités d'entrée de rupture autour de la bande inférieure de Bollinger. Les sorties sont basées sur le filtre du corps.
Tout d'abord, calculez la ligne de base et la bande inférieure des bandes de Bollinger en fonction du prix bas:
src = low
basis = sma(src, length)
dev = mult * stdev(src, length)
lower = basis - dev
où src est le prix bas, la longueur est la période de calcul, la base est la moyenne mobile, dev est l'écart type et le bas est la bande inférieure.
mult est généralement réglé sur 2, ce qui signifie que la bande inférieure est à un écart type.
La stratégie comprend deux conditions de filtrage:
Filtre du corps de la bougieUtilisez la taille du corps nbody et sa moyenne d'abody pour déterminer, ne générez un signal de trading que lorsque nbody est supérieur à la moitié d'abody.
Filtre à couleur
Ne pas long lorsque la bougie se ferme positivement (close > open).
Générer un signal long lorsque les conditions suivantes sont remplies:
low < lower // price breaks lower band
close < open or usecol == false // color filter
nbody > abody / 2 or usebod == false // body filter
Lorsque la taille du corps dépasse à nouveau la moitié de la moyenne, position de rapprochement:
close > open and nbody > abody / 2
La stratégie calcule automatiquement la taille de la transaction pour une croissance exponentielle de la position:
lot = strategy.position_size == 0 ? strategy.equity / close * capital / 100 : lot[1]
Ajouter des contraintes pour l'année, le mois et la date afin de limiter les échanges à une plage de dates spécifique:
when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59))
La bande inférieure de Bollinger fournit une zone de soutien dynamique pour capturer les retracements après les tendances.
La combinaison du corps de la bougie et des filtres de couleur évite efficacement les fausses éruptions.
Les positions augmentent de façon exponentielle jusqu'à 100%, gérant automatiquement le risque.
La fixation d'une fourchette de dates réduit le risque associé à la volatilité du marché au cours de périodes spécifiques.
Lorsque la tendance à la hausse est forte, les bandes moyennes et supérieures de BB peuvent augmenter rapidement, provoquant une baisse prolongée.
Combinez avec les indicateurs de tendance, arrêtez la stratégie si vous jugez que le marché est haussier pour éviter un retrait prolongé.
La rupture peut échouer avec un retrait et un nouveau test de la bande inférieure.
Ajoutez un stop-loss en dessous du niveau de support ou ajoutez une logique pour détecter un nouveau test raté pour un stop-loss rapide.
Optimiser le stop loss en dessous du support en fonction des résultats des backtests.
Filtre du corps afin de trouver la période d'absence optimale.
Arrêtez la stratégie en cas de marché haussier.
Cette stratégie combine le support BB, le filtre corps, le filtre couleur et la logique de rupture pour capturer les retraces à haute probabilité.
/*backtest start: 2022-11-14 00:00:00 end: 2023-11-20 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //Noro //2018 //@version=2 strategy(title = "Noro's Wizard Strategy v1.0", shorttitle = "Wizard str 1.0", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 10) //Settings capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Capital, %") length = input(25, defval = 25, minval = 1, maxval = 200, title = "BB Period") usebod = input(false, defval = false, title = "Use Body-Filter") usecol = input(false, defval = false, title = "Use Color-Filter") showar = input(false, defval = false, title = "Show Arrows") fromyear = input(1900, defval = 1900, 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(01, defval = 01, minval = 01, maxval = 31, title = "From day") today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day") //Bollinger src = low mult = 2 basis = sma(src, length) dev = mult * stdev(src, length) lower = basis - dev plot(lower, color = lime, linewidth = 3, title="Bottom Line") //Body Filter nbody = abs(close - open) abody = sma(nbody, 10) body = nbody > abody / 2 or usebod == false //Signals up1 = low < lower and (close < open or usecol == false) and body exit = close > open and nbody > abody / 2 //Arrows needar = up1 and showar plotarrow(needar ? 1 : na) //Trading lot = strategy.position_size == 0 ? strategy.equity / close * capital / 100 : lot[1] if up1 if strategy.position_size < 0 strategy.close_all() strategy.entry("Long", strategy.long, lot, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59))) if time > timestamp(toyear, tomonth, today, 23, 59) or exit strategy.close_all()