La ligne des clôtures suit chaque mouvement des bougies. Calculer la moyenne de plusieurs clôtures successives produit une ligne moins irrégulière. Dans ce chapitre, vous créerez deux moyennes mobiles sur dix bougies.

Calculer une moyenne

La moyenne simple de trois valeurs est leur somme divisée par trois. Avec 100, 103 et 101 :

(100 + 103 + 101) / 3 = 101.333...

La fenêtre d’une moyenne mobile conserve une taille fixe, mais avance avec les bougies. Dans une fenêtre de trois bougies, la clôture la plus récente entre et la plus ancienne sort à chaque nouvelle bougie.

Si la nouvelle clôture est 105, la moyenne suivante est (103 + 101 + 105) / 3, soit 103. La première clôture de 100 n’en fait plus partie.

Une moyenne mobile simple sur dix bougies utilise la clôture actuelle et les neuf précédentes. Elle n’utilise pas la bougie actuelle et dix autres : dix est le nombre total de valeurs prises en compte.

Les fonctions de ta

L’espace de noms ta contient des calculs prêts à l’emploi. ta.sma(close, 10) renvoie la moyenne mobile simple de dix clôtures. SMA signifie « simple moving average ».

L’appel reçoit deux arguments :

  • close : la source dont on calcule la moyenne ;
  • 10 : la taille de la fenêtre en bougies.

Les neuf premières bougies ne fournissent pas encore dix clôtures. La SMA y vaut na ; sa première valeur valide apparaît à la dixième bougie. Cette phase initiale est aussi appelée période d’initialisation.

La taille de la fenêtre n’est pas une durée en secondes. Dix bougies journalières et dix bougies horaires couvrent des périodes différentes.

SMA et EMA côte à côte

L’EMA, ou moyenne mobile exponentielle, accorde davantage de poids aux valeurs récentes. ta.ema(close, 10) utilise aussi une longueur de dix bougies, avec une autre formule.

L’EMA démarre à la moyenne simple de la première fenêtre complète. Pour une longueur de dix, les deux lignes apparaissent donc à la dixième bougie. Ensuite, l’EMA ajoute à sa valeur précédente une fraction de l’écart entre le nouveau cours et l’EMA précédente. Cette fraction est 2 / (10 + 1).

Créez moving_averages.py :

"""
@pyne edge
"""
from pynecore.lib import close, color, plot, script, ta


@script.indicator("Two Moving Averages", overlay=True)
def main():
    simple_average = ta.sma(close, 10)
    exponential_average = ta.ema(close, 10)
    plot(simple_average, "SMA 10", color=color.blue, linewidth=2)
    plot(exponential_average, "EMA 10", color=color.orange, linewidth=2)

Exécutez-le sur les données de démonstration. La SMA bleue et l’EMA orange apparaissent avec les bougies. Déplacez le graphique pour observer les moments où le cours change brusquement de direction. Les deux moyennes ne réagissent pas forcément au même rythme.

Après l’exécution de moving_averages.py dans PyneIDE, une SMA bleue et une EMA orange apparaissent avec les bougies.
Une SMA et une EMA de longueur dix sont calculées à partir des mêmes clôtures.

Une moyenne est une ligne calculée à partir des valeurs passées. Sa forme plus lisse ne suffit pas à prédire la direction future du cours.

Pourquoi calculer à chaque bougie ?

ta.sma et ta.ema utilisent aussi un état de calcul entre les exécutions successives. Dans l’exemple, les deux appels s’exécutent à chaque bougie.

Plus loin, nous écrirons du code qui effectue une opération seulement dans certains cas : tracer un repère lorsque la clôture est au-dessus de la moyenne, par exemple. Le chapitre Conditions et repères graphiques l’explique.

Même dans ce cas, calculez la moyenne à chaque bougie, puis décidez comment l’utiliser. Si vous appelez ta.sma seulement sur les bougies haussières, son calcul saute les autres bougies et le résultat peut différer de la moyenne sur la série complète. Pour le moment, retenez que les deux calculs de moyenne doivent s’exécuter à chaque bougie.

Ces deux lignes ne nécessitent pas d’annotation Series sur vos variables : nous traçons les valeurs actuelles sans utiliser simple_average[1]. Si vous souhaitez ensuite indexer directement l’historique d’une variable, ajoutez Series[float].

Une fenêtre plus longue ou plus courte

Augmenter la longueur fait intervenir davantage de cours passés. La ligne devient généralement plus lisse et suit les changements de prix avec plus de retard. Une longueur plus courte laisse davantage apparaître les mouvements récents.

Essayez sur les mêmes données :

  1. Exécutez les deux moyennes sur dix bougies et repérez un retournement reconnaissable.
  2. Remplacez la longueur par 30 dans les deux appels.
  3. Changez aussi les titres en SMA 30 et EMA 30.
  4. Relancez et retrouvez le même instant.

Nous changeons aussi le titre parce que "SMA 10" est seulement un libellé. Le nombre qu’il contient ne modifie pas le calcul. Le deuxième argument de l’appel détermine la fenêtre.

À vous de jouer

Créez deux moyennes mobiles simples : l’une sur cinq bougies, l’autre sur vingt. La courte doit être bleue, la longue orange. Donnez à chacune un titre approprié.

Solution de l’exercice

Dans le corps de main(), remplacez les deux calculs et les tracés par :

fast_average = ta.sma(close, 5)
slow_average = ta.sma(close, 20)
plot(fast_average, "SMA 5", color=color.blue, linewidth=2)
plot(slow_average, "SMA 20", color=color.orange, linewidth=2)

Pour cinq, les quatre premières valeurs manquent ; pour vingt, les dix-neuf premières. Après l’initialisation, les deux lignes utilisent la même série de clôtures avec des fenêtres différentes.

Vérifier la fenêtre

Vous pouvez vérifier une SMA de trois bougies à la main. Réglez la longueur sur trois, choisissez trois clôtures successives et calculez leur moyenne. À la troisième bougie, le graphique doit afficher cette même valeur. Les deux premières bougies n’ont pas de fenêtre complète.