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
- Où
- 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
| Champ | Par défaut | Ce 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. |
| qty | 1 | Nombre de contrats. Arrondi à l'entier inférieur et ramené à 1 au minimum. |
| stopTicks | aucun | Distance de sortie côté perte, en ticks depuis le prix d'exécution. |
| targetTicks | aucun | Distance de sortie côté gain, en ticks. |
| null | — | Aucun 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.
Pages liées
- Lancer une stratégie sur le compte simulé
- Galerie de modèles de scripts
- Scripts Python (moteur Pyodide)
- Backtest
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.