Si vous n'arrivez pas à lire ce message, rendez-vous à l'adresse suivante : https://www.waldata.fr/mailing/100312/index.asp


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.


Épisode 1: Analyse des besoins
Épisode 2: Recherche
Épisode 3: Création
Épisode 4: programmation
Épisode 5: Création du PaintBar
Épisode 6: Assistant visuel
Épisode 7: Création de l'alerte




































































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 : « ifthen » => « else ifthen » => « 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);