Ce matin, motivé par la découverte de la plateforme PRT, j'ai créé un petit indicateur pour mettre à l'épreuve ProBuilder...
Premier ressenti:
- autant vous dire que l'inexistence des tableaux multidimensionnels me pose vraiment problème...
- en dehors des fonctions natives au builder, il faut faire pas mal de pirouettes pour obtenir le résultat escompté même pour des choses simples, l'optimisation est donc vraiment limitée.
- impossible de créer des sous-fonctions, c'est aussi un gros problème car si l'on complexifie le code, cela peut rapidement devenir illisible, à voir...
Si ça vous intéresse et que vous voulez effectuer un petit test, il s'agit d'un indicateur simple pouvant généré une moyenne ou médiane mobile en fonction de différents types de prix:
Il vous faudra créer les variables ci-dessous:
- "TypeMA1" (type de la moyenne mobile):
0 = SIMPLE
1 = EXPONENTIELLE
2 = LISSEE
3 = PONDEREE
4 = MEDIANE
"TypePRIX1" (type de prix):
0 = FERMETURE (Close)
1 = OUVERTURE (Open)
2 = PLUS HAUT (High)
3 = PLUS BAS (Low)
4 = MEDIAN (High+Low/2)
5 = TYPIQUE ((High+Low+Close)/3)
6 = PONDERE ((High+Low+Close*2)/4)
"Periode1" (entier représentant le nombre de bougies pour la période de calcul)
Code : #
REM ---- Calcul du prix en fonction de la configuration choisie
IF TypePRIX1 = 0 THEN
PRIX1 = Close
ELSIF TypePRIX1 = 1 THEN
PRIX1 = Open
ELSIF TypePRIX1 = 2 THEN
PRIX1 = High
ELSIF TypePRIX1 = 3 THEN
PRIX1 = Low
ELSIF TypePRIX1 = 4 THEN
PRIX1 = MedianPrice
ELSIF TypePRIX1 = 5 THEN
PRIX1 = TypicalPrice
ELSIF TypePRIX1 = 6 THEN
PRIX1 = WeightedClose
ENDIF
REM ---- Calcul de la MA1 en fonction de la configuration choisie
IF BARINDEX < Periode1 THEN
MA1 = UNDEFINED
ELSIF TypeMA1 = 0 THEN
MA1 = Average[Periode1](PRIX1)
ELSIF TypeMA1 = 1 THEN
MA1 = ExponentialAverage[Periode1](PRIX1)
ELSIF TypeMA1 = 2 THEN
MA1 = WilderAverage[Periode1](PRIX1)
ELSIF TypeMA1 = 3 THEN
MA1 = WeightedAverage[Periode1](PRIX1)
ELSIF TypeMA1 = 4 THEN
Periode1 = (Periode1 MOD 2 = 0) + Periode1
FOR i = 0 TO Periode1 - 1
Inf = 0
Egal = 0
FOR j = 0 to Periode1 - 1
IF PRIX1[j] < PRIX1[i] THEN
Inf = Inf + 1
ELSIF PRIX1[j] = PRIX1[i] THEN
Egal = Egal + 1
ENDIF
NEXT
Sup = Periode1 - Inf - Egal
IF MIN(Inf,Sup) + Egal > MAX(Inf,Sup) THEN
MA1 = PRIX1[i]
BREAK
ENDIF
NEXT
ENDIF
RETURN MA1
A votre écoute, koub. :roll:
Ci-dessous deux exemples:
- moyenne mobile exponentielle sur un prix médian (période 20)
- médiane mobile calculée sur un prix médian (période 20)