Scripting : écrire une stratégie

Un script de stratégie définit decide(bars, params, ctx, state) et renvoie une décision par barre close. Cette décision pilote le compte d'évaluation simulé, et rien d'autre.

Senzoukria · Documentation · Mis à jour en septembre 2026


Où le trouver

Page Scripting → Nouvelle stratégie
Point d'entrée
decide(bars, params, ctx, state), qui renvoie une décision ou null
Cadence
Une fois par barre close — la barre en cours n'est jamais transmise
Compte
Le compte d'évaluation simulé de cette machine ; la plateforme n'achemine aucun ordre vers un broker
Langages
JavaScript et Python partagent le même point d'entrée et la même forme de décision

Ce que ça fait

Une stratégie s'exécute dans le même bac à sable qu'un indicateur. Une courte enveloppe est ajoutée après votre code — après, pour que vos numéros de ligne restent ceux que vous voyez dans l'éditeur — qui appelle decide(), normalise ce qui revient et transporte l'objet state jusqu'à la barre suivante.

Si decide() n'est pas défini, l'exécution échoue avec un message rappelant qu'une stratégie doit définir decide(bars, params, ctx, state). Si elle renvoie undefined ou null, c'est une réponse valide qui veut dire « pas de trade sur cette barre », et le bandeau d'exécution affiche « aucun trade sur cet échantillon ».

Le contexte transporte la position simulée, un indicateur de position plate et la taille du tick : les distances s'expriment donc en ticks, et le même script fonctionne sur un autre contrat sans rien modifier.

L'objet décision

Ce que decide() a le droit de renvoyer
ChampPar défautCe que ça change
action: "buy"Ouvre un long au marché sur le compte simulé, sous réserve des garde-fous du compte.
action: "sell"Ouvre un short au marché, sous les mêmes garde-fous.
action: "close"Aplatit la position ouverte ; sans effet si vous êtes déjà plat.
qty1Nombre de contrats. Arrondi à l'entier inférieur et ramené à 1 au minimum.
stopTicksaucunDistance de sortie côté perte, en ticks depuis le prix d'exécution.
targetTicksaucunDistance de sortie côté gain, en ticks.
nullAucun trade sur cette barre.
state{}Tout ce que vous rangez dans l'objet state vous est rendu à la barre suivante ; il est vidé quand le script change.

Comment s'en servir

  • Partez du modèle Stratégie de cassure : il achète la cassure du plus-haut de N barres avec un stop et un objectif fixes, et montre comment se servir de l'état transporté pour compter les barres depuis l'entrée.
  • Testez d'abord sur les données d'exemple — une exécution de stratégie indique si une décision a seulement été rendue, ce qui est le moyen le plus rapide de repérer une condition qui ne se déclenche jamais.
  • Montez-la ensuite dans le bandeau Stratégie auto du Replay, pour la regarder décider barre après barre sur des données réellement rejouées.
  • Exprimez le risque en ticks, pas en prix : la taille du tick arrive dans le contexte et le compte traduit la distance en niveau de sortie.

Limites et pièges

  • Les garde-fous du compte s'appliquent avant toute entrée : un drawdown franchi, une perte journalière atteinte ou un plafond de contrats dépassé la refusent, et le panneau affiche la raison.
  • Une valeur de retour qui n'est pas une décision reconnue est signalée comme telle, avec les formes acceptées nommées.
  • Comme les décisions se prennent sur barres closes, une stratégie ne peut pas réagir à un mouvement intrabarre — c'est ce qui garde comparables une exécution en simulé et un backtest du même code.
  • Aucun script n'atteint un broker. Une stratégie écrite ici est une stratégie sur compte simulé, et aucun résultat qu'elle produit n'est une promesse sur le trading réel.

Cette page dans d’autres langues

Questions fréquentes

Peut-on écrire une stratégie en Python ?
Oui. L'enveloppe existe dans chaque langage et s'ajoute dans celui du script : une stratégie Python reçoit donc une enveloppe Python. Écrivez les clés de décision stopTicks et targetTicks, ce sont celles que lit le bandeau Stratégie auto. La boucle de backtest Python accepte aussi stop_ticks et target_ticks.
Comment conserver une valeur d'une barre à l'autre ?
Écrivez-la dans l'objet state passé en quatrième argument. Il vous est rendu à l'appel suivant et remis à zéro quand vous changez de script.
Pourquoi mon achat a-t-il été refusé ?
Soit un garde-fou du compte l'a bloqué — la raison est affichée —, soit aucun prix en direct n'était disponible pour le symbole, et dans ce cas l'entrée attend au lieu d'inventer une exécution.