Cette stratégie combine les signaux de rupture de la moyenne mobile exponentielle et de l'indicateur MACD, avec des périodes de détention longues et courtes, pour réaliser des bénéfices grâce à la négociation de tendance et de réversion moyenne.
La stratégie repose principalement sur:
Calculer l'EMA à 200 jours pour déterminer la direction de la tendance principale.
Calculer l'EMA à partir du prix médian des prix le plus élevé, le plus bas et le prix de clôture, puis obtenir la différence entre l'EMA et les prix le plus élevé/le plus bas pour construire l'histogramme MACD.
Calculer l'AM de 9 jours de l'histogramme MACD pour construire la ligne de signal MACD.
Un signal d'achat est généré lorsque le MACD traverse au-dessus de la ligne de signal, tandis qu'un signal de vente est généré lorsque le MACD traverse au-dessous de la ligne de signal.
Combinez l'analyse des principales tendances pour déterminer si le marché est au début d'une nouvelle tendance ou juste un renversement à court terme.
La stratégie combine à la fois le suivi de tendance et le trading de réversion moyenne, qui peut à la fois suivre les tendances à long terme et saisir les opportunités d'inversion à court terme pour faire face aux différentes conditions du marché.
Les principaux avantages sont les suivants:
L'EMA de 200 jours détermine la direction de la tendance principale, évitant les transactions contre tendance.
L'indicateur MACD est sensible aux variations de prix à court terme et peut capturer des signaux de renversement rentables.
Différents paramètres pour les composantes du MACD peuvent générer des signaux de négociation à travers les délais.
Intégre des stratégies de stop loss pour contrôler efficacement les pertes d'une seule transaction.
Les principaux risques sont les suivants:
Il peut y avoir un décalage de temps entre les signaux de négociation d'indicateurs à long terme et à court terme.
L'indicateur MACD, en tant qu'indicateur de réversion moyenne, peut être moins performant en période de forte tendance.
Le placement incorrect d'un stop loss peut entraîner un déclenchement prématuré du stop loss ou une perte trop importante.
Des signaux de fuite trop fréquents peuvent introduire plus de faux signaux.
Les solutions:
Optimiser les paramètres du MACD pour ajuster la sensibilité de l'indicateur.
Combinez d'autres indicateurs pour déterminer les conditions du marché, évitez de suivre aveuglément les signaux MACD.
Testez et optimisez les paramètres de la stratégie de stop loss.
Ajoutez des filtres pour réduire les faux signaux.
La stratégie peut être optimisée par:
Optimiser les paramètres de la moyenne mobile et du MACD pour obtenir des signaux de trading plus efficaces.
Ajoutez d'autres indicateurs comme le volume, le RSI pour améliorer l'efficacité de la stratégie.
Mettre en place des règles de taille de position plutôt que de quantité fixe pour chaque transaction.
Ajouter des règles de sortie plus avancées en plus du stop loss, par exemple l'objectif de profit, le trailing stop.
Test en arrière avec des réglages de frais plus réalistes pour simuler le trading réel.
Effectuer une analyse de marche avant, un test de robustesse pour améliorer la fiabilité.
L'essence réside dans le réglage approprié des paramètres et la compréhension correcte des principales tendances. En optimisant les paramètres, en ajoutant des filtres, la stratégie peut améliorer le jugement des signaux de trading et réaliser des bénéfices plus stables.
/*backtest start: 2022-12-01 00:00:00 end: 2023-12-07 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 strategy("Strategia EMA + Impulse MACD", shorttitle="EMA+IMACD", overlay=true) // Impostazioni ema_length = input(200, title="Periodo EMA a 200", type=input.integer) lengthMA = input(34, title="Periodo EMA", type=input.integer) lengthSignal = input(9, title="Periodo Signal", type=input.integer) lengthImpulseMACD = input(12, title="Periodo Impulse MACD", type=input.integer) lengthImpulseMACDSignal = input(9, title="Periodo Impulse MACD Signal", type=input.integer) stopLossPeriod = input(20, title="Periodo Stop Loss", type=input.integer) var float ema200 = na if bar_index >= ema_length ema200 := ema(close, ema_length) // Impulse MACD var float hi = na var float lo = na var float mi = na var float impulseMACD = na var float impulseMACDSignal = na calc_smma(src, len) => var float smma = na if na(smma) smma := sma(src, len) else smma := (smma[1] * (len - 1) + src) / len smma calc_zlema(src, length) => ema1 = ema(src, length) ema2 = ema(ema1, length) d = ema1 - ema2 ema1 + d if bar_index >= lengthMA src = hlc3 hi := calc_smma(high, lengthMA) lo := calc_smma(low, lengthMA) mi := calc_zlema(src, lengthMA) impulseMACD := (mi > hi) ? (mi - hi) : (mi < lo) ? (mi - lo) : 0 impulseMACDSignal := sma(impulseMACD, lengthSignal) // Calcolo dello stop loss var float stopLossLong = na var float stopLossShort = na stopLossLong := lowest(low, stopLossPeriod) stopLossShort := highest(high, stopLossPeriod) // Calcolo del take profit var float takeProfitLong = na var float takeProfitShort = na if not na(stopLossLong) takeProfitLong := close + (close - stopLossLong) * 1.5 if not na(stopLossShort) takeProfitShort := close - (stopLossShort - close) * 1.5 // Condizioni per aprire una posizione long longCondition = not na(ema200) and not na(impulseMACD) and not na(impulseMACDSignal) and close > ema200 and impulseMACD < 0 and impulseMACDSignal < 0 and crossover(impulseMACD, impulseMACDSignal) // Condizioni per aprire una posizione short shortCondition = not na(ema200) and not na(impulseMACD) and not na(impulseMACDSignal) and close < ema200 and impulseMACD > 0 and impulseMACDSignal > 0 and crossunder(impulseMACD, impulseMACDSignal) // Disegna l'EMA 200 sul grafico plot(ema200, color=color.blue, title="EMA 200") // Imposta lo stop loss e il take profit strategy.entry("Long", strategy.long, when=longCondition) strategy.entry("Short", strategy.short, when=shortCondition) strategy.exit("Take Profit/Stop Loss Long", from_entry="Long", stop=stopLossLong, limit=takeProfitLong) strategy.exit("Take Profit/Stop Loss Short", from_entry="Short", stop=stopLossShort, limit=takeProfitShort) // Impulse MACD plot(0, color=color.gray, linewidth=1, title="MidLine") plot(impulseMACD, color=color.red, linewidth=2, title="ImpulseMACD", style=plot.style_histogram) plot(impulseMACDSignal, color=color.blue, linewidth=2, title="ImpulseMACDSignal", style=plot.style_histogram) // Disegna le operazioni long e short sul grafico plotshape(series=longCondition, location=location.belowbar, color=color.green, style=shape.triangleup, title="Long Entry") plotshape(series=shortCondition, location=location.abovebar, color=color.red, style=shape.triangledown, title="Short Entry")