Stratégie de rupture de l'élan

Auteur:ChaoZhang est là., Date: le 14 novembre 2023 à 11 h 19:05
Les étiquettes:

img

Résumé

Cette stratégie utilise les bandes de Bollinger combinées avec l'indicateur ATR et les lignes EMA pour déterminer les signaux. Elle génère des signaux d'achat lorsque le prix franchit la bande supérieure de Bollinger et franchit rapidement la ligne EMA. Elle génère des signaux de vente lorsque le prix franchit la bande inférieure de Bollinger et franchit rapidement la ligne EMA.

La logique de la stratégie

  1. Calculer la ligne médiane de Bollinger, la bande supérieure et la bande inférieure.Déviation type n-période, bande inférieure est la ligne médiane - mdéviation type de n périodes.

  2. Calculer l'indicateur ATR pour suivre le stop loss.

  3. Calculer les lignes EMA d'une période et de n périodes pour déterminer la dynamique des prix.

  4. Lorsque le prix dépasse rapidement la bande supérieure de Bollinger et la ligne EMA, un signal d'achat est généré.

  5. Lorsque le prix traverse rapidement la bande inférieure de Bollinger et la ligne EMA, un signal de vente est généré.

  6. L'indicateur ATR définit des points d'arrêt de perte, suivant la direction de la rupture du prix pour éviter d'être piégé.

Analyse des avantages

  1. Les bandes de Bollinger combinées à l'ATR stop loss peuvent contrôler efficacement le risque.

  2. Les lignes rapides et lentes de l'EMA déterminent la direction du momentum, évitant ainsi une fausse rupture.

  3. Les paramètres réglables s'adaptent à différents environnements de marché.

  4. Signaux d'achat/vente clairs avec une fréquence de négociation élevée, adaptés aux transactions à court terme.

  5. L'indicateur ATR suit l'arrêt des pertes en temps opportun.

Analyse des risques

  1. Les bandes de Bollinger étroites peuvent entraîner des transactions plus bruyantes.

  2. Le paramètre ATR réglé trop bas peut entraîner une perte d'arrêt trop proche entraînant un piégeage.

  3. Les paramètres de l'EMA doivent être ajustés en fonction des différents effets du cycle.

  4. Un marché oscillant peut générer plus de transactions, il faut être prudent.

  5. Le suivi de l'arrêt des pertes peut parfois être trop agressif, provoquant une expansion des pertes.

Optimisation

  1. Combiner avec d'autres indicateurs pour filtrer les signaux de négociation, par exemple RSI pour les surachats/survente, KDJ pour les divergences, etc.

  2. Considérez l'ajustement dynamique des paramètres de Bollinger basés sur l'ATR pour s'adapter aux fluctuations de prix.

  3. Testez différents paramètres du cycle EMA pour obtenir la meilleure combinaison de paramètres.

  4. Ajustez intelligemment les paramètres ATR en fonction de la volatilité pour éviter un stop loss agressif.

  5. Envisager d'intégrer des modèles d'apprentissage en profondeur pour faciliter le timing des décisions d'achat/vente.

Résumé

Cette stratégie a une logique claire en utilisant des bandes de Bollinger pour capturer la rupture de prix, ATR pour définir une plage de stop loss, EMA pour déterminer la direction du momentum pour un jugement complet de la rupture de momentum, ce qui peut capturer efficacement les tendances des prix à court terme.


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

//@version=4
strategy(title="UT Bot Strategy", overlay = true)
//CREDITS to HPotter for the orginal code. The guy trying to sell this as his own is a scammer lol. 
// Inputs
a = input(1,     title = "Key Vaule. 'This changes the sensitivity'")
c = input(10,    title = "ATR Period")
h = input(false, title = "Signals from Heikin Ashi Candles")

src = h ? security(heikinashi(syminfo.tickerid), timeframe.period, close, lookahead = false) : close

length = input(20, minval=1)
mult = input(2.0, minval=0.001, maxval=50, title="StdDev")
basis = sma(src, length)
dev = mult * stdev(src, length)
upper = basis + dev
lower = basis - dev
bbr = (src - lower)/(upper - lower)
// plot(bbr, "Bollinger Bands %B", color=#26A69A)
// band1 = hline(1, "Overbought", color=#787B86, linestyle=hline.style_dashed)
// hline(0.5, "Middle Band", color=color.new(#787B86, 50))
// band0 = hline(0, "Oversold", color=#787B86, linestyle=hline.style_dashed)
// fill(band1, band0, color=color.rgb(38, 166, 154, 90), title="Background")








xATR  = atr(c)
nLoss = a * xATR




xATRTrailingStop = 0.0
xATRTrailingStop := iff(src > nz(xATRTrailingStop[1], 0) and src[1] > nz(xATRTrailingStop[1], 0), max(nz(xATRTrailingStop[1]), src - nLoss),
   iff(src < nz(xATRTrailingStop[1], 0) and src[1] < nz(xATRTrailingStop[1], 0), min(nz(xATRTrailingStop[1]), src + nLoss), 
   iff(src > nz(xATRTrailingStop[1], 0), src - nLoss, src + nLoss)))
 
pos = 0   
pos :=	iff(src[1] < nz(xATRTrailingStop[1], 0) and src > nz(xATRTrailingStop[1], 0), 1,
   iff(src[1] > nz(xATRTrailingStop[1], 0) and src < nz(xATRTrailingStop[1], 0), -1, nz(pos[1], 0))) 
   
xcolor = pos == -1 ? color.red: pos == 1 ? color.green : color.blue 

ema   = ema(src,1)
emaFast   = ema(src,144)
emaSlow   = ema(src,576)
sma       =  sma(src, c)

above = crossover(ema, xATRTrailingStop)
below = crossover(xATRTrailingStop, ema)

smaabove = crossover(src, sma)
smabelow = crossover(sma, src)


buy  = src > xATRTrailingStop and above and (bbr>20  or bbr<80)
sell = src < xATRTrailingStop and below  and  (bbr>20  or bbr<80)

// buy  = src > xATRTrailingStop 
// sell = src < xATRTrailingStop 


barbuy  = src > xATRTrailingStop 
barsell = src < xATRTrailingStop 

// plot(emaFast , color = color.rgb(243, 206, 127), title="emaFast")

plot(xATRTrailingStop, color = color.rgb(233, 233, 232), title="xATRTrailingStop")

plotshape(buy,  title = "Buy",  text = 'Buy',  style = shape.labelup,   location = location.belowbar, color= color.green, textcolor = color.white, transp = 0, size = size.tiny)
plotshape(sell, title = "Sell", text = 'Sell', style = shape.labeldown, location = location.abovebar, color= color.red,   textcolor = color.white, transp = 0, size = size.tiny)


// plotshape(buy,  title = "Sell",  text = 'Sell',  style = shape.labelup,   location = location.belowbar, color= color.green, textcolor = color.white, transp = 0, size = size.tiny)
// plotshape(sell, title = "buy", text = 'buy', style = shape.labeldown, location = location.abovebar, color= color.red,   textcolor = color.white, transp = 0, size = size.tiny)

barcolor(barbuy  ? color.green : na)
barcolor(barsell ? color.red   : na)

// strategy.entry("short",   false, when = buy)
// strategy.entry("long ", true, when = sell)


strategy.entry("long",   true, when = buy)
strategy.entry("short ", false, when = sell)

Plus de