|
Utiliser des variables pour améliorer et simplifier
Dans le but de raccourcir, simplifier, améliorer, et rendre plus facile la mise à jour de formules complexes, vous pourrez utiliser des variables. Une variable est un nom alphanumérique (jusqu'à 20 caractères) qui est attribué à une expression ou à une valeur. Jusqu'à 20 variables peuvent être utilisées dans une seule et même formule. Les variables doivent être attribuées avant que l’une d’entre elles ne soit utilisée dans la formule. Une demi-colonne doit être utilisée au bout de la ligne d’attribution de la variable. Les variables ne peuvent pas être attribuées à l’intérieur d’une fonction.
Affecter des noms à des variables
Les règles suivantes s’appliquent pour affecter des noms à des variables:
L’expression suivante entraînerait un message d’erreur, étant donné que la lettre " s " est réservée pour la fonction moyenne mobile - mov() - voulant dire dans ce cadre : " simple ".
s:= (h+l+c)/3;
Utiliser des variables pour représenter des nombres
Supposez que vous voudriez être capable d’ajuster rapidement l’unité de temps dans la formule toute entière sans avoir à modifier une à une toutes les parties où celle-ci apparaît. Nous pourrions faire cela en attribuant l’unité de temps à une variable - dans ce cas, une variable à laquelle nous attribuerions le nom de "periods".
periods := 10;
c > mov(c,periods, s) and ref(c,-1) > ref(mov(c,periods,s),-1) and h > mov(h,periods,s) and ref(h,-1) > ref(mov(h,periods,s),-1)
Dans la formule ci-dessus, le nombre 10 se substitue à la variable chaque fois qu’une variable appelée " periods " apparaît dans la formule. Chaque fois que vous voulez ajuster le nombre d’unités de temps à utiliser dans la formule, vous n’avez plus qu’à modifier le nombre attribué à la variable " periods ". Si vous changez " 10 " en " 20 ", le nombre " 20 " se substituera à " 10 " partout dans la formule.
Bien entendu, vous pourriez également attribuer plusieurs variables pour représenter plusieurs nombres, comme dans l’exemple qui suit:
periods1 := 10;
periods2 := 20;
c > mov(c,periods1, s) and ref(c,-1) > ref(mov(c,periods1,s),-1) and h > mov(h,periods2,s) and ref(h,-1) > ref(mov(h,periods2,s),-1)
Dans ce cas, les variables " periods1 " et " periods2 " représentent deux valeurs différentes qui peuvent être utilisées plusieurs fois dans différents endroits de la formule.
Utiliser des variables pour représenter des expressions mathématiques
Des variables peuvent être attribuées pour représenter une expression mathématique (i.e., une formule). Peut-être que c’est là que réside le plus grand intérêt de l’usage des variables. Attribuer des variables à la représentation de formules (et plus particulièrement celles qui sont longues et complexes) rend les formules plus faciles à lire, plus faciles à modifier, et plus rapides à calculer.
Par exemple, la formule suivante (qui est bâtie pour indiquer les valeurs coincées entre des niveaux de support et de résistance), est assez complexe et difficile à lire. Nous pouvons la simplifier en utilisant des variables. Elle a été écrite, à l’origine, avant que l’aide des variables ait été ajoutée au langage de formule de MetaStock.
(If(Abs((Trough(1,L,1)-Trough(2,L,1))/Trough(2,L,1))<.015 AND Abs((Trough(2,L,1)-Trough(3,L,1))/Trough(3,L,1))<.015,{then} (Trough(1,L,1)+Trough(2,L,1)+Trough(3,L,1))/3,0))<>0
and
(If(Abs((Peak(1,H,1)-Peak(2,H,1))/Peak(2,H,1))<.015 AND Abs((Peak(2,H,1)-Peak(3,H,1))/Peak(3,H,1))<.015,{then} (Peak(1,H,1)+Peak(2,H,1)+Peak(3,H,1))/3,0))<>0
and
c>=(If(Abs((Trough(1,L,1)-Trough(2,L,1))/Trough(2,L,1))<.015 AND Abs((Trough(2,L,1)-trough(3,L,1))/Trough(3,L,1))<.015,{then} (Trough(1,L,1)+Trough(2,L,1)+Trough(3,L,1))/3,0)) and
c<=(If(Abs((Peak(1,H,1)-Peak(2,H,1))/Peak(2,H,1))<.015 AND Abs((Peak(2,H,1)-Peak(3,H,1))/Peak(3,H,1))<.015,{then} (Peak(1,H,1)+Peak(2,H,1)+Peak(3,H,1))/3,0)
Le seul fait de définir deux variables (en gras) pour représenter les deux expressions qui sont utilisées plusieurs fois vous permet de simplifier substantiellement la formule. En plus d’être plus facile à lire, la formule simplifiée est également calculée plus vite étant donné que les expressions de support et résistance n’ont plus besoin maintenant que d’être calculées une seule fois.
Support
:= (If(Abs((Trough(1,L,1)-trough(2,L,1))/Trough(2,L,1))<.015 AND Abs((Trough(2,L,1)-trough(3,L,1))/Trough(3,L,1))<.015,{then} (Trough(1,L,1)+Trough(2,L,1)+Trough(3,L,1))/3,0));
Resistance:= (If(Abs((Peak(1,H,1)-Peak(2,H,1))/Peak(2,H,1))<.015 AND Abs((Peak(2,H,1)-Peak(3,H,1))/Peak(3,H,1))<.015, {then}(Peak(1,H,1)+Peak(2,H,1)+Peak(3,H,1))/3,0));
Support <> 0 and Resistance <> 0 and close >= Support and close <= Resistance
Notez que vous pouvez également créer deux indicateurs personnalisés que vous appellerez " support " et " resistance " pour faire vos calculs. Ces deux indicateurs personnalisés pourront être appelés tout simplement en utilisant la fonction fml() de la façon suivante:
fml("support") <> 0 and fml("resistance") <> 0 and close >= fml("support") and close <= fml("resistance")
Cependant, il est préférable d’utiliser des variables plutôt que la fonction fml() pour plusieurs raisons—la plus importante étant la rapidité et le caractère compact de cette formule (i.e., la fonction dans sa totalité peut être lue et éditée en un seul endroit).
Référencer des variables au sein d’indicateurs personnalisés
Etant donné que les indicateurs personnalisés peuvent contenir des variables, vous pouvez référencer une variable précise dans le cadre d’un indicateur personnalisé plutôt que de référencer tout l’indicateur personnalisé. La fonction fmlvar() est utilisée pour cela.
Par exemple, si l’indicateur personnalisé appelé " MyMACD " contient une variable appelée " SignalLine ", et que vous vouliez référencer seulement cette variable SignalLine variable, vous pourriez le faire comme ci-dessous en utilisant la fonction fmlvar():
fmlvar("MyMACD", "SignalLine" )
Si la variable n’existe pas au sein même de l’indicateur personnalisé, vous recevrez un message d’erreur.