Il s'agit d'une stratégie de trading de forex à court terme (1-5 minutes) qui utilise principalement la relation de prix de volume dans la théorie des marées et de multiples EMA Stairstep pour prédire les points d'inversion de tendance pour le trading de suivi de tendance à court terme.
Les signaux de négociation de cette stratégie sont constitués de deux parties:
Le jugement de la relation de prix par volume est basé sur le prix moyen par volume. Plus précisément, la stratégie calcule l'EMA du prix moyen par volume de différentes périodes (configurable) pour juger de l'évolution des tendances haussières et baissières. Si l'EMA de courte période dépasse l'EMA de plus longue période, il est considéré comme un signal haussier. Si l'EMA de courte période dépasse l'EMA de plus longue période, il est considéré comme un signal baissier.
Les signaux de renversement de tendance sont jugés par l'EMA de l'étape. L'EMA de l'étape fait référence à la définition de plusieurs EMA avec des paramètres différents, tels que 10 jours, 20 jours, 50 jours, etc. Juger l'inversion de tendance en fonction de leur ordre. Si l'EMA de courte période avance sur l'EMA de longue période, cela signifie que la tendance est en renversement.
La stratégie combinera ces deux signaux pour déterminer l'entrée. Plus précisément, si la relation de prix du volume est jugée haussière et que l'EMA de l'étape montre que plusieurs EMA sont devenues haussières, des positions longues seront prises. Inversement, si la relation de prix du volume est jugée baissière et que l'EMA de l'étape montre que plusieurs EMA sont devenues baissières, des positions courtes seront prises.
Cette stratégie combine les avantages du prix moyen en volume et de multiples EMA, ce qui peut améliorer l'exactitude et la stabilité des signaux:
L'évaluation de la relation volume/prix basée sur le prix moyen volume peut être plus précise que le simple jugement de l'EMA sur les prix, en évitant d'être induit en erreur par des fluctuations de prix accrues.
L'EMA à échelle peut augmenter la dimension du jugement par l'ordre de différents paramètres de l'EMA, en évitant le bruit d'une seule EMA.
La combinaison des deux signaux permet une vérification mutuelle et réduit les faux signaux.
Il convient aux transactions à court terme à haute fréquence et peut rapidement saisir de petites opportunités de renversement dans la fourchette.
Les paramètres de stratégie peuvent être configurés de manière flexible pour optimiser les variétés et les fréquences.
Cette stratégie comporte également des risques:
Extrêmement dépendants des indicateurs techniques, ils risquent d'être induits en erreur par des conditions de marché erratiques.
Les opérations à court terme sont relativement sensibles aux coûts de négociation, les décalages et les commissions doivent être bien contrôlés.
Les paramètres EMA à court terme nécessitent une optimisation fréquente, sinon ils peuvent devenir invalides.
La divergence des prix par volume n'entraîne pas nécessairement un renversement, il existe un risque d'erreur de jugement.
L'ordre des EMA multiples n'est pas entièrement fiable et peut également entraîner des erreurs de jugement.
Les contre-mesures:
Combinez des facteurs plus fondamentaux pour le jugement.
Ajuster les positions pour que les pertes sur les transactions uniques ne soient pas trop importantes.
Régulièrement retester et optimiser les paramètres.
Échangez près des niveaux de support/résistance clés pour augmenter le taux de réussite.
Utilisation avec d'autres indicateurs pour la vérification multidimensionnelle.
Cette stratégie peut également être optimisée dans les aspects suivants:
Testez différentes méthodes de calcul de la relation volume prix pour trouver des paramètres plus stables.
Augmenter les niveaux des indicateurs EMA de Stairstep.
Combiner d'autres signaux d'indicateur pour le filtrage, tels que le RSI, le MACD, etc.
Optimiser les mécanismes de stop loss tels que le déplacement des stop loss, les ordres en attente, etc.
Optimiser les paramètres en fonction des caractéristiques des différents instruments de négociation afin de développer des ensembles de paramètres appropriés.
Introduire des algorithmes d'apprentissage automatique pour former des modèles de jugement en utilisant les mégadonnées.
Explorez différentes stratégies de sortie telles que les sorties fixes, les sorties de suivi des tendances, etc.
Mettre en place des mécanismes de paramétrage adaptatifs pour ajuster automatiquement les paramètres en fonction des changements du marché.
Cette stratégie combine les avantages du prix moyen en volume et de l'EMA de l'étape pour le suivi de la tendance à court terme. La stratégie a une grande stabilité et précision, mais il faut noter le contrôle des risques et l'optimisation des paramètres.
/*backtest start: 2023-10-01 00:00:00 end: 2023-10-31 23:59:59 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © exlux99 //@version=5 strategy("Forex Fractal EMA Scalper", overlay=true) // Define "n" as the number of periods and keep a minimum value of 2 for error handling. n = input.int(title="Period Fractals", defval=2, minval=2, group="Optimization Parameters") src = input(hl2, title="Source for EMA's", group="Optimization Parameters") len1 = input.int(10, minval=1, title="Length EMA 1", group="Optimization Parameters") out1 = ta.ema(src, len1) len2 = input.int(20, minval=1, title="Length EMA 2", group="Optimization Parameters") out2 = ta.ema(src, len2) len3 = input.int(100, minval=1, title="Length EMA 3", group="Optimization Parameters") out3 = ta.ema(src, len3) // UpFractal bool upflagDownFrontier = true bool upflagUpFrontier0 = true bool upflagUpFrontier1 = true bool upflagUpFrontier2 = true bool upflagUpFrontier3 = true bool upflagUpFrontier4 = true for i = 1 to n upflagDownFrontier := upflagDownFrontier and (high[n-i] < high[n]) upflagUpFrontier0 := upflagUpFrontier0 and (high[n+i] < high[n]) upflagUpFrontier1 := upflagUpFrontier1 and (high[n+1] <= high[n] and high[n+i + 1] < high[n]) upflagUpFrontier2 := upflagUpFrontier2 and (high[n+1] <= high[n] and high[n+2] <= high[n] and high[n+i + 2] < high[n]) upflagUpFrontier3 := upflagUpFrontier3 and (high[n+1] <= high[n] and high[n+2] <= high[n] and high[n+3] <= high[n] and high[n+i + 3] < high[n]) upflagUpFrontier4 := upflagUpFrontier4 and (high[n+1] <= high[n] and high[n+2] <= high[n] and high[n+3] <= high[n] and high[n+4] <= high[n] and high[n+i + 4] < high[n]) flagUpFrontier = upflagUpFrontier0 or upflagUpFrontier1 or upflagUpFrontier2 or upflagUpFrontier3 or upflagUpFrontier4 upFractal = (upflagDownFrontier and flagUpFrontier) // downFractal bool downflagDownFrontier = true bool downflagUpFrontier0 = true bool downflagUpFrontier1 = true bool downflagUpFrontier2 = true bool downflagUpFrontier3 = true bool downflagUpFrontier4 = true for i = 1 to n downflagDownFrontier := downflagDownFrontier and (low[n-i] > low[n]) downflagUpFrontier0 := downflagUpFrontier0 and (low[n+i] > low[n]) downflagUpFrontier1 := downflagUpFrontier1 and (low[n+1] >= low[n] and low[n+i + 1] > low[n]) downflagUpFrontier2 := downflagUpFrontier2 and (low[n+1] >= low[n] and low[n+2] >= low[n] and low[n+i + 2] > low[n]) downflagUpFrontier3 := downflagUpFrontier3 and (low[n+1] >= low[n] and low[n+2] >= low[n] and low[n+3] >= low[n] and low[n+i + 3] > low[n]) downflagUpFrontier4 := downflagUpFrontier4 and (low[n+1] >= low[n] and low[n+2] >= low[n] and low[n+3] >= low[n] and low[n+4] >= low[n] and low[n+i + 4] > low[n]) flagDownFrontier = downflagUpFrontier0 or downflagUpFrontier1 or downflagUpFrontier2 or downflagUpFrontier3 or downflagUpFrontier4 downFractal = (downflagDownFrontier and flagDownFrontier) // plotshape(downFractal, style=shape.triangledown, location=location.belowbar, offset=-n, color=#F44336, size = size.small) // plotshape(upFractal, style=shape.triangleup, location=location.abovebar, offset=-n, color=#009688, size = size.small) long= out1 > out2 and out2>out3 and upFractal short= out1 < out2 and out2<out3 and downFractal strategy.entry("long",strategy.long,when= short) strategy.entry("short",strategy.short,when=long) tp=input(25, title="TP in PIPS", group="Risk Management")*10 sl=input(25, title="SL in PIPS", group="Risk Management")*10 strategy.exit("X_long", "long", profit=tp, loss=sl ) strategy.exit("x_short", "short",profit=tp, loss=sl )