Cette stratégie combine les indicateurs MACD et DEMA à double voie pour générer des signaux de trading à partir de croisements.
Calculer la ligne rapide DEMAfast comme valeur DEMA du prix avec la longueur de la période fastmacd.
Calculer la ligne lente DEMAslow comme valeur DEMA du prix avec la durée de la période slowmacd.
La ligne MACD est la différence entre les lignes rapides et lentes: DEMAfast - DEMAAslow.
La ligne de signal est la valeur DEMA de la ligne MACD avec la période signalalmacd.
Les croisements entre le MACD et les lignes de signal génèrent des signaux de trading: long sur la croix dorée, short sur la croix de la mort.
Ajouter des filtres de date pour générer uniquement des signaux dans la plage de dates spécifiée.
Les principaux avantages de cette stratégie sont les suivants:
La combinaison du MACD et du DEMA complète les indicateurs.
La conception à double rails de DEMA réduit le retard et le bruit de l'indicateur MACD.
Les signaux de croisement MACD sont faciles à interpréter, propres et simples.
L'établissement flexible des filtres de date répond à différents besoins stratégiques.
Les paramètres du MACD peuvent être optimisés pour assurer la flexibilité dans les conditions de marché.
Principaux risques de cette stratégie:
Le MACD a du mal à suivre la tendance des marchés.
Les croisements peuvent générer de faux signaux, nécessitent un filtrage efficace.
La stratégie de stop-loss n'est pas solide, sujette à des stops surdimensionnés.
L'optimisation des paramètres n'est pas suffisamment complète, les performances diffèrent beaucoup entre les produits.
Les filtres de date sont trop rigides, nécessitent un réglage dynamique.
Les solutions:
Ajoutez un indicateur de dynamique pour éviter le marché latéral.
Ajoutez des conditions de prix pour filtrer les faux croix.
Mettez un stop-loss initial et un stop-loss suivant raisonnables.
Paramètres d'essai sur tous les produits, optimisation dynamique.
Ajustez les dates des filtres en fonction des conditions en temps réel.
Quelques améliorations potentielles de la stratégie:
Ajoutez un filtre de volume pour les signaux croisés.
Optimiser les combinaisons de paramètres MACD pour différents produits.
Ajoutez des stratégies d'arrêt comme le stop-loss fixe ou le stop-loss à la traîne.
Ajustez dynamiquement le stop loss en fonction de la volatilité du marché.
Suivre la force de la tendance pour la dimensionnement de la position.
La stratégie MACD DEMA combine les forces des deux indicateurs, en utilisant des croisements pour capturer les tendances. Mais MACD est intrinsèquement en retard, méfiez-vous des faux signaux. Optimisez également les arrêts pour éviter une liquidation déraisonnable. Pour le trading en direct, une entrée prudente basée sur des paramètres optimisés et des améliorations continues est recommandée.
/*backtest start: 2023-01-01 00:00:00 end: 2023-09-18 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=2 strategy(" MACD DEMA STRATEGY ", overlay=true) source=close price=source fastmacd = input(12,title='MACD Fast Line Length') slowmacd = input(26,title='MACD Slow Line Length') signalmacd = input(9,title='Signal Line Length') macdslowline1 = ema(close,slowmacd) macdslowline2 = ema(macdslowline1,slowmacd) DEMAslow = ((2 * macdslowline1) - macdslowline2 ) macdfastline1 = ema(close,fastmacd) macdfastline2 = ema(macdfastline1,fastmacd) DEMAfast = ((2 * macdfastline1) - macdfastline2) MACDLine = (DEMAfast - DEMAslow) SignalLine1 = ema(MACDLine, signalmacd) SignalLine2 = ema(SignalLine1, signalmacd) SignalLine = ((2 * SignalLine1) - SignalLine2 ) MACDSignal = SignalLine-MACDLine colorbar= MACDSignal>0?green:red yearfrom = input(2018) yearuntil =input(2019) monthfrom =input(1) monthuntil =input(12) dayfrom=input(1) dayuntil=input(31) if ( crossover(MACDLine,SignalLine) ) strategy.entry("MMAL", strategy.long, stop=close, oca_name="TREND", comment="AL") else strategy.cancel(id="MMAL") if ( crossunder(MACDLine,SignalLine) ) strategy.entry("MMSAT", strategy.short,stop=close, oca_name="TREND", comment="SAT") else strategy.cancel(id="MMSAT")