Apprenez à créer
vos outils d’aide à la décision sur mesure
Épisode 4: Programmation de la colonne "Signal - Break Out"
|
Nous avons défini dans l’épisode 2 la syntaxe exacte de toutes les fonctions ExpressLanguage© qui nous seront utiles lors de la programmation du signal :
• Le dernier cours de clôture : Closee
• Plus Haut sur 20 périodes : Highest(High,20)
• Plus Bas sur 20 Périodes : Lowest(Low,20)
• Le volume du dernier bar: Volume
• La moyenne mobile du volume sur 20 périodes : MMA(Volume,20)
Dans l’épisode 3, nous avons créé la structure du MarketAnalyser permettant la détection de toutes les valeurs qui dépassent leur plus haut/plus bas de 20 périodes dans de forts volumes. On peut alors procéder à l’écriture du code ExpressLanguage© qui permettra la détection d’un tel signal.
Tout est prêt pour attaquer la programmation. Le code d’une colonne de
MarketAnalyser écrit en ExpressLanguage© se compose de plusieurs parties
que nous allons présenter.
|
Il peut être traduit en langage courant comme suit :
SI (Clôture de la veille et en-dessous du plus haut de
20 périodes)
ET (Clôture du jour est au-dessus du plus haut de
20 périodes)
ET (Le volume du jour est au-dessus de la moyenne des
volumes sur 20 dernières périodes)
DONC
• Ecrire «Achat » en vert
• Variable « Signal » = 2
SINON SI (Clôture de la veille au-dessus du plus bas de
20 périodes)
ET (Clôture du jour est en-dessous du plus bas de
20 périodes)
ET (Le volume du jour est au-dessus de la
moyenne des volumes sur 20 dernières périodes)
DONC
• Ecrire «VAD » en rouge
• Variable « Signal » = 1
SINON
• Ecrire «-- » en noir
• Variable « Signal » = 0 |
|
1.
Déclaration des variables
Les variables, sont des cases mémoires
stockant une donnée pouvant varier au cours de l'exécution d'un
programme.
Les règles de déclaration des variables en ExpressLanguage© sont les
suivantes :
• On commence toujours par le mot clé « Variables : ».
• Après les noms de variables, on donne leur valeur par défaut entre
parenthèses.
Par exemple « HHV(0) ».
• On sépare les variables par une «,» et on termine les déclarations des
variables par « ; ».
|
|
2. Affectation des valeurs des indicateurs aux
variables utilisées
Une fois créées, les variables peuvent être
affectées par des résultats de calcul des fonctions de
l’ExpressLanguage©.
La syntaxe est donc alors:
• Variable = Fonction(Paramètres)
• On clôture chaque ligne par « ; »
La valeur [n] après une variable ou une fonction, permet de récupérer la
valeur de la variable ou de la fonction, 'n' bars en arrière. Par
exemple, Close[1] renvoie la clôture de la barre précédent.
Dans notre exemple afin de détecter la cassure du plus haut, on doit
récupérer la valeur du plus haut en lors du bar précèdent. Logique, car
le plus haut du jour ne peut pas être dépassé le jour même... |
|
3. Calcul des conditions et affichage des
informations
En ExpressLanguage© les conditions sont définies par une structure
suivante :
If <condition>
then
Begin
< que faire si condition est vérifiée >
End
Else
Begin
< Que faire si condition n’est pas vérifiée >
End ;
|
Les règles d’écriture des conditions sont les suivantes :
- Pour ouvrir une condition, on commence par «
if » et on clôture par «
then ».
- A l’intérieur d’un même « if
», les conditions sont reliées par « and
» ou « or » et sont
écrites à l’intérieur des parenthèses.
- Le code à exécuter si les conditions sont vérifiées est encadré par «begin
» … « end ».
- S’il y a un « else » ou
« else if » on ne met pas
de « ; » après «
end ».
- Le « end » final est
suivi par « ; »
- La séquence de calcul est la suivante : «
if …then
» => « else if …
then » => «
else ».
Une fois qu’une des conditions répond « vrai », le code entre «
begin » … «
end » est exécuté et la
séquence de contrôle est finie.
- « else » répond toujours
« vrai », si les autres conditions ont répondu « non ».
Le code est alors le suivant :

Comme vous l’avez compris de cet exemple, l’instruction
SetResultTXT(« Texte »,html) permet d’écrire le texte dans la
colonne du MarketAnalyser.
|
|
4. Critère de tri et de selection des
valeurs
On clôture le code de la colonne du MarketAnalyser© par le code qui
renvoie le résultat final de la colonne, et indique si la valeur doit ou
non être affichée dans la liste des valeurs sélectionnées.
L’instruction « Result =…
» Renvoie le résultat final de la colonne.
Ce résultat possède des caractéristiques:
• La valeur de « Result »
est obligatoirement de type numérique
• Elle permet de définir le critère de tri des valeurs
• Elle est récupérable par d’autres colonnes du MarketAnalyser©
• Si aucune instruction SetResultTXT n’a été utilisée dans la
colonne, c’est la valeur de « Result » qui sera affichée.
L’instruction « Select() »
est utilisée par le MarketAnalyser si et seulement si la colonne est
définie comme la colonne de filtrage. Ce critère permet de n’afficher
qu’une sélection des valeurs au lieu d’afficher toutes les valeurs d’une
liste.
- « Select(True) » indique
qu’il faut afficher la valeur
- « Select(False) »
indique qu’il ne faut pas afficher la valeur.

5. Contrôle du résultat obtenu
Notre
programmation est terminée. Il ne nous reste plus qu’à vérifier le code
et valider. Le MarketAnalyser© ainsi créé est prêt et nous permet de mettre la main sur des
nouvelles opportunités d’investissement.

6. Code ExpressLanguage©
Ci dessous le code ExpressLanguage©
à copier puis coller dans l'option "Formule", puis dans
l'onglet "Source" de votre nouveau
MarketAnalyser WalMaster:
sélectionnez le code ci dessous puis faites Copier/Coller (CTRL+C
/ CTRL+V)
{Déclaration des variables}
variables :
HHV(0),
LLV(0),
VolMoyen(0),
Signal(0);
HHV = Highest(High,20)[1];
LLV = Lowest(Low,20)[1];
VolMoyen = MMA(volume,20);
{Conditions}
if (Close[1] < HHV) and (Close > HHV) and (volume > VolMoyen) then
Begin
SetResultTxt("<Font color=""clgreen""><b>Achat</b>");
signal = 2;
End
Else if (Close[1] > LLV) and (Close < LLV) and (volume > VolMoyen) then
Begin
SetResultTXT("<Font color=""clred""><b>VAD</b>");
signal = 1;
End
Else
Begin
SetResultTxt("<Font color=""clblack""><b>--</b>");
signal = 0;
End;
result = signal;
If (signal<>0) then
Select(True)
Else
Select(False); |
|
|