Le Zigzag "Rock 'n' Roll".
Voici un indicateur qui retourne une image différente de la représentation des cours. A l'origine, j'avais en tête de backtester les fourchettes d'Andrews. J'avais besoin de détecter les pics et les creux pour y appliquer un zigzag. Malheureusement le logiciel Prorealtime ne permet pas d'appliquer un zigzag sur un indicateur utilisateur dans un programme (mais je ne désespère pas de trouver une parade). L'indicateur dans sa phase actuelle ne peut servir que comme aide visuelle à la formation des fourchettes. Dans sa version complète, on peut aller jusqu'à imaginer la détection de figures chartistes et donc le backtest de celles-ci.
La construction de l'indicateur :
- détecter la tendance : higher/high et higher/low = tendance haussière, l'inverse pour la baisse.
- gèrer les outsidebar's : si la tendance est à la hausse, je prends le high, l'inverse pour la baisse. (1)
- gèrer les insidebar's : si la tendance est à la hausse, je prends le low, l'inverse pour la baisse. (2)
Ces choix (1 et 2) sont arbitraires, on pourrait en faire d'autres (par exemple en fonction de la couleur de la bougie ou du niveau de cloture).
La gestion de l'écran (3) : on fait apparaître l'indicateur dans une nouvelle fenêtre, on y ajoute l'indicateur de barcharts colorées (pas le prix car c'est impossible sur un indicateur, et si on commence par le prix, le zigzag se calculera sur le prix et non sur l'indicateur) puis on ajoute le zigzag Prorealtime et enfin on rend invisible l'indicateur. (vous suivez ?)
Voici une vue de l'écran avec l'indicateur brut : en haut, appliqué sur les cours et en bas, seul avec un zigzag.
Une autre vue du CAC au 16/10 avec comme expliqué (3), l'indicateur barcharts colorées en plus (zigzag à 3%) :
On constate bien que le zigzag s'applique alternativement sur le low puis sur le high. Et maintenant le code :
once a=high
once b=1
// determination de la bougie
if high>=high[1] and low>low[1] then
//code=1 // hausse
a=high
b=1
endif
if high>high[1] and low>=low[1] then
a=high
b=1
endif
if low<=low[1] and high<high[1] then
//code=2 // baisse
a=low
b=-1
endif
if low<low[1] and high<=high[1] then
a=low
b=-1
endif
if high>high[1] and low<low[1] then
//code=3 // outsidebar
if b=1 then
a=high
else
a=low
endif
endif
if high<high[1] and low>low[1] then
//code=4 //insidebar
if b=1 then
a=low
b=-1
else
a=high
b=1
endif
endif
return a
PS : j'ai aussi essayé un zigzag à pas variable, mais ça marche pas avec Prorealtime.