Pour essayer une autre longueur de moyenne, vous avez jusqu’ici changé le nombre dans le code source. Vous allez maintenant en faire un réglage de l’indicateur. Le même programme pourra s’exécuter avec différentes longueurs.

Qu’est-ce qu’un input ?

Un input est une entrée nommée du programme, modifiable de l’extérieur. Le code source définit son type, sa valeur par défaut et sa plage autorisée. L’utilisateur choisit une valeur dans ce cadre.

Notre entrée s’appelle length et vaut 20 par défaut. La variable length servira de longueur à la moyenne mobile. Il faut aussi importer l’espace de noms input depuis pynecore.lib.

length: int = input.int(20, title="Average length", minval=1, maxval=200)

Cette ligne se place dans les paramètres de main(). int désigne un entier : 1, 20 ou 200 conviennent, mais pas 2,5. input.int décrit une entrée entière.

20 est la valeur par défaut ; Average length est le titre affiché dans l’interface. minval et maxval définissent les valeurs minimale et maximale autorisées. Une fenêtre de longueur zéro n’a pas de sens, nous l’excluons donc.

Le programme complet

Créez adjustable_average.py :

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


@script.indicator("Adjustable Average", overlay=True)
def main(
    length: int = input.int(20, title="Average length", minval=1, maxval=200),
):
    average = ta.sma(close, length)
    plot(average, "Average", color=color.blue, linewidth=2)

Après la parenthèse ouvrante de main, la liste des paramètres s’étend sur plusieurs lignes. ): termine cette liste et commence le corps de la fonction. Le calcul et le tracé qui suivent sont indentés de quatre espaces.

La virgule à la fin de la ligne de l’input permet d’ajouter d’autres paramètres. Elle est aussi autorisée avec un seul paramètre. Les deux parties indentées ont des rôles différents : entre parenthèses, nous définissons les entrées ; ensuite viennent les instructions exécutées.

Lancez le programme sur les données de démonstration. À la première exécution, la moyenne bleue utilise vingt bougies.

Ouvrir l’interface Inputs

  1. Activez le fichier adjustable_average.py.
  2. En haut à droite de l’éditeur, dans la barre d’outils à côté de l’onglet du fichier, cliquez sur l’engrenage. Son survol affiche Edit Inputs….
  3. Dans l’interface ouverte, trouvez le champ Average length.
  4. Remplacez sa valeur par 5, puis cliquez sur Save.

Vous pouvez aussi ouvrir cette interface depuis le groupe Scripts de la vue Pyne, à gauche : faites un clic droit sur adjustable_average.py et choisissez Edit Inputs…. Cette action figure également dans le menu contextuel du code ouvert.

À côté d’adjustable_average.py, l’interface Inputs affiche le champ Average length et le bouton Save.
L’entrée Average length se modifie dans l’interface Inputs de PyneIDE.

Lorsque vous cliquez sur Save, PyneIDE recalcule automatiquement le graphique ouvert avec le réglage enregistré. Attendez son actualisation : la ligne bleue représente alors une moyenne sur cinq bougies.

Le code source conserve 20 comme valeur par défaut. Le 5 enregistré dans Inputs la remplace pour ce projet.

Réglez maintenant la valeur sur 50 et enregistrez à nouveau. Comparez la réaction de la ligne aux variations de prix sur la même période. Déplacer seulement la période visible du graphique ne modifie pas l’input du programme.

Où le réglage est-il conservé ?

Un fichier .toml de même nom, placé à côté du programme, conserve les réglages enregistrés. Ici, c’est adjustable_average.toml.

TOML est un format de configuration textuel. PyneIDE gère ce fichier ; l’interface Inputs suffit pour l’exercice. Si vous ouvrez le fichier, la partie correspondant à la longueur ressemble à ceci :

[inputs.length]
value = 5

Les crochets désignent ici un groupe de paramètres. Il ne s’agit pas de l’historique des bougies vu dans le chapitre sur les valeurs passées : nous sommes dans un autre fichier, avec les règles d’un autre langage.

Le nom du paramètre dans le code et son titre dans l’interface sont aussi différents. Le fichier contient length, l’interface Average length. Le programme utilise le nom du code.

Si vous renommez un input dans le code, la valeur enregistrée sous l’ancien nom ne devient pas celle du nouvel input. Rouvrez Inputs et vérifiez la valeur. Lorsque vous copiez un programme, copiez son fichier .toml seulement si vous souhaitez conserver aussi les réglages enregistrés.

Valeur par défaut et valeur effective

Si vous changez la valeur par défaut de 20 à 30 dans le code mais avez déjà enregistré 5, l’exécution peut utiliser 5. Le réglage enregistré est prioritaire.

Pour décrire un résultat, notez donc la valeur effective des inputs. La valeur par défaut visible dans le code ne décrit pas à elle seule tous les réglages d’une exécution.

À vous de jouer

Ajoutez un deuxième paramètre de longueur. La moyenne courte doit avoir une valeur par défaut de 5 ; la longue, de 20. Chacune doit accepter des valeurs de 1 à 200. Tracez-les avec des titres différents.

Solution de l’exercice

La liste des paramètres de main() :

fast_length: int = input.int(5, title="Fast length", minval=1, maxval=200),
slow_length: int = input.int(20, title="Slow length", minval=1, maxval=200),

Le corps :

fast_average = ta.sma(close, fast_length)
slow_average = ta.sma(close, slow_length)
plot(fast_average, "Fast average", color=color.blue, linewidth=2)
plot(slow_average, "Slow average", color=color.orange, linewidth=2)

Les deux inputs se modifient séparément. Les limites définies n’imposent pas encore que la longueur rapide soit inférieure à la lente. Cette relation nécessite une vérification distincte, abordée dans le projet final.

Vérifier l’enregistrement

Réglez la longueur sur un. Une SMA d’une bougie est égale à la clôture de cette bougie : la ligne doit donc passer par les clôtures. Remettez ensuite vingt. À la réouverture du fichier, vérifiez que l’interface affiche bien la valeur enregistrée de vingt.