Scripts C++ : la chaîne Clang en WebAssembly et l'ABI v1
Senzoukria compile un script C++17 en WebAssembly à l'intérieur de son bac à sable, avec un vrai Clang, puis l'exécute sur les barres du graphique. La chaîne d'outils se télécharge une fois à la demande, vérifiée par taille et par SHA-256, et expose une petite ABI : of_compute trace une valeur par barre, of_strategy renvoie des intentions d'achat et de vente pour le compte simulé.
Senzoukria · Documentation · Mis à jour en septembre 2026
Où le trouver
- Où
- Page Scripting → sélecteur de langage → C++ (un bandeau « Chaîne C++ » apparaît au-dessus de l'éditeur)
- Chaîne d'outils
- Clang 8.0.1 + LLD + libc++ compilés en WebAssembly, figés sur le commit Binji wasm-clang 648c4a89 ; environ 60.4 Mo (affichés « 60.4 Mo ») téléchargés une fois
- Capacité
- 256 barres les plus récentes par appel ; source jusqu'à 64 Kio ; 2 s par exécution ; compilation limitée à 45 s
- Portée d'une stratégie
- Compte simulé uniquement ; l'application ne transforme jamais une intention C++ en ordre broker
Ce que ça fait
Le moteur C++ est le troisième langage de scripting, à côté de JavaScript et Python. Choisir C++ dans le sélecteur de langage de la page Scripting affiche le bandeau « Chaîne C++ ». Son premier état est « Non installée », avec le bouton « Installer la chaîne C++ » et la mention « Environ 60.4 Mo à télécharger, une seule fois (Clang 8.0.1 + LLD + libc++, Apache-2.0). ». Les cinq fichiers (clang, lld, memfs, sysroot.tar, shared.js) sont récupérés depuis le commit GitHub figé, chacun rejeté si son nombre d'octets ou son SHA-256 diffère de la valeur inscrite dans l'application, puis rangés dans IndexedDB pour que le téléchargement n'ait lieu qu'une fois.
Démarrer le moteur compile environ 50 Mo de WebAssembly : c'est pourquoi « Démarrage du moteur… » est un état visible, distinct d'une exécution de script. Une fois prêt, le bandeau affiche « Version wasm-clang-648c4a89, démarrée en {ms} ms », suivi de la ligne des limites. Chaque script est compilé une fois, indexé par le SHA-256 de la source composée (en-tête de l'hôte + votre code) ; relancer le même script à la cadence du graphique ne recompile jamais. L'hôte conserve jusqu'à 8 modules compilés, le worker en garde 8 également.
L'ABI que votre script voit
| Symbole | Signification | Remarques |
|---|---|---|
| struct OfBar | bucket_ts_ns (int64), open, high, low, close, volume, delta (double), trades (uint32) | 64 octets, barre la plus ancienne en premier, n ≤ 256 |
| int of_compute(const OfBar* bars, uint32_t n, double* out, uint32_t out_len) | Écrire une valeur par barre dans out[i] ; NaN signifie aucune valeur ; renvoyer n | Tracé en une seule ligne verte (#7ed321, épaisseur 1) sur le graphique |
| int of_strategy(const OfBar* bars, uint32_t n, int32_t* out, uint32_t out_len) | Écrire une intention par barre : −1 vendre, 0 rien, +1 acheter | Seule l'intention de la dernière barre est lue ; qty, stopTicks et targetTicks viennent des paramètres du script |
| OF_CAPACITY | 256 | Les barres plus anciennes que la capacité ne sont pas transmises ; une ligne d'avertissement indique combien ont été écartées |
| #line 1 "script.cpp" | Les numéros de ligne des diagnostics correspondent à votre éditeur | La première « script.cpp:N:M: error » détermine la ligne surlignée |
États du moteur et commandes
| État | Affiché comme | Action disponible |
|---|---|---|
| absent | Non installée + mention de la taille | Installer la chaîne C++ |
| téléchargement | Téléchargement du moteur… {pourcentage} % | Annuler le téléchargement |
| démarrage | Démarrage du moteur… | aucune (amorçage limité à 120 s) |
| prêt | Moteur prêt, version et temps de démarrage, limites | Retirer le moteur (purge les modules du worker et le cache IndexedDB) |
| erreur | Moteur indisponible + message | Réessayer |
Comment s'en servir
Créez un script, choisissez C++ et partez du modèle par défaut : une moyenne mobile simple sur 20 périodes écrite avec une somme glissante, NaN pendant l'amorçage, qui renvoie n. Lancez-le avec le même bouton d'exécution que les scripts JavaScript. Les avertissements et les erreurs du compilateur arrivent dans la console sous forme de lignes de journal ; une exécution qui dépasse le budget de deux secondes échoue comme n'importe quel autre script. Un seul modèle C++ est livré aujourd'hui, cette moyenne mobile ; il n'existe pas de stratégie C++ toute prête. Écrire vous-même of_strategy suffit : ses intentions suivent le même chemin de décision que les stratégies JavaScript, vers le compte d'évaluation simulé et lui seul.
Si un graphique contient plus de 256 barres, la console affiche « L'ABI C++ v1 calcule les 256 barres les plus récentes : N barre(s) plus ancienne(s) n'ont pas de valeur. ». Les barres plus anciennes sont simplement tracées sans valeur, plutôt que comblées par une estimation.
Limites et pièges
- C++17 est pris en charge ; C++20 n'est explicitement pas promis. Des en-têtes comme <cmath>, <vector> et <numeric> sont disponibles depuis libc++.
- La source est limitée à 64 Kio, en-tête de l'hôte compris ; le module compilé peut utiliser jusqu'à 64 Mio de mémoire.
- Le moteur ne se télécharge que depuis raw.githubusercontent.com ; une redirection est refusée, et un fichier dont la taille ou l'empreinte diffère est rejeté avant d'atteindre le bac à sable.
- Si le bac à sable redémarre ou si la chaîne est retirée pendant une compilation, l'exécution signale « bac à sable redémarré ou chaîne retirée pendant la compilation — relancez ».
- Lancer un script C++ avant d'avoir installé la chaîne renvoie « chaîne C++ non démarrée — installez-la depuis la page Scripting » ; l'exécution aboutit automatiquement dès que le moteur est prêt.
Pages liées
- Éditeur d'indicateurs personnels sur le graphique
- Sorties de script : graphique, panneau, tableau et encart
- Assistant de scripting (IA)
- Tester une stratégie de trading
Cette page dans d’autres langues
Questions fréquentes
- La chaîne C++ a-t-elle besoin d'une connexion internet à chaque fois ?
- Non. Les cinq fichiers sont téléchargés une fois, vérifiés et conservés dans IndexedDB. Les démarrages suivants lisent le cache et tournent entièrement hors ligne ; « Retirer le moteur » vide ce cache.
- Une stratégie C++ peut-elle envoyer des ordres à mon broker ?
- Non. of_strategy produit des intentions −1/0/+1 converties en décisions pour le compte simulé, par le même chemin que les stratégies JavaScript. Aucun script de Senzoukria ne passe d'ordre broker.
- Pourquoi mon indicateur s'arrête-t-il après 256 barres ?
- L'ABI v1 transmet les 256 barres les plus récentes par appel. Les barres plus anciennes n'ont pas de valeur, et la console indique combien ont été écartées.