Accueil Indicateur technique Publication

Condition Scanner : Un Indicateur Essentiel pour MetaTrader 4

Pièce jointe
11135.zip (178.96 KB, Télécharger 0 fois)

Condition Scanner (cs)

L'idée derrière les morceaux de code joints est simple :

Vous imaginez un ou plusieurs critères. Vous écrivez le code pour tester ces conditions. Vous intégrez votre code dans ces morceaux de code. Ensuite, vous effectuez quelques modifications faciles.

Vous obtenez alors plusieurs indicateurs. L'un d'eux mettra en évidence sur le graphique actuel où vos conditions se sont produites historiquement. L'autre affichera dans un panneau si, pour tous les instruments et les périodes de temps qui vous intéressent, les conditions sont actuellement présentes. Cela vous évite de devoir scruter manuellement les paires et les périodes de temps à la recherche de vos critères.

Installation :

Copiez les contenus des quatre dossiers (Indicators, Include, Templates, Profiles) dans les dossiers équivalents de votre installation. Il n'y a rien là-dedans qui puisse vous nuire - seulement des indicateurs, etc.
Quittez et relancez le programme MetaQuotes.

Pour démontrer ce que le scanner peut faire :

Ce premier exemple est basé sur Power Pro (identifiant de configuration = "PP") que Russ Horn a popularisé. Il s'agit d'une stratégie de rupture de bande où la limite supérieure est une EMA des sommets et la limite inférieure est une EMA des creux. Je ne cautionne pas ces stratégies, c'est juste un exemple de ce que vous pouvez développer.

Sur votre système, changez de profil pour cspp. Cela peut prendre quelques secondes lors de la première affichage, mais cela n'utilise pas beaucoup de ressources par la suite.

Vous devriez voir un écran similaire à celui-ci :



L'exemple ci-dessus se compose de :
un indicateur sur le graphique avec 4 tracés,
un indicateur dans une fenêtre séparée affichant l'EMA du RSI,
un indicateur dans une fenêtre séparée montrant où les conditions suggérant des trades longs ou courts se sont produites historiquement,
et un indicateur de panneau affichant où les mêmes conditions viennent de se produire ou se produisent actuellement sur une gamme de paires et de périodes de temps.

Le code commun à tous les scans :

Utils.mqh contient des fonctions utilitaires qui peuvent être utilisées dans n'importe quel indicateur, expert advisor, etc.
cs_Chart.mqh contient presque tout le code qui entre dans l'indicateur du graphique actuel.
cs_Panel.mqh contient presque tout le code qui entre dans l'indicateur d'affichage du panneau.

Le code spécifique à la stratégie PP (Power Pro) :

csPP_0.mq4 affiche les indicateurs pertinents pour la "fenêtre de graphique".
csPP_1.mq4 affiche les indicateurs pertinents pour la "fenêtre séparée".
csPP_Chart.mq4 est l'indicateur qui montre ce qui s'est passé historiquement sur le graphique actuel.
csPP_Panel.mq4 est l'indicateur qui montre la situation actuelle sur toutes les paires et périodes de temps qui vous intéressent.
csPP_GetBarFlag.mqh est le code "inclus" dans les indicateurs de Chart et Panel. C'est lui qui décide s'il y a une condition d'intérêt à une barre particulière.

I included another less complex example (identifier=MAX).

Le code spécifique à la stratégie MAX (crossover de moyennes mobiles) :

csMAX_0.mq4 est un indicateur personnalisé qui affiche deux moyennes mobiles. Il est complètement autonome.
Il n'y a pas d'équivalent csMAX_1 car, contrairement à PP, il n'y a pas besoin d'une fenêtre séparée.
csMAX_Chart.mq4, csMAX_Panel.mq4 et csMAX_GetBarFlag.mqh font la même chose que pour la stratégie PP ci-dessus.

Le code dont les identifiants commencent par csXXXX :

Ce sont des modèles qui peuvent être utilisés lors du développement de scans supplémentaires.

Comment je m'y prends pour coder une nouvelle condition :

Je décide d'un identifiant de stratégie (par exemple PB pour pinbars).

Je configure ma fenêtre comme mentionné sous "Pour démontrer ce que le scanner peut faire", en supprimant tous les indicateurs existants.

Si mon nouveau scan repose sur des indicateurs sur le graphique, je les construis en utilisant csXXXX_0.mq4 comme modèle. Je pense à 'enregistrer sous...' csPB_0.mq4. J'applique mon indicateur personnalisé sur le graphique de gauche.

Si j'ai besoin d'un indicateur dans une fenêtre séparée, je le construis aussi. Je pense à 'enregistrer sous...' csPB_1.mq4. Je l'applique au graphique de gauche.

Je construis des indicateurs personnalisés plutôt que d'utiliser des indicateurs standards pour pouvoir m'y référer ailleurs en utilisant la fonction iCustom. De cette manière, si je change d'avis sur les paramètres de base de ma stratégie (par exemple la méthode de la moyenne mobile), je n'ai qu'à modifier mes indicateurs personnalisés. Si j'avais utilisé des indicateurs standards, je devrais les changer et ensuite fouiller dans les entrailles de mon code pour adapter ce changement d'avis.

Je prends csXXXX_Chart.mq4, remplace toutes les instances de 'XXXX' par mon identifiant de stratégie 'PB', et j'enregistre le code sous csPB_Chart.mq4. Cela ne va pas encore compiler car il reste du code "inclus" à écrire.

Maintenant, fournissons le code "inclus".

Si les conditions que je veux tester sont très simples, j'utilise simplement le fichier "inclus" csXXXX_GetBarFlag.mqh, je code ce que je veux, et 'enregistrer sous...' csPB_GetBarFlag.mqh. Mais si le codage est délicat, je retourne au csPB_Chart.mq4 que j'ai créé précédemment, je commente la ligne de code qui se lit maintenant "#include <csPB_GetBarFlag.mqh>", et je construis le code que je veux directement dans le fichier csPB_Chart.mq4. Lorsque j'ai fait propre, je déplace/coller le code de recherche de conditions dans le fichier "inclus" 'csPB_GetBarFlag.mqh' et je décommente l'instruction #include dans le fichier 'csPB_Chart.mq4'.

Maintenant, le fichier 'csPB_Chart.mq4' peut être compilé et appliqué au graphique de gauche.

À ce stade, j'enregistre le modèle pour le graphique de gauche sous csPB-CHART.tpl. Cela incorpore tous les indicateurs personnalisés sur le graphique, les indicateurs personnalisés dans une fenêtre séparée, et le tracé des résultats tels qu'ils s'appliquent au graphique actuel.

Je charge le fichier 'csXXXX_Panel.mq4', remplace toutes les instances de "XXXX" par "PB", puis 'enregistrer sous...' "csPB_Panel.mq4". Ce dernier fichier est compilé et appliqué au graphique de droite. Il peut être un peu lent lors de la première application, mais n'utilise pas beaucoup de ressources par la suite.

Je stocke csPB_panel.tpl comme un modèle pour le graphique de droite.

Je vais généralement stocker csPB comme un profil.

NOTE : Lors de la création d'indicateurs personnalisés et de leur référence avec la fonction iCustom, je fais attention à ce que les noms soient exactement corrects. Vous n'obtenez pas d'avertissement si iCustom fait référence à un indicateur qui n'existe pas.

NOTE : Il peut y avoir un bug tel que lorsque l'indicateur de panneau est chargé pour la première fois, il produit des résultats qui ne sont pas cohérents avec ceux du graphique spécifique affiché. Je trouve que si je change l'échelle de temps dans la fenêtre du panneau (forçant ainsi un recalcul), tout s'affiche correctement. Je serais reconnaissant à quiconque pourrait m'aider à résoudre ce problème.

NOTE : Dans le code ...GetBarFlag.mqh que vous développez vous-même, vous pouvez retourner n'importe quel entier au programme appelant pour être affiché. Dans l'état actuel, zéro signifie 'pas de résultat' et provoque l'affichage d'un symbole gris indiquant quelle barre a été testée. Retourner un entier négatif affichera un symbole rouge, tandis qu'un entier positif affichera un symbole vert.

Quelques aspects du logiciel :

Le code a été écrit en tant qu'indicateurs de sorte que, lorsqu'un panneau est affiché et que vous voulez regarder une paire et une période de temps particulières, il vous suffit de choisir la paire dans la fenêtre de Market Watch, de la glisser et de la déposer sur l'espace graphique actuel et de changer la période de temps en conséquence. Le modèle s'occupe du reste.

Pour réduire la surcharge informatique, j'ai fait deux choses.

Premièrement, lors du traitement des tableaux de séries temporelles, je ne remonte généralement que 200 barres.

Deuxièmement, le logiciel d'affichage du panneau ne teste pas les conditions de l'utilisateur à chaque tick. Il utilise un mécanisme de minuterie de sorte que le test est appliqué à bar[0] uniquement si bar[0] est formé à 90 %, sinon le test est appliqué à bar[1]. Si bar[1] est en focus (c'est-à-dire que bar[0] est formé à moins de 90 %), il est testé une fois et un changement de temps vers bar[0] est calculé. Pour chaque tick suivant qui arrive jusqu'à ce que le temps de changement soit atteint, rien ne se passe. Je ne suis pas sûr à 100 % d'avoir bien codé cela, mais cela semble fonctionner correctement.

En outre, la ligne supérieure du panneau affiche la date et l'heure de la dernière opération de test des conditions. De plus, dans les exemples fournis ici, les symboles neutres afficheront un zéro si bar[0] est en focus et un '1' si bar[1] est en focus.


Articles connexes

Commentaire (0)