Cette stratégie utilise la moyenne mobile exponentielle (EMA) et les bandes de Bollinger (BB) pour identifier les opportunités de trading potentielles sur le marché. Lorsque le prix dépasse la bande de Bollinger supérieure ou inférieure et que des conditions spécifiques sont remplies, la stratégie génère des signaux d'achat ou de vente.
Le noyau de cette stratégie est d'utiliser l'EMA et les bandes de Bollinger de 5 jours pour déterminer les tendances et la volatilité du marché. Lorsque le prix dépasse la bande de Bollinger supérieure et que le niveau le plus élevé de la bougie précédente est au-dessus de l'EMA de 5 jours, la stratégie génère un signal de vente. Inversement, lorsque le prix dépasse la bande de Bollinger inférieure et que le niveau le plus bas de la bougie précédente est au-dessous de l'EMA de 5 jours, la stratégie génère un signal d'achat. Cette approche aide à identifier les retours de tendance potentiels ou les points de rupture.
Une fois qu'un commerce est entré, la stratégie définit un niveau de stop loss et un niveau de prix cible. Le stop loss est placé dans la direction opposée au prix d'entrée pour limiter les pertes potentielles. Le niveau de prix cible est calculé sur la base d'un nombre fixe de points (par exemple, 1000 points) pour verrouiller les bénéfices attendus. Si le prix atteint le niveau de stop loss ou le niveau de prix cible, la stratégie ferme le commerce et quitte la position.
La stratégie EMA et Bollinger Bands Breakout exploite deux indicateurs techniques couramment utilisés pour capturer les mouvements de prix importants sur le marché. La stratégie a des conditions d'entrée claires, des mesures de gestion des risques et des objectifs de profit, ce qui la rend facile à comprendre et à mettre en œuvre. Cependant, la performance de la stratégie peut être influencée par la volatilité du marché et les conditions sans tendance. En introduisant des paramètres adaptatifs, des mécanismes de filtrage des signaux et une optimisation des paramètres, la robustesse et la rentabilité de la stratégie peuvent être encore améliorées.
/*backtest start: 2024-05-01 00:00:00 end: 2024-05-31 23:59:59 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("Nifty Bank Strategy", overlay=true) // Parameters lengthEMA = 5 lengthBB = 20 multBB = 1.5 targetPoints = 1000 // Calculate 5-day EMA ema5 = ta.ema(close, lengthEMA) // Calculate Bollinger Bands (length 20, multiplier 1.5) basis = ta.sma(close, lengthBB) dev = multBB * ta.stdev(close, lengthBB) upperBB = basis + dev lowerBB = basis - dev // Define strategy variables var float entryPrice = na var float stopLoss = na var float targetPrice = na var bool inTrade = false var bool isLong = false var float triggerHigh = na var float triggerLow = na var float triggerClose = na if not inTrade // Short Entry Trigger Condition if low > ema5 and low > upperBB and high > upperBB triggerLow := low triggerHigh := high triggerClose := close label.new(bar_index, high, "Waiting for short trigger", color=color.yellow) // Long Entry Trigger Condition else if high < ema5 and high < lowerBB and low < lowerBB triggerHigh := high triggerLow := low triggerClose := close label.new(bar_index, low, "Waiting for long trigger", color=color.yellow) // Check for Short Entry if not inTrade and na(triggerClose) == false and close < triggerClose if low < triggerLow entryPrice := close stopLoss := triggerHigh targetPrice := entryPrice - targetPoints strategy.entry("Short", strategy.short) label.new(bar_index, high, "Short", color=color.red, style=label.style_label_down) inTrade := true isLong := false triggerLow := na triggerHigh := na triggerClose := na // Check for Long Entry if not inTrade and na(triggerClose) == false and close > triggerClose if high > triggerHigh entryPrice := close stopLoss := triggerLow targetPrice := entryPrice + targetPoints strategy.entry("Long", strategy.long) label.new(bar_index, low, "Long", color=color.green, style=label.style_label_up) inTrade := true isLong := true triggerLow := na triggerHigh := na triggerClose := na // Manage Short Trade if inTrade and not isLong if high >= stopLoss strategy.close("Short", comment="SL Hit") label.new(bar_index, high, "SL Hit", color=color.red, style=label.style_label_down) inTrade := false else if low <= targetPrice strategy.close("Short", comment="Target Hit") label.new(bar_index, low, "Target Hit", color=color.green, style=label.style_label_up) inTrade := false // Manage Long Trade if inTrade and isLong if low <= stopLoss strategy.close("Long", comment="SL Hit") label.new(bar_index, low, "SL Hit", color=color.red, style=label.style_label_down) inTrade := false else if high >= targetPrice strategy.close("Long", comment="Target Hit") label.new(bar_index, high, "Target Hit", color=color.green, style=label.style_label_up) inTrade := false // Plotting plot(ema5, color=color.orange, title="5-day EMA") plot(upperBB, color=color.red, title="Upper Bollinger Band") plot(lowerBB, color=color.purple, title="Lower Bollinger Band") // Plot trade entry and exit points plotshape(series=inTrade and isLong ? entryPrice : na, location=location.belowbar, color=color.green, style=shape.labelup, title="Buy Signal") plotshape(series=inTrade and not isLong ? entryPrice : na, location=location.abovebar, color=color.red, style=shape.labeldown, title="Sell Signal")