Pro Builder
Pro Builder
Prsentation de ProBuilder_______________________________________
Chapitre I: Les notions fondamentales______________________________
Accder ProBuilder.....................................................................................................2
Spcificits de programmation du langage ProBuilder.................................................6
Les constantes financires ProBuilder..........................................................................7
1) Les constantes de prix et de volume adaptes lunit de temps du graphique........8
2) Les constantes journalires de prix............................................................................9
3) Les constantes temporelles.......................................................................................9
4) Les constantes drives des prix.............................................................................14
5) La constante indfinie..............................................................................................14
5) CONTINUE..............................................................................................................27
a. Avec WHILE.................................................................................................................27
b. Avec FOR.....................................................................................................................27
6) ONCE......................................................................................................................28
Fonctions Mathmatiques...........................................................................................29
1) Fonctions usuelles unaires et binaires.....................................................................29
2) Oprateurs mathmatiques usuels..........................................................................29
3) Fonctions de comparaisons graphiques...................................................................30
4) Fonctions de sommation..........................................................................................30
5) Fonctions Statistiques..............................................................................................30
Oprateurs logiques....................................................................................................31
Instructions ProBuilder................................................................................................31
1) RETURN..................................................................................................................31
2) REM ou //.................................................................................................................32
3) CustomClose...........................................................................................................32
4) CALL........................................................................................................................33
5) AS............................................................................................................................33
6) COLOURED............................................................................................................34
Chapitre IV : exercices___________________________________________
Figures de chandeliers................................................................................................42
Indicateurs...................................................................................................................45
Glossaire______________________________________________________
Prsentation de ProBuilder
Prsentation de ProBuilder
ProBuilder est le langage de programmation de ProRealTime. Ce dernier sert concevoir des indicateurs
techniques personnaliss, des stratgies de trading (ProBackTest) ou des scans personnalises
(ProScreener). ProBackTest et ProScreener font lobjet de manuels individuels cause de certaines
spcificits de programmation.
Ce langage est de type BASIC, trs simple dutilisation et exhaustif dans les possibilits offertes.
Vous allez pouvoir construire vos propres programmes qui utilisent les cotations de nimporte quel instrument
inclus dans loffre ProRealTime, partir des lments de base :
le cours douverture de chaque barre : Open
le cours de clture, de chaque barre : Close
le plus haut de chaque barre : High
le plus bas de chaque barre : Low
le nombre de titres changs : Volume.
Les barres, ou chandeliers, sont les reprsentations graphiques standards des cotations reues en temps
rel. ProRealTime vous offre bien entendu la possibilit de personnaliser le type de style graphique, vous
proposant, parmi dautres, vues telles que Renko, Kagi, Heikin-Ashi.
ProBuilder value les donnes de chaque barre de prix depuis la plus ancienne jusqu la plus rcente, et
excute la formule dveloppe dans le langage afin de dterminer la valeur des indicateurs sur la barre en
question.
Les indicateurs dvelopps sous ProBuilder peuvent tre affichs sur le graphique du prix ou bien dans un
graphique individuel, selon le type dchelle utilise.
Dans ce document, vous assimilerez au fur et mesure les commandes permettant de programmer dans ce
langage grce une vision thorique claire et des exemples concrets les illustrant.
A la fin de ce manuel, vous y trouverez un Index qui vous donnera une vue de l'ensemble des commandes
de ProBuilder, des indicateurs dj cods et d'autres fonctions compltant ce que vous aurez appris durant
votre lecture.
Les utilisateurs plus habitus la programmation, pourront passer directement la lecture du chapitre II ou
bien consulter lindex afin de retrouver rapidement lexplication relative la fonction recherche.
Pour ceux moins habitus programmer, nous conseillons le visionnage de la vido intitule " Crer un
indicateur dans ProBuilder" et de lire l'intgralit du manuel. Trs directif et fortement orient vers la pratique,
nous ne doutons pas que vous serez en mesure de matriser ce langage en peu de temps.
1 / 55
2 / 55
Dans le second cas cliquez sur "Crer indicateur", pour accder la fentre de programmation. Vous avez
alors la possibilit :
de programmer directement un indicateur dans la zone de texte rserve au code.
d'utiliser la fonction daide "Insrer Fonction", qui permet de trouver dans une nouvelle fentre une
bibliothque des fonctions disponibles, spares en sept catgories, afin de vous assister lors de la
programmation.
3 / 55
Prenons comme exemple le premier lment caractristique des indicateurs ProBuilder, c'est--dire la
fonction "RETURN", (disponible dans la section "Mots cls" - voir image ci-dessous).
Slectionnez donc le mot "RETURN" et cliquez sur "Insrer Fonction" : la commande sajoutera bien la
zone de programmation.
4 / 55
Supposons que l'on veuille crer un indicateur affichant le Volume. Si vous avez dj insr le mot
RETURN, il suffit alors d'aller une nouvelle fois sur "Insrer fonction", de cliquer sur "Constantes" dans la
section "Catgories", puis sur le ct droit, section "Fonctions disponibles", cliquer sur "Volume". Enfin,
cliquez sur "Ajouter".
Avant de cliquer sur le bouton "Valider programme", prcisez en haut de la fentre le nom de votre indicateur :
ici, nous l'avons appel "Volume DAX". Enfin, cliquez sur "Valider programme" et vous verrez s'afficher le
graphique de votre indicateur.
5 / 55
6 / 55
Typer une variable, cest dire dfinir la nature de la variable : est-elle un entier naturel (ex : 3 ; 8 ;
21 ; 643 ; ), un entier relatif (ex : 3 ; 632 ; -37 ; ), un dcimal (ex : 1.76453534535), un boolen
(VRAI, FAUX), ?
Dans ProBuilder, vous pouvez crire vos commandes aussi bien avec des majuscules quavec des
minuscules. Par exemple, lensemble de commandes IF / THEN / ELSE / ENDIF pourra
indiffremment tre crite iF / tHeN / ELse / endIf.
Exception : Quand vous dcidez dutiliser une variable, il faudra que vous respectiez la casse du nom
dfini. Si vous avez crit : "vARiaBLe" et vous souhaitez la rutiliser dans le programme, seul le
respect de la casse permettra de se rfrer la mme variable "vARiaBLe"
Affecter une valeur une variable, cest lui attribuer une valeur. Pour mieux comprendre le principe
daffectation, il faut que vous considriez une variable comme une bote vide qui attend quon lui mette
quelque chose lintrieur. Le schma ci-dessous vous illustre ce principe avec la valeur Volume
affecte la variable X :
Volume
Voyez bien quon lit de droite gauche la phrase : Volume est affect X.
Maintenant, pour lcrire en code ProBuilder, on va simplement remplacer la flche par un signe =
X = Volume
Le mme symbole = est utilis :
pour laffectation dune variable (comme dans lexemple prcdent).
comme oprateur mathmatique binaire (1+ 1= 2 est quivalent 2 = 1 + 1).
7 / 55
Vous pourrez ainsi les combiner afin de faire ressortir certains aspects de linformation fournie par les
marchs financiers. On peut les regrouper en 5 catgories :
Pour faire appel aux valeurs des barres prcdentes, il suffit de rajouter entre crochets le chiffre relatif la
barre considrer (le nombre de barres partir de la barre courante).
Prenons par exemple la constante prix de clture. Lappel du cours se fait de la faon suivante :
Valeur de la fermeture de la barre courante :
Close
Close[1]
Close [n]
Cette rgle vaut pour nimporte quelle constante. Par exemple, le prix d'ouverture de la 2me barre
prcdent la barre courante, sera appel par : Open[2].
La valeur qui sera reporte dpendra de la priode affiche sur le graphique.
8 / 55
FOCUS : OpenOfNextBar
OpenOfNextBar peut tre utilis indiffremment dOpen, suivant la rgle :
OpenOfNextBar[n+1] = Open[n]
avec n>0
En pratique :
OpenOfNextBar[1] = Open
OpenOfNextBar[2] = Open[1]
OpenOfNextBar[3] = Open[2]
Remarque : si "n" est gal 0, on rcupre alors la valeur du jour comme montre dans lexemple cidessous.
Pour les constantes adaptes l'unit de temps on utilise de crochet, pour les constantes
journalires on utilise des parenthses.
Close [3]
Dclose(3)
9 / 55
Les constantes temporelles sont considres par ProBuilder comme des entiers. La constante Date, par
exemple, doit tre prsente comme un unique nombre compos de 8 chiffres.
Ecrivons alors le programme :
RETURN Date
Supposons que nous soyons aujourd'hui le 4 juillet 2008. Lindicateur issu du programme ci-dessus va relier
toutes les dates de clture des barres et renvoyer le rsultat 20080704.
Pour lire une date, il suffit donc de lire de la manire suivante :
20080704 = 2008 annes 07 mois et 04 jours.
Attention, dans l'criture d'une date au format YYYYMMJJ, MM ne doit pas dpasser la valeur 12 et JJ ne
doit pas dpasser la valeur 31.
Time : HeureMinuteSeconde code sous la forme HHMMSS indiquant lheure de clture de
chaque barre.
Faisons par exemple :
RETURN Time
On obtient une courbe liant toutes les heures de clture de chaque barre :
10 / 55
Attention, dans l'criture d'une heure au format HHMMSS, HH ne doit pas dpasser la valeur 23, MM ne doit
pas dpasser la valeur 59 et SS ne doit pas dpasser la valeur 59.
Il est possible de combiner dans un mme indicateur Time et Date afin de restreindre le rsultat un
moment spcifique. Dans lexemple qui suit, nous voulons limiter notre indicateur au premier octobre 2008
9h00 et 1 sec.
a = (Date = 20081001)
b = (Time = 090001)
RETURN (a AND b)
CurrentHour :
CurrentMinute :
CurrentMonth :
CurrentSecond :
CurrentTime :
CurrentYear :
La diffrence entre les constantes Current proposes ci-dessus et celles sans Current vues prcdemment
est justement le ct "Actuel".
11 / 55
Limage suivante met en vidence cette diffrence applique aux constantes CurrentTime et Time. Pour
simplifier, les constantes en Current font abstraction de laxe des temps et ne considre que la valeur
affiche dans lencadr blanc.
Cette constante est utile lorsquon souhaite connaitre le nombre de jours qui se sont couls,
particulirement lorsquon travaille en vues quantitatives, comme (x)Tick ou (x)Volumes.
Lexemple suivant permettra donc dafficher le passage dune journe lautre de cotations, lorsquon se
trouve dans lune des vues cites.
RETURN Days
(Attention ne pas confondre les deux constantes Day et Days).
12 / 55
On remarque bien la remise zro du compteur de barres tous les dbuts de journe pour
IntradayBarIndex.
13 / 55
Range en % :
MyRange = Range
Calcul = (MyRange/MyRange[1]-1)*100
RETURN Calcul
5) La constante indfinie
Undefined permet dindiquer lindicateur de ne pas afficher un rsultat pour certaines variables (par dfaut
toutes les variables non affectes sont zro).
Undefined : donne indfinie (quivalent dune case vide ou de NULL).
Vous pouvez retrouver un exemple dapplication la page 23.
Average[20](Close)
14 / 55
On peut bien sr les modifier selon nos prfrences ; par exemple, on peut remplacer les 20 barres dfinies
par dfaut par 100 barres. De mme, on peut modifier l'argument de prix ou indicateur "Close" par
"Dopen(6)":
Average[20](Dopen(6))
Regardons quelques exemples de comportement dindicateurs prexistants :
Programme calculant la moyenne mobile exponentielle sur 20 bougies applique au prix de clture :
RETURN ExponentialAverage[20](Close)
Calcul dune moyenne mobile pondr sur 20 barres applique au prix typique
mm = WeightedAverage[20](TypicalPrice)
RETURN mm
Calcul dune moyenne mobile lissage de Wilder sur 100 barres applique au Volume
mm = WilderAverage[100](Volume)
RETURN mm
Calcul du MACD (en histogramme) sur le prix de clture. La ligne du MACD se construit comme la diffrence
entre la moyenne mobile exponentielle sur 12 priodes moins celle sur 26 priodes. On effectue ensuite un
lissage avec une moyenne mobile exponentielle 9 priodes, applique la diffrence pour obtenir la ligne
de Signal. Le MACD en histogramme se constitue alors de la diffrence entre la ligne du MACD et la ligne
de Signal.
15 / 55
Afin de pouvoir modifier le nombre de priodes de calcul directement partir de linterface, remplacez 20 par
une variable n :
RETURN Average[n](Close)
Cliquez ensuite sur "Ajouter" dans "Optimisation des variables" et vous verrez alors safficher la fentre
"Dfinition de la variable". Remplissez comme suit :
16 / 55
Appuyez sur "OK". Dans la fentre de Proprit de lindicateur (dans ce cas "Proprits MyMovingAverage"),
vous obtiendriez donc un nouveau paramtre, qui vous permettra dagir sur les nombres de priodes de la
moyenne mobile :
Bien entendu, il est possible de faire la mme chose avec plusieurs variables vous donnant ainsi la
possibilit de "jouer" sur plusieurs paramtres en mme temps.
17 / 55
Nous avons la possibilit de rechercher une condition et de dfinir une action si la condition est vrifie. En
revanche, si la condition nest pas satisfaite, rien ne se passe (retourne par dfaut 0).
Dans lexemple, si le dernier prix est suprieur la MM de priode 20, alors on affiche la valeur 1.
IF Close>Average[20](Close) THEN
Result=1
ENDIF
RETURN Result
RETURN doit toujours etre suivi de la variable de stockage utilise (dans lexemple, Result) si
on veut afficher le rsultat de la condition
Nous pouvons galement choisir de dfinir un rsultat au cas o la condition nest pas vrifie. Reprenons
lexemple prcdent: si le dernier prix est suprieur la MM de priode 20, on affiche la valeur 1.
Autrement, on affiche -1.
IF Close>Average[20](Close) THEN
Result=1
ELSE
Result=-1
ENDIF
RETURN Result
NB: Nous venons de crer un indicateur binaire. Pour en savoir plus, voir section "Crer un indicateur binaire
ou ternaire : pourquoi et comment ?"
18 / 55
c. Conditions imbriques
Il est possible de crer des sous-conditions la suite de la validation dune condition principale, c'est--dire
des conditions qui doivent se vrifier lune aprs lautre (dans lordre de parution). Pour ce faire, il suffit
dimbriquer les IF, mais en faisant attention insrer autant de ENDIF que de IF. Regardons lexemple :
Double conditions sur moyennes mobiles :
IF (Average[12](Close) - Average[20](Close) > 0) THEN
IF ExponentialAverage[12](Close) - ExponentialAverage[20](Close) > 0 THEN
Result = 1
ELSE
Result = -1
ENDIF
ENDIF
RETURN Result
Il est possible de dfinir plusieurs rsultats associs chacun une condition spcifique. Lindicateur reporte
donc plusieurs tats: si la Condition1 est vrifie alors on active lAction 1 ; autrement, si la Condition 2 est
vrifie, on active l'Action 2 si aucune condition nest vrifie, on active lAction n.
Syntaxiquement, cette structure utilise les instructions : IF, THEN, ELSIF, THEN .... ELSE, ENDIF.
Elle s'crit de la manire suivante :
IF (Condition1) THEN
(Action1)
ELSIF (Condition2) THEN
(Action2)
ELSIF (Condition3) THEN
(Action3)
...
...
...
ELSE
(Action n)
ENDIF
Il est possible, mais l'criture est plus lourde, de remplacer les ELSIF par des ELSE IF. Il faudra alors
terminer la boucle par autant dENDIF que dIF crits. Il vous est donc conseill, si vous souhaitez imbriquer
de multiples conditions dans votre programme, d'utiliser ELSIF plutt que ELSE IF.
19 / 55
20 / 55
Exemple : BarIndex
Dans le chapitre I de ce manuel, BarIndex vous a t prsent comme compteur du nombre des barres
depuis le dbut de lhistorique affich. BarIndex est souvent utilis en association avec IF. Per exemple, si
on cherche savoir si notre graphique contient moins ou plus de 23 barres, on crira:
IF BarIndex <= 23 THEN
a= 0
ELSIF BarIndex > 23 THEN
a=1
ENDIF
RETURN a
21 / 55
Ce code signifie tout simplement que variable va dans un premier temps prendre la valeur de dbut de srie,
puis variable prendra la valeur suivante (la prcdente + 1) et ainsi de suite jusqu' ce que variable prenne
la valeur de fin de la srie. Alors, la boucle se ferme.
22 / 55
FOR i = 0 TO 20 DO
SUMhigh = High[i]+SUMhigh
NEXT
ENDIF
MMhigh = SUMhigh/20
RETURN MMhigh
On affiche MMhigh
Lavancement dcroissant utilise en revanche les instructions : FOR, DOWNTO, DO, NEXT.
Elle s'crit de la manire suivante :
FOR (Variable = ValeurDeFinDeSrie) DOWNTO ValeurDeDbutDeSrie DO
(Action)
NEXT
Reprenons l'exemple de la moyenne mobile sur les 20 dernires barres des prix les plus hauts :
On remarquera que lon a juste invers les bornes de lintervalle balay.
IF BarIndex = 0 THEN
MMhigh = Undefined
ELSE
FOR i = 20 DOWNTO 1 DO
SUMhigh = High[i]+SUMhigh
NEXT
ENDIF
MMhigh = SUMhigh/20
RETURN MMhigh
23 / 55
(Action n)
WEND
24 / 55
Linstruction WHILE ne connat pas la valeur dorigine de i donc ne peut pas tester si i est bien gal 10.
La boucle va utiliser ses ressources pour dfinir la variable i et lui donner la valeur 0 par dfaut. Count ne
sera plus trait do la valeur de retour 0.
Le code correct serait :
i=0
Count = 0
WHILE i <> 11 DO
i=i+1
Count = Count + 1
WEND
RETURN Count
Dans ce code, i est bien initialis. La boucle va donc fonctionner correctement car la condition est
maintenant valide.
4) BREAK
Linstruction BREAK permet de faire une sortie force dune boucle WHILE ou dune boucle FOR. Des
combinaisons avec la commande IF sont possibles, que ce soit dans une boucle WHILE ou dans une boucle
FOR.
a. Avec WHILE
Lorsquon cherche sortir dune boucle conditionnelle WHILE, savoir que lon nattend pas de trouver une
situation ne satisfaisant pas la condition de bouclage, on utilise BREAK suivant la structure suivante :
WHILE (Condition) DO
(Action)
BREAK
WEND
25 / 55
Prenons pour exemple un indicateur qui cumule le nombre de priodes de hausse et de baisse conscutifs:
REM Indicateur de tendance : cumule le nombre de hausses et de baisses
REM On augmente de 1 un compteur initialis zro en cas de hausse (ou -1 pour une baisse)
Increase = (Close Close[1])>0
Indicator = 0
i=0
WHILE Increase[i] DO
Indicator = Indicator + 1
i=i+1
BREAK
WEND
RETURN Indicator
Dans ce code, si on navait pas utilis BREAK, la boucle aurait continu et le rsultat serait un autre
indicateur de tendance cumulant le nombre de hausses conscutives.
b. Avec FOR
Lorsquon cherche sortir dune boucle itrative FOR, sans arriver la dernire (ou premire) valeur de la
srie, on utilise BREAK suivant la structure suivante :
FOR (Variable = ValeurDeFinDeSerie) TO ValeurDeDebutDeSerie DO
(Action)
BREAK
NEXT
Prenons pour exemple un indicateur cumulant le nombre de hausses conscutives du volume dans les 19
dernires barres. Cet indicateur rendra zro si le volume est baissier.
Indicator = 0
FOR i = 0 TO 19 DO
IF (Volume[i]>Volume[i+1]) THEN
Indicator = Indicator + 1
ELSE
BREAK
ENDIF
NEXT
RETURN Indicator
Dans ce code, si on navait pas utilis BREAK, la boucle aurait continu jusqu 19 (dernier lment de la
srie) mme si la condition de volume nest pas valide.
Avec BREAK, en revanche, ds que la condition nest plus valide, il retourne le rsultat et revient 0.
26 / 55
5) CONTINUE
Linstruction CONTINUE permet de replacer la lecture du programme la ligne de dbut dune boucle
WHILE ou FOR. Il est souvent utilis en association avec BREAK, pour donner lordre soit de sortir de la
boucle (BREAK) soit dy rester (CONTINUE).
a. Avec WHILE
Crons un programme cumulant le nombre de chandeliers ayant une clture suprieure et une ouverture
infrieure celles de la veille. Si la condition nest pas vrifie, le compteur reviendra zro.
Increase = Close > Close[1]
Count=0
WHILE Open<Open[1] DO
IF Increase[Count] THEN
Count = Count + 1
CONTINUE
ENDIF
BREAK
WEND
RETURN Count
Grce CONTINUE, lorsque la condition du IF est vrifie, on ne sort pas de la boucle WHILE, ce qui
permet de cumuler le nombre de figures vrifiant cette condition. Sans linstruction CONTINUE, le
programme sortirait de la boucle, que la condition du IF soit vrifie ou non. On ne pourrait donc pas
cumuler les apparitions de figures et le rsultat serait binaire (1,0).
b. Avec FOR
Crons un programme cumulant le nombre de chandeliers ayant une clture suprieure la veille. Si la
condition nest pas vrifie, le compteur reviendra zro.
Increase = Close > Close[1]
Count=0
FOR i = 1 TO BarIndex DO
IF Increase[Count] THEN
Count = Count + 1
CONTINUE
ENDIF
BREAK
NEXT
RETURN Count
27 / 55
FOR permet de tester la condition sur tout lhistorique disponible. Grce CONTINUE, lorsque la condition
du IF est vrifie, on ne sort pas de la boucle FOR et on continue avec la valeur du i suivant. Ceci permet de
cumuler le nombre de figures vrifiant cette condition.
Sans linstruction CONTINUE, le programme sortirait de la boucle, que la condition du IF soit vrifie ou non.
On ne pourrait donc pas cumuler les apparitions de figures et le rsultat serait binaire (1,0).
6) ONCE
Linstruction ONCE sert ne dclarer "quune seule fois" une variable.
Sachant que pour tout programme, le langage va lire autant de fois le code quil y a de barres sur le
graphique avant de retourner un rsultat, il faudra donc retenir que ONCE :
Nest trait par le programme quune seule et unique fois, relecture incluse.
Lors de la relecture du code par le langage, celle-ci va conserver les valeurs calcules lissue de
la lecture prcdente.
Pour bien comprendre comment fonctionne cette commande, il faut percevoir la manire dont le
langage lit le code; do lutilit de lexemple suivant.
Voici deux programmes qui retournent respectivement 0 et 15 et dont la seule diffrence est lajout de la
commande ONCE:
Programme 1
Programme 2
L1 Count = 0
L1 ONCE Count = 0
L2 i=0
L2 ONCE i=0
L3 IF i<=5 THEN
L3 IF i<=5 THEN
L4
Count = Count + i
L4
Count = Count + i
L5
i=i+1
L5
i=i+1
L6 ENDIF
L6 ENDIF
L7 RETURN Count
L7 RETURN Count
Programme 2 : le langage va lire L1 (Count = 0 ; i = 0), puis L2, L3, L4, L5, L6 (Count = 0 ; i = 1) ; arriv la
ligne de RETURN, il recommence la boucle depuis L3 (les lignes avec ONCE ne sont traites que la
premire fois), L4, L5, L6 (Count = 1 ; i = 2), puis revient nouveau (Count = 3 ; i = 3) et ainsi de suite
jusqu (Count = 15 ; i = 6). Arriv ce rsultat, la boucle en IF nest plus traite car la condition ne vaut
plus; ne lui restera lire que L7. Do le rsultat : 15.
28 / 55
Fonctions Mathmatiques
1) Fonctions usuelles unaires et binaires
Intressons-nous maintenant aux fonctions mathmatiques.
A noter que a et b sont des exemples darguments dcimaux. Ils peuvent tre remplacs par n'importe quelle
variable dans votre programme.
MIN(a, b) : calcule le minimum de a et de b
MAX(a, b) : calcule le maximum de a et de b
ROUND(a) : calcule un arrondi l'unit de a
ABS(a) : calcule la valeur absolue de a
SGN(a) : donne le signe de a (1 pour positif, -1 pour ngatif)
SQUARE(a) : calcule le carr de a
SQRT(a) : calcule la racine carr de a
LOG(a) : calcule le logarithme nprien de a
EXP(a) : calcule l'exponentiel de a
COS(a) : calcule le cosinus de a
SIN(a) : calcule le sinus de a
TAN(a) : calcule la tangente de a
ATAN(a) : calcule l'arc-tangente de a
Codons par exemple la loi mathmatique normale, intressante car elle utilise la fois la mise au carr, la
mise en racine carre et lexponentielle:
REM Loi Normale applique en x = 10, Ecart-type = 6 et Esprance = 8
REM Posons en variable optimise :
Ecarttype = 6
Esperance = 8
x = 10
Indicator= EXP((1/2)*(SQUARE(x -Esperance)/Ecarttype))/(Ecarttype*SQRT(2/3.14))
RETURN Indicator
29 / 55
4) Fonctions de sommation
Cumsum : Calcule la somme de toutes les barres du graphique
La syntaxe dutilisation de Cumsum est :
Cumsum (prix ou indicateur)
5) Fonctions Statistiques
La syntaxe dutilisation de ces fonctions est la mme que celle des indicateurs et de la fonction Sommation
savoir :
Lowest[nombre de barres](prix ou indicateur)
Lowest : donne la valeur la plus basse sur la priode dfinie
Highest : donne la valeur la plus leve sur la priode dfinie
STD : donne lcart-type sur une valeur pour une priode dfinie
STE : donne lcart-erreur sur une valeur pour une priode dfinie
30 / 55
Oprateurs logiques
De mme, comme tout langage informatique, il est ncessaire d'avoir disposition des oprateurs logiques
afin de crer des indicateurs pertinents. Vous trouverez ci-dessous les 4 oprateurs logiques de ProBuilder :
NOT(a) : NON logique
a OR b : OU logique
a AND b : ET logique
a XOR b : OU exclusif
Instructions ProBuilder
RETURN : affiche le rsultat
CustomClose : renvoie une valeur de prix paramtrable ; par dfaut, elle renvoie "Close"
CALL : appelle une fonction prcdemment cre par lutilisateur
AS : nomme les diffrents rsultats affichs
COLOURED : colorie le trac affich dune couleur dfinir
1) RETURN
Nous avons dj pu voir dans le premier chapitre, limportance de linstruction RETURN. Elle a des
proprits particulires quil faut connatre pour viter certaines erreurs de programmation.
Pour une utilisation correcte dans lcriture dun programme, RETURN sutilise:
Une seule et unique fois
A la dernire ligne de code
Optionnellement avec dautres fonctions telles quAS et COLOURED
Pour afficher plusieurs rsultats, on crit RETURN suivi par les rsultats quon veut afficher
spars par une virgule (exemple : RETURN a,b )
31 / 55
2) REM ou //
REM permet de placer dans le code des remarques. Elles servent principalement vous souvenir comment
fonctionne une fonction que vous auriez code. Ces remarques seront lues mais videmment pas traites
par le code. Illustrons lide par lexemple suivant :
REM ce programme retourne la moyenne mobile arithmtique de priode 20 sur le prix de clture
RETURN Average[20](Close)
Nutilisez pas les caractres spciaux (exemples : ,,,) dans ProBuilder, mme dans la
section REM
3) CustomClose
CustomClose est une constante qui permet dafficher les constantes Close, Open, High, Low et dautres
valeurs, qui peuvent tre slectionnes dans la fentre des proprits de lindicateur.
Sa syntaxe dutilisation est la mme que les constantes de prix qui s'adaptent la vue du graphique:
CustomClose[n]
Prenons un exemple simple :
RETURN CustomClose[2]
En cliquant sur la cl molette sur le coin suprieur gauche du graphique vous verrez quil est possible de
configurer les prix utiliss pour le calcul (sur le schma, entour en jaune).
32 / 55
4) CALL
CALL permet dappeler un indicateur personnalis dj prsent sur votre plateforme.
Le moyen le plus rapide consiste slectionner directement partir de la catgorie "Indicateurs utilisateur"
(dans le menu "Insrer fonction") lindicateur employer.
Imaginons que vous avez cod sous le nom de HistoMACD lindicateur du MACD en histogramme.
Slectionnez votre indicateur et cliquez sur "Ajouter" et dans la zone de programmation apparatra :
myHistoMACD = CALL HistoMACD
5) AS
Le mot-cl AS sert nommer le rsultat affich. Cette instruction est utilise avec RETURN selon la
structure suivante :
RETURN Result1 AS "Curve Name", Result2 AS "Curve Name",
Exemple:
a = ExponentialAverage[200](Close)
b = WeightedAverage[200](Close)
c = Average[200](Close)
RETURN a AS "Exponential Average" , b AS "Weighted Average" , c AS "Arithmetical Average"
33 / 55
6) COLOURED
COLOURED est utilis aprs la commande RETURN pour colorier le trac affich dune certaine couleur,
dfinie selon la norme RGB (red, green, blue). On peut donner les principales couleurs de cette norme :
Couleur
Valeur RGB
(rouge, vert, bleu)
Franais
(0, 0, 0)
noir
blanc
(255, 0, 0)
rouge
(0, 255, 0)
vert
(0, 0, 255)
bleu
(255, 255, 0)
jaune
cyan
(255, 0, 255)
magenta
34 / 55
35 / 55
vous aurez
36 / 55
Note : nous avons affich les moyennes mobiles exponentielles de priode 10 et 20 appliques au prix de
clture pour bien mettre en vidence les correspondances des rsultats de lindicateur.
Vous pouvez retrouver dautres indicateurs de dtection des figures de prix (voir section "Figures de
chandeliers")
37 / 55
Par ailleurs, dans le manuel ProBackTest vous pourrez trouver plusieurs exemples de stop insrer dans
des stratgies d'investissement.
Il existe 4 catgories de stops que nous allons passer en revue :
STOP prise de bnfices statique
STOP loss statique
STOP dinactivit
STOP suiveur (trailing stop)
Les codes proposs dans les exemples qui suivent reprsentent des indications pour la construction des
indicateurs de stops. Vous devrez ncessairement les personnaliser en utilisant les instructions apprises
dans les chapitres prcdents.
38 / 55
3) STOP dinactivit
Un STOP dinactivit ferme la position lorsque les gains n'ont pas atteint un objectif (dfini en % ou en
points) sur une priode dfinie (exprime en nombre de barres)
Exemple de STOP dinactivit en graphique Intraday:
Ce stop est utiliser avec deux indicateurs :
le premier est juxtaposer sur la courbe des prix
le deuxime visualiser sparment
39 / 55
Indicateur1
//MyVolatility = 0.01 correspond lcart relatif des bandes hautes et basse du range dfini
IF IntradayBarIndex = 0 THEN
ShortTarget = (1-MyVolatility)* Close
LongTarget = (1+MyVolatility)* Close
ENDIF
RETURN ShortTarget AS "ShortTarget", LongTarget AS "LongTarget"
Indicateur2
//On dfinit en variable optimise :
REM La prise de position se fait au prix du march
//MyVolatility = 0.01 correspond lcart relatif des bandes hautes et basses du range dfini
//NumberOfBars=20 correspond la dure maximale en nombre de barres sur lequel peut voluer les
prix avant que les positions ne soient coupes (rsultat plac 1)
Result = 0
Cpt=0
IF IntradayBarIndex = 0 THEN
ShortTarget = (1-MyVolatility)*Close
LongTarget = (1+MyVolatility)*Close
ENDIF
FOR i=IntradayBarIndex DOWNTO 1 DO
IF Close[i]>=ShortTarget AND Close[i]<=LongTarget THEN
Cpt=Cpt+1
ELSE
Cpt=0
ENDIF
IF Cpt = NumberOfBars THEN
Result = 1
ENDIF
NEXT
RETURN Result
40 / 55
41 / 55
Chapitre IV : exercices
Chapitre IV : exercices
Figures de chandeliers
GAP UP ou DOWN
42 / 55
Chapitre IV : exercices
43 / 55
Chapitre IV : exercices
44 / 55
Chapitre IV : exercices
Indicateurs
BODY MOMENTUM
Le Body Momentum est dfini mathmatiquement par :
BodyMomentum = 100*BodyUp / (BodyUp + BodyDown)
BodyUp (resp. BodyDown) est un compteur du nombre de barres clturant plus haut (resp. bas) que son
ouverture, et ce sur une priode dfinie (prenons priode = 14)
Periods = 14
b = Close - Open
IF BarIndex > Periods THEN
Bup= 0
Bdn= 0
FOR i=1 TO periods
IF b[i] > 0 THEN
Bup = Bup+1
ELSIF b[i] < 0 THEN
Bdn = Bdn+1
ENDIF
NEXT
BM =(Bup/(Bup+Bdn))*100
ELSE
BM = Undefined
ENDIF
RETURN BM AS "Body Momentum"
45 / 55
Chapitre IV : exercices
Williams %R
Voici un oscillateur dont le fonctionnement est similaire loscillateur stochastique. Pour le tracer, on
commence par dfinir dans un premier temps 2 courbes :
1) la courbe des plus hauts du plus haut sur 14 priodes
2) la courbe des plus bas du plus bas sur 14 priodes
Le %R se dfinit alors par (Close LowestL ) / (HighestH LowestL ) * 100
HighestH = Highest[14](High)
LowestL = Lowest[14](Low)
MyWilliams = (Close LowestL ) / ( HighestH LowestL )* 100
RETURN MyWilliams AS "Williams %R"
Bandes de Bollinger
On dfinit ces bandes par un encadrement de la moyenne mobile arithmtique sur 20 barres applique au
prix de clture.
La moyenne mobile est borne au-dessus (resp. en-dessous) par + (resp. -) 2 fois l'cart-type prise sur les
20 barres prcdentes du prix de clture.
a = Average[20](Close)
//On dfinit l'cart-type
StdDeviation = STD[20](Close)
Bsup = a + 2 * StdDeviation
Binf = a - 2 * StdDeviation
RETURN a AS "Average", Bsup AS "Bollinger Up" , Binf AS "Bollinger Down"
46 / 55
Glossaire
Glossaire
A
CODE
IMPLEMENTATION
FONCTION
Abs
Abs(a)
AccumDistr
AccumDistr(price)
ADX
ADX[N]
ADXR
ADXR[N]
AND
a AND b
Oprateur logique ET
AroonDown
AroonDown[P]
AroonUp
AroonUp[P]
Dsigne l'Aroon Up
Atan
Atan(a)
AS
RETURN x AS
"ResultName"
Average
Average[N](price)
AverageTrueRange
AverageTrueRange[N](price)
CODE
IMPLEMENTATION
FONCTION
BarIndex
BarIndex
BollingerBandWidth
BollingerBandWidth[N](price)
BollingerDown
BollingerDown[N](price)
BollingerUp
BollingerUp[N](price)
BREAK
(FOR...DO...BREAK...NEXT)
ou
(WHILE...DO...BREAK...WEND)
47 / 55
Glossaire
C
CODE
IMPLEMENTATION
FONCTION
CALL
myResult = CALL
myFunction
CCI
CCI[N](price) ou CCI[N]
ChaikinOsc
ChaikinOsc[Ch1, Ch2](price)
Chandle
Chandle[N](price)
ChandeKrollStopUp
ChandeKrollStopUp[Pp, Qq,
X]
ChandeKrollStopDown
ChandeKrollStopDown[Pp,
Qq, X]
Close
Close[N]
COLOURED
RETURN x
COLOURED(R,G,B)
COS
COS(a)
Fonction cosinus
Crosses Over
a Crosses Over b
Crosses Under
a Crosses Under b
CUMSUM
CUMSUM(price)
CurrentDayOfWeek
CurrentDayOfWeek
CurrentHour
CurrentHour
CurrentMinute
CurrentMinute
CurrentMonth
CurrentMonth
CurrentSecond
CurrentSecond
CurrentTime
CurrentTime
CurrentYear
CurrentYear
CustomClose
CustomClose[N]
Cycle
Cycle(price)
Indicateur Cycle
48 / 55
Glossaire
D
CODE
IMPLEMENTATION
FONCTION
Date
Date[N]
Day
Day[N]
Days
Days[N]
DayOfWeek
DayOfWeek[N]
Dclose
Dclose(N)
DEMA
DEMA[N](price)
Dhigh
Dhigh(N)
DI
DI[N](price)
DIminus
Diminus[N](price)
Dsigne le DI-
Diplus
Diplus[N](price)
Dsigne le DI+
Dlow
Dlow(N)
DO
Dopen
Dopen(N)
DOWNTO
Voir FOR
DPO
DPO[N](price)
CODE
IMPLEMENTATION
FONCTION
EaseOfMovement
EaseOfMovement[I]
ELSE
Voir IF/THEN/ELSE/ENDIF
ELSEIF
Voir IF/THEN/ELSE/ENDIF
Contraction de ELSE IF
EMV
EMV[N]
ENDIF
Voir IF/THEN/ELSE/ENDIF
EndPointAverage
EndPointAverage[N](price)
Exp
Exp(a)
ExponentialAverage
ExponentialAverage[N](price)
49 / 55
Glossaire
F-G
CODE
IMPLEMENTATION
FONCTION
FOR/TO/NEXT
FOR i =a TO b DO a NEXT
ForceIndex
ForceIndex(price)
CODE
IMPLEMENTATION
FONCTION
High
High[N]
Highest
Highest[N](price)
HistoricVolatility
HistoricVolatility[N](price)
Hour
Hour[N]
CODE
IMPLEMENTATION
FONCTION
IF/THEN/ENDIF
IF a THEN b ENDIF
IF/THEN/ELSE/ENDIF
IntradayBarIndex
IntradayBarIndex[N]
CODE
IMPLEMENTATION
FONCTION
LinearRegression
LinearRegression[N](price)
LinearRegressionSlope
LinearRegressionSlope[N]
(price)
Log
Log(a)
Low
Low[N]
Lowest
Lowest[N](price)
I-J-K
50 / 55
Glossaire
M
CODE
IMPLEMENTATION
FONCTION
MACD
MACD[S,L,Si](price)
MACDline
MACDLine[S,L](price)
MassIndex
MassIndex[N]
Max
Max(a,b)
MedianPrice
MedianPrice
Min
Min(a,b)
Minute
Minute
Mod
a Mod b
Momentum
Momentum[I]
MoneyFlow
MoneyFlow[N](price)
MoneyFlowIndex
MoneyFlowIndex[N]
Dsigne le MoneyFlowIndex
Month
Month[N]
CODE
IMPLEMENTATION
FONCTION
NEXT
Voir FOR/TO/NEXT
NOT
NOT a
CODE
IMPLEMENTATION
FONCTION
OBV
OBV(price)
ONCE
ONCE VariableName =
VariableValue
Open
Open[N]
OpenOfNextBar
OpenOfNextBar
OR
a OR b
Oprateur logique OU
51 / 55
Glossaire
P-Q
CODE
IMPLEMENTATION
FONCTION
PriceOscillator
PriceOscillator[S,L](price)
PositiveVolumeIndex
PriceVolumeIndex(price)
PVT
PVT(price)
CODE
IMPLEMENTATION
FONCTION
R2
R2[N](price)
Range
Range[N]
REM
REM comment
Repulse
Repulse[N](price)
RETURN
RETURN Result
ROC
ROC[N](price)
RSI
RSI[N](price)
Round
Round(a)
CODE
IMPLEMENTATION
FONCTION
SAR
SAR[At,St,Lim]
SARatdmf
SARatdmf[At,St,Lim](price)
Sin
Sin(a)
Sgn
Sgn(a)
SMI
SMI[N,SS,DS](price)
SmoothedStochastic
SmoothedStochastic[N,K]
(price)
Square
Square(a)
52 / 55
Glossaire
Sqrt
Sqrt(a)
STD
STD[N](price)
STE
STE[N](price)
Stochastic
Stochastic[N,K](price)
Ligne %K de la Stochastique
Summation
Summation[N](price)
SuperTrend
SuperTrend[STF,N]
CODE
IMPLEMENTATION
FONCTION
Tan
Tan(a)
TEMA
TEMA[N](price)
THEN
Voir IF/THEN/ELSE/ENDIF
Time
Time[N]
TimeSeriesAverage
TimeSeriesAverage[N](price)
TO
Voir FOR/TO/NEXT
Today
Today
TotalPrice
TotalPrice[N]
TR
TR(price)
TriangularAverage
TriangularAverage[N](price)
TRIX
TRIX[N](price)
TypicalPrice
TypicalPrice[N]
CODE
IMPLEMENTATION
FONCTION
Undefined
a = Undefined
53 / 55
Glossaire
V
CODE
IMPLEMENTATION
FONCTION
Variation
Variation(price)
Volatility
Volatility[S, L]
Volume
Volume[N]
Dsigne le volume
VolumeOscillator
VolumeOscillator[S,L]
VolumeROC
VolumeROC[N]
CODE
IMPLEMENTATION
FONCTION
WeightedAverage
WeightedAverage[N](price)
WeightedClose
WeightedClose[N]
WEND
Voir WHILE/DO/WEND
WHILE/DO/WEND
WHILE (condition) DO
(action) WEND
WilderAverage
WilderAverage[N](price)
Williams
Williams[N](close)
Calcule le %R de Williams
WilliamsAccumDistr
WilliamsAccumDistr(price)
Indicateur Accumulation/Distribution de
Williams
CODE
IMPLEMENTATION
FONCTION
XOR
a XOR b
54 / 55
Glossaire
Y
CODE
IMPLEMENTATION
FONCTION
Year
Year[N]
Yesterday
Yesterday[N]
CODE
IMPLEMENTATION
FONCTION
ZigZag
ZigZag[Zr](price)
ZigZagPoint
ZigZagPoint[Zp](price)
Autres
CODE
FONCTION
Oprateur d'addition
Oprateur de soustraction
Oprateur de multiplication
Oprateur d'galit
<>
Oprateur de diffrence
<
>
<=
Oprateur d'infriorit
>=
Oprateur de supriorit
55 / 55