English Русский 中文 Español Deutsch 日本語 Português 한국어 Italiano Türkçe
Création de filtres numériques à temps

Création de filtres numériques à temps

MetaTrader 5Indicateurs | 13 janvier 2022, 13:46
187 0
Konstantin Gruzdev
Konstantin Gruzdev

Introduction

L'article décrit l'une des approches permettant de déterminer un signal utile (tendance) dans les données de flux. De petits tests de filtrage (lissage) appliqués aux cotations boursières démontrent le potentiel de création de filtres numériques sans retard (indicateurs) qui ne sont pas redessinés sur les dernières barres.


Approche standard

Cette approche est basée sur les méthodes classiques de lissage des séries chronologiques. Il y a beaucoup d'articles consacrés à ce sujet à la fois sur ce site et sur d'autres. Les résultats sont aussi classiques :

  1. Les changements de tendances sont affichés avec latence ;
  2. Meilleure réponse de l'indicateur (filtre numérique) obtenue au détriment de la diminution de la qualité du lissage ;
  3. Les tentatives de mise en place d'indicateurs non retardés conduisent à un redécoupage sur les derniers échantillons (barres).

Et tandis que les traders ont appris à faire face à ces choses en utilisant la persistance des processus économiques et d'autres astuces, cela serait inacceptable d’évaluer des données expérimentales en temps réel, par exemple lors de tests d'aérostructures.


Le problème principal

C'est un fait connu que la majorité des systèmes de trading cessent de fonctionner avec le temps et que les indicateurs ne sont qu'indicatifs sur certains intervalles. Cela s'explique facilement : les cotations du marché ne sont pas stationnaires. La définition d'un processus stationnaire est disponible sur Wikipedia:

Un processus stationnaire est un processus stochastique dont la distribution de probabilité conjointe ne change pas lorsqu'elle est décalée dans le temps.

À en juger par cette définition, les méthodes d'analyse des séries chronologiques stationnaires ne sont pas applicables en analyse technique. Et cela est compréhensible. Un teneur de marché habile entrant sur le marché perturbera tous les calculs que nous avons pu faire auparavant en ce qui concerne les paramètres d'une série connue de cotations du marché.

Même si cela semble évident, de nombreux indicateurs sont basés sur la théorie de l'analyse des séries chronologiques stationnaires. Des exemples de tels indicateurs sont les moyennes mobiles et leurs modifications. Cependant, il existe quelques tentatives pour créer des indicateurs adaptatifs. Ils sont censés prendre en compte dans une certaine mesure la non-stationnarité des cotations boursières, mais ils ne semblent pas faire des merveilles. Les tentatives de « punir » le teneur de marché en utilisant les méthodes actuellement connues d'analyse des séries non stationnaires (wavelets, modes empiriques et autres) ne réussissent pas non plus. Il semble qu'un certain facteur clé soit constamment ignoré ou non identifié.

La principale raison en est que les méthodes utilisées ne sont pas conçues pour travailler avec des données de flux. Tous (ou presque tous) d'entre eux ont été développés pour l'analyse des données déjà connues ou, en termes d'analyse technique, historiques. Ces méthodes sont pratiques, par exemple, en géophysique : vous ressentez le tremblement de terre, obtenez un sismogramme puis l'analysez pendant quelques mois. En d'autres termes, ces méthodes sont appropriées lorsque les incertitudes survenant à la fin d'une série temporelle au cours du filtrage affectent le résultat final.

Lors de l'analyse des données de flux expérimentaux ou des cotations du marché, nous nous concentrons sur les données les plus récentes reçues, plutôt que sur l'historique. Ce sont des données qui ne peuvent pas être traitées par des algorithmes classiques.


Filtre de cluster

Le filtre de cluster est un ensemble de filtres numériques se rapprochant de la séquence initiale. Les filtres de cluster ne doivent pas être confondus avec les indicateurs de cluster.

Les filtres de cluster sont pratiques pour analyser des séries temporelles non stationnaires en temps réel, en d'autres termes, des données de flux. Cela signifie que ces filtres sont d'un intérêt principal non pas pour lisser les valeurs de séries temporelles déjà connues, mais pour obtenir les valeurs lissées les plus probables des nouvelles données reçues en temps réel.

Contrairement à diverses méthodes de décomposition ou simplement à des filtres de fréquence souhaitée, les filtres de cluster créent une composition ou un éventail de valeurs probables de séries initiales qui sont ensuite analysées pour une approximation de la séquence initiale. La séquence d'entrée agit plus comme une référence que comme cible de l'analyse. L'analyse principale porte sur des valeurs calculées par un ensemble de filtres après traitement des données reçues.

Figure 1. Le schéma d'un filtre de cluster simple

Figure 1. Le schéma d'un filtre de cluster simple

Dans le cas général, chaque filtre inclus dans le cluster a ses propres caractéristiques individuelles et n'est en aucun cas lié aux autres. Ces filtres sont parfois personnalisés pour l'analyse d'une série chronologique stationnaire propre qui décrit les propriétés individuelles de la série chronologique non stationnaire initiale. Dans le cas le plus simple, si la série initiale non stationnaire change de paramètres, les filtres «basculent». Ainsi, un filtre de cluster suit les changements de caractéristiques en temps réel.


Procédure de conception de filtre de cluster

Tout filtre de cluster peut être conçu en trois étapes :

1. La première étape est généralement la plus difficile, mais c'est là que les modèles probabilistes des données de flux reçues sont formés. Le nombre de ces modèles peut être arbitrairement grand. Ils ne sont pas toujours liés à des processus physiques qui affectent les données approximatives. Plus les modèles décrivent la séquence approchée avec précision, plus la probabilité d'obtenir un filtre de cluster non retardé est élevée.

2. Lors de la deuxième étape, un ou plusieurs filtres numériques sont créés pour chaque modèle. La condition la plus générale pour joindre des filtres ensemble dans un cluster est qu'ils appartiennent aux modèles décrivant la séquence approchée.

3. Ainsi, nous pouvons avoir un ou plusieurs filtres dans un cluster. Par conséquent, à chaque nouvel échantillon, nous avons la valeur de l'échantillon et une ou plusieurs valeurs de filtre. Ainsi, avec chaque échantillon, nous avons un vecteur ou bruit artificiel composé de plusieurs (au moins deux) valeurs. Il ne nous reste plus qu'à sélectionner la valeur la plus appropriée.


Un exemple de filtre de cluster simple

À titre d'illustration, nous allons implémenter un filtre de cluster simple correspondant au diagramme ci-dessus, en utilisant les cotations du marché comme séquence d'entrée. Vous pouvez simplement utiliser les cours de fermeture de n'importe quelle période.

1. Description du modèle. Nous partirons de l'hypothèse que :

  • La séquence approximative est non stationnaire, c'est-à-dire que ses caractéristiques ont tendance à changer au cours du temps.
  • Le cours de fermeture d'une barre n'est pas le prix réel de la barre. En d'autres termes, le cours de fermeture enregistré d'une barre est l'un des mouvements de bruit, comme les autres mouvements de prix sur cette barre.
  • Le prix réel ou la valeur réelle de la séquence approximative se situe entre le prix de fermeture de la barre actuelle et le prix de fermeture de la barre précédente.
  • La séquence approchée tend à maintenir sa direction. C'est-à-dire que s'il grandissait sur la barre précédente, il aura tendance à continuer à grandir sur la barre actuelle.

2. Sélection de filtres numériques. Par souci de simplicité, nous prenons deux filtres :

  • Le premier filtre sera une Moyenne mobile simple calculée sur la base des deux derniers cours de fermeture. Je pense que cela correspond bien à la troisième hypothèse que nous avons spécifiée pour notre modèle.
  • Puisque nous avons un filtre non stationnaire, nous essaierons également d'utiliser un filtre supplémentaire qui, espérons-le, facilitera l'identification des changements dans les caractéristiques de la série chronologique. J'ai choisi une Moyenne mobile exponentielle car cette option me semblait raisonnable et tout à fait appropriée. Cela est dû au fait que l'EMA est plus rapide que la MA, il ne devrait donc pas provoquer de décalage le long de la tendance car il a une meilleure réponse au bruit. L'EMA sera également calculée sur la base des deux derniers cours de fermeture.

3. Sélection de la valeur appropriée pour le filtre de cluster.

Ainsi, avec chaque nouvel échantillon, nous aurons la valeur de l'échantillon (prix de fermeture), ainsi que la valeur de MA et EMA. Le cours de fermeture sera ignoré selon la deuxième hypothèse spécifiée pour notre modèle. De plus, nous sélectionnons la valeur МА ou ЕМА en fonction de la dernière hypothèse, c'est-à-dire en maintenant la direction de la tendance :

  • Pour une tendance haussière, c'est-à-dire CF(i-1)>CF(i-2), nous sélectionnons l'une des quatre variantes suivantes :

    si CF(i-1)<MA(i) et CF(i-1)<EMA(i), alors CF(i)=MIN(MA(i),EMA(i));

    si CF(i-1)<MA(i) et CF(i-1)>EMA(i), alors CF(i)=MA(i) ;

    si CF(i-1)>MA(i) et CF(i-1)<EMA(i), alors CF(i)=EMA(i);

    si CF(i-1)>MA(i) et CF(i-1)>EMA(i), alors CF(i)=MAX(MA(i),EMA(i)).


  • Pour une tendance baissière, c'est-à-dire CF(i-1)<CF(i-2), nous sélectionnons l'une des quatre variantes suivantes :

    si CF(i-1)>MA(i) et CF(i-1)>EMA(i), alors CF(i)=MAX(MA(i),EMA(i));

    si CF(i-1)>MA(i) et CF(i-1)<EMA(i), alors CF(i)=MA(i);

    si CF(i-1)<MA(i) et CF(i-1)>EMA(i), alors CF(i)=EMA(i) ;

    si CF(i-1)<MA(i) et CF(i-1)<EMA(i), alors CF(i)=MIN(MA(i),EMA(i)).


Avec :

  • CF(i) – valeur du filtre de cluster sur la barre actuelle ;
  • CF(i-1) et CF(i-2) – valeurs du filtre de cluster sur les barres précédentes ;
  • MA(i) – valeur de la moyenne mobile simple sur la barre actuelle ;
  • EMA(i) – valeur de la moyenne mobile exponentielle sur la barre actuelle ;
  • MIN – la valeur minimum;
  • MAX –la valeur maximum.


Code de programme et performances du filtre de cluster

Le code de l'indicateur avec notre filtre cluster n'est pas plus complexe que le code de la moyenne mobile. Il ne comporte aucune technique de savoir-faire, il ne sert donc à rien de le revoir. Le code source est joint à l'article.

Sans perdre de temps, vous pouvez regarder la vidéo fournie ci-dessous pour voir les performances de notre indicateur :


Vidéo 1. Performances d'un filtre de cluster simple

Même si le processus de conception du filtre a pu ressembler davantage à une conjuration qu'à une approche strictement mathématique, la vidéo démontre clairement que le comportement de la ligne de filtre de cluster est plus adéquat que celui des moyennes mobiles individuelles. C'est particulièrement évident sur les sections en dents de scie de la série initiale. Si ce n'était pas assez impressionnant pour certains d'entre vous, nous pouvons comparer davantage le filtre de cluster avec JJMA, qui est considéré comme l'un des meilleurs indicateurs. La vidéo suivante montre une compétition de JJMA et de notre filtre de cluster sur la même section. J'ai essayé de sélectionner les paramètres JJMA afin que sa ligne puisse correspondre au maximum à notre ligne indicatrice.

Vidéo 2. Filtre de cluster simple vs. JJMA

Notre filtre, en moyenne, affiche à peu près les mêmes performances que JJMA sur n'importe quelle série temporelle. Mais alors que JJMA est déjà à son meilleur, notre filtre de cluster peut encore être amélioré.


Effet de lissage avancé

Jusqu'à présent, il n'y avait aucune preuve que les filtres de cluster soient capables de lisser une séquence d'entrée sans latence. Pour parvenir à ce résultat, il faut un filtre plus complexe que celui envisagé ci-dessus.

A titre d'illustration, j'ai développé un Indicateur de test GMomentum. Il contient deux lignes indicatrices :

  • Ligne bleue - élan classique.
  • Ligne rouge - impulsion classique lissée par le filtre numérique de cluster avec un algorithme plus complexe.

Les paramètres de l'indicateur couvrent diverses options de test spécialement préparées pour l'article. Dans les tests décrits ci-dessous, nous utiliserons un élan relatif tel que décrit parWilliam Blau. Lorsque vous effectuez vos propres expériences, vous pouvez utiliser d'autres variations de quantité de mouvement - les résultats seront les mêmes. Une description détaillée de l'indicateur, ainsi que des instructions de téléchargement et d'utilisation se trouvent dans la description de l'indicateur.

Il n'y a aucune raison particulière derrière l'utilisation de l’élan dans l'article. La ligne de quantité de mouvement est assez bruitée et donc les performances du filtre seront à mon avis plus illustratives. Ainsi, vous exécutez GMomentum test GMomentum et analysez le comportement de la ligne rouge par rapport à la ligne bleue.

Tout d'abord, examinons une chose intéressante. A cet effet, avant d'exécuter l'indicateur, réglez le paramètre «Filtre» sur «Test n°1 avancé». Les réglages de filtre dans ce mode révèlent assez souvent ce que l'on peut appeler un « effet d'entraînement ». Lors des tests, vous ne pourrez pas voir le lissage de toute la ligne initiale de la quantité de mouvement. Le filtre surveille les zones où la possibilité d'obtenir un effet d'entraînement est bonne. Pas étonnant, ce n'est pas toujours réussi. Et pourtant, cela se produit assez souvent pour le remarquer.

L'une des parties les plus illustratives des performances du filtre est illustrée dans le tableau ci-dessous.

Figure 2. Effet principal dans le lissage de la ligne de quantité de mouvement

Figure 2. Effet de premier plan dans le lissage de la ligne de quantité de mouvement

Il est à noter qu'il semble n'être qu'un filtrage de pointe. Cet effet se produit exclusivement en raison des mouvements de bruit de la ligne de quantité de mouvement, plutôt que du fait que le filtre soit en avance. Des études similaires d'autres indicateurs (d'une simple MA à JJMA) confirment que l'effet principal du lissage peut être observé dans chacun d'eux. Plus la période spécifiée est petite, plus l'effet est observé fréquemment. Les dernières études suggèrent que l'effet peut être amélioré. Tout dépend de la méthode de génération d'un vecteur de valeurs probables et de son analyse.


L'effet Cobra

Ceux d'entre vous qui ont déjà vu l'indicateur en action pourraient remarquer une autre anomalie. La ligne indicatrice de la dernière barre incomplète ne suit pas toujours le prix. Par exemple, le prix peut monter, tandis que l'indicateur baisse, et vice versa. Lorsque le marché est rapide ou lorsqu'on le regarde dans le visualiseur, il ressemble parfois à la langue d'un cobra traquant des proies.

Vidéo 3. Effet phare du lissage et effet cobra


Erreurs d'avance sur la tendance

Nous avons pu voir ci-dessus que lorsque la ligne initiale de la dynamique va à contre-courant (devient bruitée), il en résulte l'effet d'avance de la ligne lissée sur la ligne initiale. Apparemment, la ligne d’élan peut également faire un faux mouvement dans l'autre sens, c'est-à-dire tirer de manière inattendue loin dans la direction de la tendance, s'attardant parfois beaucoup trop longtemps, même si la tendance s'est déjà inversée. Il serait logique que le filtre puisse ralentir de tels mouvements.

Voyons comment l'algorithme filtre ces erreurs en avance sur la tendance. A cet effet, avant d'exécuter l'indicateur, vous devez régler le paramètre «Filtre» sur «Lissage de Test n°2». Le fonctionnement du filtre de cluster au cours de ce test est divisé en deux parties.

Le nom court de l'indicateur «GMomentum(Paramètre 1, Paramètre 2)» affiché dans la sous-fenêtre du graphique a deux paramètres entre parenthèses. Si le deuxième paramètre est -1, l'algorithme tente de corriger (lisser) les erreurs en avance sur la tendance. Si le deuxième paramètre est égal ou supérieur à zéro, les paramètres de lissage avancés sont activés.

La vidéo fournie ci-dessous montre le fonctionnement du filtre lors du changement de sa sensibilité du minimum à la valeur acceptable et inversement. Pour obtenir l'effet montré dans la vidéo, la sensibilité du filtre peut être contrôlée (à condition que la fenêtre indicatrice soit active) à l'aide des touches Haut et Bas.

Vidéo 4. Filtrage des erreurs en avance sur la tendance.

La vidéo ci-dessus suggère que malgré les mouvements brusques du prix et la ligne initiale de la dynamique, la ligne de la dynamique est lissée sans décalage à mesure que la sensibilité du filtre augmente. Lors d'un lissage maximal, nous obtenons des points d'entrée acceptables.

Par ailleurs, les zones plates présentent un problème pour la majorité des indicateurs. Ici, cependant, certains d'entre eux dégénèrent facilement en une ligne presque droite, même avec les paramètres existants. Théoriquement, cette technique peut être utilisée pour améliorer n'importe lequel des indicateurs existants sans produire de décalage supplémentaire. D'un point de vue pratique, il est à vérifier.

Dans la vidéo suivante, concentrez votre attention sur la façon dont le filtre aplatit les pics majeurs de la ligne de dynamique initiale et dessine une ligne de tendance plus lisse plus proche du mouvement des prix sans décalage. L'explication de la raison pour laquelle il en est ainsi est fournie dans l'articleWilliam Blau.

Vidéo 5. Lissage des pics de la ligne de quantité de mouvement initiale.

Les résultats impressionnants obtenus ne sont pas les mêmes sur toute l'histoire des citations. Mais compte tenu du fait que l'élan a beaucoup de bruit et que l'indicateur a été mis en œuvre uniquement pour démontrer le filtrage des données de flux sans décalage, nous pouvons le considérer tout à fait acceptable. De plus, il est à noter que l'indicateur n'est pas redessiné.


Réponse impulsive

L'étude des paramètres de la quantité de mouvement avec un filtre intégré peut sembler assez intéressante. Par exemple, la réponse impulsionnelle fournit une bonne illustration de comment et où les pics disparaissent de la ligne indicatrice. Pour effectuer le test, le paramètre «Filtre» doit être réglé sur «Impulsion du Test No.3». Pendant le test, chaque 1024e barre reçoit une impulsion unitaire. Après avoir exécuté l'indicateur, trouvez l'endroit approprié dans le graphique. Ça devrait ressembler à ça:

Figure 3. Réponse impulsionnelle d’élan

Figure 3. Réponse impulsionnelle d’élan

Lorsque l'indicateur est en marche, le filtre est désactivé. Vous pourrez donc voir deux pics sur la ligne bleue et rouge : un pic qui est apparu au moment de l'impulsion unitaire et qui lui est égal, et l'autre pic de sens opposé qui est apparu après le nombre de périodes spécifié. Voici à quoi ressemble la réponse impulsionnelle de la quantité de mouvement « nue ». De plus, augmentez ou diminuez progressivement la sensibilité du filtre à l'aide des touches Haut et Bas. Vous devriez pouvoir obtenir quelque chose comme ceci :

Vidéo 6. Réponse impulsionnelle d’élan

Comme on peut le voir, le deuxième pic est complètement aplati par le filtre, alors que le premier reste absolument intact. Le filtre fixe tous les effets d'impulsion et reconstruit avec précision l'image initiale : une impulsion unitaire à elle seule. Il n'y a pas de décalage. Il n'y a pas de distorsion de l'amplitude ou de la forme de l'impulsion unitaire. Peut-il être le filtre parfait en action ?


Le filtre parfait

Il y a un facteur matériel qui ne permet pas de considérer d'emblée le filtre en question parfait. Cela sera expliqué un peu plus tard.

On pense que le filtre parfait ne peut pas exister et que tous les filtres (indicateurs) sont à la traîne. Mais alors comment expliquer les résultats obtenus ? Tous sont présentés comme quelque chose qui peut être observé. Est-ce une astuce de développeur ? On pourrait probablement utiliser une astuce de codage dans un code d'impulsion unitaire. Mais l'effet peut être observé sur toutes les citations. En outre, il n'est pas nécessaire de définir ou de réinitialiser spécifiquement l'indicateur pour chaque instrument de trading.

Le filtre parfait ne peut pas exister lorsqu'un filtre est construit à partir d'objets physiques (condenseur, inducteur, etc.). Cela a été pris en charge par la nature elle-même. Pourtant, l'existence du filtre parfait est-elle impossible dans le monde numérique ? La réponse à cette question doit certainement être donnée sans tenir compte des limites physiques des systèmes informatiques (précision, vitesse de calcul, etc.).

Revenons à notre indicateur. Le filtre numérique intégré n'appartient pas aux filtres linéaires. Pour un indicateur avec filtre intégré, la réponse impulsionnelle considérée ci-dessus n'est qu'un cas particulier de filtrage qui s'est avéré bien fonctionner. Pour pouvoir tirer des conclusions de grande portée, une étude plus adéquate et plus approfondie est nécessaire.


Conclusion

J'espère que les informations fournies dans l'article aideront à briser certains stéréotypes sur la création de filtres numériques (indicateurs).

Toutes les choses décrites peuvent être examinées à l'aide des indicateurs proposés. La version introduite du test GMomentum vous permettra d'évaluer les performances et les capacités potentielles des filtres de cluster, tandis que l'exemple de filtre simple pourrait donner une impulsion aux développeurs pour créer leurs propres filtres.

Enfin, je me permets de tirer la conclusion suivante : la création d'indicateurs non retardés complets (filtres numériques) est potentiellement possible.

Traduit du russe par MetaQuotes Ltd.
Article original : https://www.mql5.com/ru/articles/812

Fichiers joints |
clusterfilter.mq5 (6.67 KB)
Regardez la vidéo tutoriel Service de signaux MetaTrader Regardez la vidéo tutoriel Service de signaux MetaTrader
En seulement 15 minutes, ce didacticiel vidéo explique ce qu'est le service de signaux MetaTrader et montre en détail comment s'abonner aux signaux de trading et comment devenir un fournisseur de signaux dans notre service. En regardant ce tutoriel, vous pourrez vous abonner à n'importe quel signal de trading, ou publier et promouvoir vos propres signaux dans notre service.
Contrats à terme continus dans MetaTrader 5 Contrats à terme continus dans MetaTrader 5
La courte durée de vie des contrats à terme complique leur analyse technique. Il est difficile d'analyser techniquement des graphiques courts. Par exemple, le nombre de barres sur le graphique journalier du futur indice boursier ukrainien UX-9.13 est supérieur à 100. Par conséquent, le trader crée des contrats à terme synthétiques longs. Cet article explique comment assembler des contrats à terme avec des dates différentes dans le terminal MetaTrader 5.
Réseau neuronal bon marché et joyeux - Lier NeuroPro avec MetaTrader 5 Réseau neuronal bon marché et joyeux - Lier NeuroPro avec MetaTrader 5
Si des programmes de réseau neuronal spécifiques au trading vous semblent coûteux et complexes ou, au contraire, trop simples, essayez NeuroPro. Il est gratuit et contient l'ensemble optimal de fonctionnalités pour les amateurs. Cet article vous expliquera comment l'utiliser en conjonction avec MetaTrader 5.
Travailler avec le modem GSM d'un Expert Advisors de MQL5 Travailler avec le modem GSM d'un Expert Advisors de MQL5
Il existe actuellement de nombreux moyens pour un bon suivi à distance d'un compte de trading : terminaux mobiles, notifications push, fonctionnement avec ICQ. Mais tout cela nécessite une connexion Internet. Cet article décrit le processus de création d'un Expert Advisor qui vous permettra de rester en contact avec votre terminal de trading même lorsque l'Internet mobile n'est pas disponible, par le biais d'appels et de SMS.