
La stratégie de double entrée EMA-cross et Bollinger Bands est un système de trading quantitatif qui combine le suivi de la tendance et la rupture de la volatilité. La stratégie utilise principalement la croisée des moyennes mobiles de l’indice (EMA) pour juger de la tendance du marché, tout en utilisant les bandes de Bollinger (Bollinger Bands) pour identifier les opportunités de rupture potentielles. Cette méthode vise à capturer les tendances du marché fortes et à fournir des points d’entrée supplémentaires grâce à la rupture des bandes de Bollinger, augmentant ainsi les opportunités de trading et optimisant la gestion des fonds.
EMA croisée: la stratégie utilise les EMA de 12 cycles et de 26 cycles pour déterminer la direction de la tendance. Lorsque l’EMA rapide (en 12 cycles) est traversée par l’EMA lente (en 26 cycles), un signal de coupe est généré; le contraire produit un signal de coupe.
Brines: la stratégie utilise 55 cycles, avec un Brines de 0.9 de décalage standard. Lorsque le prix est sur la voie de la rupture, il offre une entrée supplémentaire s’il est déjà dans une tendance à plusieurs têtes.
Logistique d’entrée:
La logique de sortie:
Paramètres de stop-loss:
Gestion des risques :
L’analyse multidimensionnelle: une combinaison de stratégies de suivi de la tendance (EMA) et de rupture de la volatilité (Burin) améliore la fiabilité des signaux de négociation.
Mécanisme d’entrée flexible: en plus des principaux signaux de croisement EMA, la rupture de la ceinture de Brin offre des opportunités d’entrée supplémentaires, augmentant l’adaptabilité de la stratégie.
Gestion dynamique des risques: utilisation de l’ATR pour définir des arrêts de perte et ajuster la taille des positions, afin de permettre à la stratégie de mieux s’adapter à la volatilité dans différentes conditions de marché.
Perception de l’état du marché: pour juger de l’état du marché à travers la courbe de Brin, vous pouvez choisir de suspendre la négociation dans des conditions défavorables, réduire le risque.
Optimisation de la gestion des fonds: un contrôle plus précis des fonds grâce à la gestion des risques en pourcentage et à l’ajustement dynamique des positions ATR.
Une grande personnalisation: plusieurs paramètres peuvent être ajustés, tels que les cycles EMA, les réglages des bandes de Brin, les multiples ATR, etc., ce qui permet aux stratégies de s’adapter à différentes variétés de transactions et environnements de marché.
Risque de renversement de tendance: la performance est bonne dans les marchés en forte tendance, mais il peut y avoir de fréquents signaux de fausse rupture dans les marchés en turbulence.
Risque de surtransaction: une rupture de la ceinture de Brin peut entraîner une surproduction de signaux de transaction et augmenter les coûts de transaction.
Risque de glissement: dans les marchés très volatils, les prix d’entrée et de sortie peuvent être très éloignés des attentes.
Sensitivité des paramètres: les performances des stratégies peuvent être sensibles aux changements de paramètres tels que les cycles EMA, les réglages de la bande Brin, etc., et nécessitent une optimisation et une rétro-évaluation minutieuses.
La dépendance aux conditions du marché: les stratégies peuvent être incohérentes selon les cycles et les conditions de marché.
Risques de gestion des fonds: Bien que la gestion des risques en pourcentage soit utilisée, il est possible de faire face à un retrait de compte plus important en cas de pertes continues.
Analyse de plusieurs périodes: introduire des confirmations de tendance à plus longues périodes, telles que les EMA périodiques ou lunaires, pour réduire les faux signaux.
Filtrage de volatilité: Ajuster les paramètres des bandes de Brin ou suspendre la négociation dans un environnement de faible volatilité pour éviter les transactions excessives sur les marchés horizontaux.
Ajout d’indicateurs de dynamique tels que le RSI ou le MACD pour confirmer la force de la tendance et les signaux de revers potentiels.
Optimiser les mécanismes de sortie: envisagez d’utiliser des objectifs de profit dynamiques basés sur le suivi des pertes ou sur l’ATR pour mieux localiser les bénéfices.
Classification des états du marché: développement d’un système de classification des états du marché qui utilise différents paramètres dans différents états du marché.
Optimisation de l’apprentissage automatique: l’utilisation d’algorithmes d’apprentissage automatique pour ajuster dynamiquement les paramètres de la stratégie en fonction des différentes conditions du marché.
Analyse de la corrélation: en négociant sur plusieurs variétés, il faut tenir compte des corrélations entre les variétés pour optimiser les caractéristiques de risque-rendement de l’ensemble du portefeuille.
Introduction de facteurs fondamentaux: Pour les actions ou les marchandises, envisagez d’ajouter des indicateurs fondamentaux pertinents pour améliorer la qualité du signal d’entrée.
La stratégie de double entrée EMA-cross-Bulling est un système de trading quantitatif qui combine le suivi de la tendance et la conception de la rupture de la volatilité. Il capture les principales tendances par l’intermédiaire de l’EMA-cross et offre des opportunités d’entrée supplémentaires en utilisant la rupture de la ceinture de Bulling, tout en utilisant une méthode de gestion dynamique des risques pour optimiser l’utilisation des fonds. L’avantage de la stratégie réside dans son approche d’analyse multidimensionnelle et sa gestion des risques flexible, mais elle est également exposée à des risques de trading tels que le renversement de la tendance et les excès.
Il y a encore beaucoup de place pour l’optimisation de la stratégie, notamment par l’introduction d’algorithmes d’apprentissage automatique et d’un système de classification des états de marché, ce qui pourrait améliorer considérablement l’adaptabilité et la stabilité de la stratégie. Cependant, dans la pratique, il est nécessaire de faire des tests complets de rétroaction et de prospective et d’ajuster les paramètres en fonction des variétés de transactions et de l’environnement du marché.
Dans l’ensemble, il s’agit d’un cadre stratégique de trading quantifié conçu de manière rationnelle et potentielle. Grâce à une optimisation continue et une gestion minutieuse, il a le potentiel d’être un système de trading robuste, adapté aux investisseurs qui cherchent à contrôler les risques tout en capturant les tendances.
/*backtest
start: 2023-07-23 00:00:00
end: 2024-07-28 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("EMA Crossover with BB Double Entry", overlay=true, initial_capital=1000, default_qty_type=strategy.cash, default_qty_value=100)
// Input parameters
fastLength = input.int(12, "Fast EMA Length")
slowLength = input.int(26, "Slow EMA Length")
atrPeriod = input.int(14, "ATR Period")
atrMultiplier = input.float(1.0, "ATR Multiplier")
useATRStopLoss = input.bool(true, "Use ATR Stop Loss")
stopLossDays = input.int(5, "Number of days for stop loss", minval=1, maxval=50)
riskPerTrade = input.float(3.0, "Risk per trade (%)", minval=0.1, maxval=5, step=0.1)
bbRiskPerTrade = input.float(1.5, "Risk for BB breakout trade (%)", minval=0.1, maxval=5, step=0.1)
// Bollinger Bands parameters
bbLength = input.int(55, "BB Length")
bbMult = input.float(0.9, "BB Standard Deviation")
useBBPauseResume = input.bool(false, "Use BB for Pause/Resume trading")
// Backtesting dates
startDate = input(timestamp("2020-01-01"), "Start Date")
endDate = input(timestamp("9999-12-31"), "End Date")
// Calculate EMAs
fastEMA = ta.ema(close, fastLength)
slowEMA = ta.ema(close, slowLength)
// Calculate ATR
atr = ta.atr(atrPeriod)
// Calculate Bollinger Bands
bbBasis = ta.sma(close, bbLength)
bbDev = bbMult * ta.stdev(close, bbLength)
bbUpper = bbBasis + bbDev
bbLower = bbBasis - bbDev
// Define trading conditions
longCondition = ta.crossover(fastEMA, slowEMA)
shortCondition = ta.crossunder(fastEMA, slowEMA)
bullish = fastEMA > slowEMA
bearish = fastEMA < slowEMA
// Bollinger Bands breakout
bbBreakout = close > bbUpper and close[1] <= bbUpper[1]
// Calculate lowest low for stop loss
lowestLow = ta.lowest(low, stopLossDays)
// Variables to store entry price and stop loss
var float entryPrice = na
var float stopLoss = na
var bool inPosition = false
var bool pauseTrading = false
// Entry logic
entryConditions = (longCondition or (bbBreakout and bullish)) and
(not useBBPauseResume or close > bbBasis) and
not pauseTrading
if entryConditions and not inPosition
entryPrice := close
atrStopLoss = close - (atr * atrMultiplier)
lowStopLoss = lowestLow
stopLoss := useATRStopLoss ? atrStopLoss : lowStopLoss
riskAmount = strategy.equity * (riskPerTrade / 100)
positionSize = riskAmount / (close - stopLoss)
strategy.entry("Long", strategy.long, qty=positionSize)
inPosition := true
pauseTrading := false
alert("BUY," + syminfo.ticker + ",EntryPrice=" + str.tostring(close) + ",StopLoss=" + str.tostring(stopLoss) + ",PositionSize=" + str.tostring(positionSize), alert.freq_once_per_bar_close)
// Additional entry on BB breakout
if inPosition and bbBreakout and bullish and (not useBBPauseResume or close > bbBasis)
bbRiskAmount = strategy.equity * (bbRiskPerTrade / 100)
bbPositionSize = bbRiskAmount / (close - stopLoss)
strategy.entry("Long_BB", strategy.long, qty=bbPositionSize)
alert("ADD," + syminfo.ticker + ",EntryPrice=" + str.tostring(close) + ",StopLoss=" + str.tostring(stopLoss) + ",PositionSize=" + str.tostring(bbPositionSize), alert.freq_once_per_bar_close)
// Exit logic
if shortCondition or (useBBPauseResume and inPosition and close < bbBasis)
if shortCondition
strategy.close_all(comment="EMA Crossdown")
inPosition := false
pauseTrading := false
alert("SELL," + syminfo.ticker + ",Reason=EMA_Crossdown", alert.freq_once_per_bar_close)
else if useBBPauseResume
strategy.close_all(comment="Close under BB basic")
pauseTrading := true
alert("SELL," + syminfo.ticker + ",Reason=Below_BB_Basic", alert.freq_once_per_bar_close)
entryPrice := na
stopLoss := na
// Resume trading if price closes above BB basic
if useBBPauseResume and pauseTrading and close > bbBasis
pauseTrading := false
alert("RESUME," + syminfo.ticker, alert.freq_once_per_bar_close)
// Stop loss
if strategy.position_size > 0
strategy.exit("Stop Loss", "Long", stop=stopLoss)
strategy.exit("Stop Loss", "Long_BB", stop=stopLoss)
if close <= stopLoss
alert("SELL," + syminfo.ticker + ",Reason=Stop_Loss", alert.freq_once_per_bar_close)
// Plotting
plot(fastEMA, color=color.new(color.blue, 0), title="Fast EMA")
plot(slowEMA, color=color.new(color.red, 0), title="Slow EMA")
plot(bbUpper, color=color.new(color.green, 50), title="BB Upper")
plot(bbLower, color=color.new(color.green, 50), title="BB Lower")
plot(bbBasis, color=color.new(color.yellow, 50), title="BB Basic")
plot(strategy.position_size > 0 ? stopLoss : na, color=color.red, style=plot.style_cross, linewidth=2, title="Stop Loss")
// Alert conditions
alertcondition(entryConditions, title="Buy Alert", message="Buy {{ticker}}")
alertcondition(bbBreakout and inPosition and bullish and (not useBBPauseResume or close > bbBasis), title="Add Position Alert", message="Add Position {{ticker}}")
alertcondition(shortCondition, title="Sell Alert (EMA)", message="Sell {{ticker}} (EMA crossdown)")
alertcondition(useBBPauseResume and inPosition and close < bbBasis, title="Pause Alert", message="Pause trading {{ticker}} (Close under BB basic)")
alertcondition(useBBPauseResume and pauseTrading and close > bbBasis, title="Resume Alert", message="Resume trading {{ticker}} (Close above BB basic)")