Si le plus haut d’une bougie est 108 et son plus bas 101, leur différence vaut 7. Nous allons calculer cette amplitude et la tracer pour chaque bougie.

Le deuxième programme calcule le milieu entre les deux prix. Les deux exemples utilisent des variables et des opérations arithmétiques simples.

Que représente une bougie ?

Une bougie résume les données d’une période. Sa durée est définie par l’unité de temps. Sur des données horaires, par exemple, une bougie représente une heure.

Vous rencontrerez cinq données de base :

  • open : le cours d’ouverture de la période ;
  • high : son cours le plus haut ;
  • low : son cours le plus bas ;
  • close : son cours de clôture ;
  • volume : son volume échangé, dans l’unité utilisée par la source de données.

Leurs initiales anglaises forment l’abréviation OHLCV. Les premiers exemples du livre utilisent des données d’exemple de bougies déjà clôturées.

close désigne toujours la clôture de la bougie que le programme traite actuellement. À la bougie suivante, il désignera la clôture de cette nouvelle bougie. Il en va de même pour les autres données de base.

Calculer l’amplitude

Avec un plus haut à 108 et un plus bas à 101, le prix a parcouru une amplitude de 7 unités :

108 − 101 = 7

Dans le code :

candle_range = high - low

high - low est une expression : le programme l’évalue et produit un résultat. - désigne la soustraction.

candle_range est un nom de variable. = lui attribue le résultat de l’expression à droite. Cette opération s’appelle une affectation.

Lisez cette ligne ainsi : « Calcule la différence entre high et low et appelle le résultat candle_range. » Vous pourrez ensuite utiliser cette valeur sous ce nom dans les lignes suivantes.

Choisir un nom compréhensible

candle_range indique que la valeur représente l’amplitude d’une bougie. Un nom comme x aiderait moins à comprendre le code.

Dans le livre, les variables ont des noms anglais en minuscules, avec un trait de soulignement entre les mots. Un nom ne doit pas commencer par un chiffre ni contenir d’espace. candle_range et Candle_range seraient deux noms différents.

Créer un indicateur dans un panneau séparé

Créez un fichier candle_range.py dans scripts et écrivez-y ce programme :

"""
@pyne edge
"""
from pynecore.lib import color, high, low, plot, script


@script.indicator("Candle Range", overlay=False)
def main():
    candle_range = high - low
    plot(candle_range, "Range", color=color.orange, linewidth=2)

La première ligne de main() calcule la valeur ; la seconde la transmet à plot sous le nom candle_range. L’affectation doit précéder l’utilisation de la valeur.

overlay=False demande un panneau séparé. L’amplitude aura ainsi sa propre échelle : une amplitude de 7 unités et un cours proche de 100 sont, par exemple, des valeurs d’ordres de grandeur différents.

Enregistrez le programme et exécutez-le sur les mêmes données de démonstration.

À côté du code de candle_range.py, un panneau Range séparé apparaît sous les bougies.
La ligne Range affiche la différence entre high et low dans un panneau séparé. Une valeur plus élevée correspond à une plus grande amplitude dans la bougie.

Lire le résultat

Les points les plus hauts correspondent à des écarts de prix plus grands ; les points bas à de plus petites amplitudes. Le calcul utilise le plus haut et le plus bas de toute la bougie, mèches comprises.

Une bougie haussière et une bougie baissière peuvent avoir la même amplitude. Cette valeur ne permet donc pas de connaître la direction du mouvement. high est au moins égal à low : avec des données de bougie correctes, le résultat est positif ou nul.

Que devient la variable à la bougie suivante ?

Le programme répète ces deux étapes à chaque bougie traitée :

  1. Il calcule candle_range à partir des valeurs high et low de cette bougie.
  2. plot affiche cette valeur à l’emplacement de la bougie.

Par exemple :

  • Première bougie : high = 108, low = 101, donc candle_range = 7.
  • Deuxième bougie : high = 110, low = 106, donc candle_range = 4.
  • Troisième bougie : high = 109, low = 103, donc candle_range = 6.

Le graphique affiche ainsi trois points correspondant à 7, 4 et 6. À chaque bougie, la variable reçoit le résultat du calcul actuel.

Nous verrons plus tard l’accès aux valeurs des bougies précédentes et la conservation d’un état.

Addition, multiplication et division

Les calculs simples utilisent les signes suivants dans le code :

  • + : addition ;
  • - : soustraction ;
  • * : multiplication ;
  • / : division.

La multiplication et la division passent avant l’addition et la soustraction. Les parenthèses indiquent ce qu’il faut calculer en premier.

Le milieu de l’intervalle des prix :

midpoint = (high + low) / 2

Nous additionnons les deux prix, puis divisons le résultat par deux. Si high = 108 et low = 101, le milieu vaut 104,5.

Attention au séparateur décimal : le code utilise 104.5, même si nous écrivons 104,5 en français. La virgule a un autre rôle dans le code, par exemple séparer les paramètres d’une fonction.

Tracer le prix médian

Créez un fichier candle_midpoint.py :

"""
@pyne edge
"""
from pynecore.lib import color, high, low, plot, script


@script.indicator("Candle Midpoint", overlay=True)
def main():
    midpoint = (high + low) / 2
    plot(midpoint, "Midpoint", color=color.purple, linewidth=2)

Nous utilisons de nouveau overlay=True, pour afficher le prix médian sur la même échelle de prix que les bougies.

À côté de candle_midpoint.py, le graphique affiche la ligne Midpoint reliant les prix médians des bougies.
La ligne Midpoint indique, à chaque bougie, le milieu entre high et low.

Après l’exécution, choisissez une bougie et observez le point de la ligne à son emplacement. Il se trouve au milieu de l’amplitude complète de la bougie, mèches comprises. Il peut différer du milieu du corps, qui dépend des cours d’ouverture et de clôture.

Pourquoi les parenthèses comptent-elles ?

Ces deux expressions décrivent des calculs différents :

(high + low) / 2
high + low / 2

La seconde ligne divise seulement low par deux, puis ajoute high. Avec 108 et 101, elle donnerait 158,5. Ce n’est plus le milieu entre les deux prix.

Les deux expressions sont syntaxiquement correctes, mais donnent des résultats différents. Un exemple que vous pouvez calculer à la main permet de vérifier rapidement si vous avez écrit le calcul voulu.

À vous de jouer

Tracez la variation signée du corps de la bougie : soustrayez l’ouverture à la clôture.

  1. Nommez le fichier candle_change.py.
  2. Donnez à l’indicateur le titre "Candle Change" et affichez-le dans un panneau séparé.
  3. Appelez le résultat du calcul candle_change.
  4. Nommez le tracé "Change".

Avant l’exécution, calculez le résultat attendu dans ces trois cas :

  • open = 100, close = 104 ;
  • open = 100, close = 97 ;
  • open = 100, close = 100.
Solution de l’exercice

Les résultats sont 4, −3 et 0. Une valeur positive indique une clôture plus haute ; une valeur négative, une clôture plus basse ; zéro, une ouverture et une clôture identiques.

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


@script.indicator("Candle Change", overlay=False)
def main():
    candle_change = close - open
    plot(candle_change, "Change", color=color.blue, linewidth=2)

Comparer les trois programmes

Ouvrez successivement les programmes calculant l’amplitude, le prix médian et la variation. Chacun calcule une variable à partir des données OHLC, puis la trace à la ligne suivante. Le programme traite les données bougie par bougie. Les différences viennent du calcul et du réglage overlay.

Dans le chapitre suivant, nous comparerons les valeurs de deux bougies et verrons comment accéder aux données de la bougie précédente.