Origine

Pourquoi PineForge existe PineForge.

Trois routes évitées. Deux ans sur deux cas encore « strong ». Une évidence : PineScript mérite un runtime sérieux.

Pourquoi l'offline reproductible

TradingView reste le meilleur studio pour itérer vite : charts, communauté, social. Mais pas de runtime offline : pas de pin de version moteur, pas de backtests CI, pas de replay bit-identique sur une autre machine.

Pour parcourir des idées sur les graphiques, peu importe. Pour du capital réel, tout importe. Nous comblons l'écart entre « un nombre dans Chrome » et « une preuve versionnée » — sans quitter Pine.

Pourquoi ne pas contribuer à PyneCore en amont

PyneCore est le projet OSS Pine le plus ambitieux — nous nous en servons comme second oracle. Remonter tout notre benchmark en amont ? Deux blocages structurels :

  • Modèle d'exécution. PyneCore interprète Pine en Python. PineForge transpile Pine en C++ et compile en `.so`. Vitesses différentes, compromis de parité différents, histoires de distribution différentes. Aucun n'a tort — mais on ne peut pas greffer l'un sur l'autre sans réécrire les deux.
  • Distribution. Un `.so` compilé permet aux vendeurs de livrer des stratégies aux acheteurs sans exposer le code source. C'est la thèse du marketplace (conçue pour 2027). Ce n'est pas sur la roadmap de PyneCore et ne devrait pas l'être — c'est un produit différent.

PyneCore reste notre contre-enquête : chaque release PineForge rejoue la parité vs PyneCore & TV. Leur taux « excellent » est assez haut pour que tout désaccord révèle presque toujours un bug — souvent chez nous.

Pourquoi pas Backtrader

Backtrader est le cheval de travail du trading algorithmique en Python. Solide, apprécié, et inadapté à cette tâche. C'est un framework de backtest natif Python qui accepte des classes de stratégie personnalisées. Pine est un autre langage avec une sémantique différente — on ne peut pas simuler le lookahead de `request.security()`, le traitement des ordres intra-barre ou les groupes de sortie `oca_name` en écrivant davantage de Python.

Et encore une fois : une stratégie Backtrader est du code source Python, distribuable en tant que tel. Le marketplace de binaires compilés exige une étape de transpilation qui produit un artefact déployable. La surface de Backtrader n'expose pas ça.

La course au 245/246

Nous avons démarré avec 9 stratégies et 76 % de parité stricte. Deux ans plus tard : 246 stratégies, 245 en stricte. Le chemin de 76 % à 99,6 % n'a pas été parcouru en écrivant davantage de codegen — il a été bâti en traquant des divergences à la quatrième décimale, une par une, pendant des semaines entières.

La plupart de ces semaines ont été consacrées à reproduire les définitions précises que TradingView donne à des mots comme « sortie », « exécution », « trail » — la documentation Pine décrit l'API ; la sémantique exacte du traitement des ordres ne devient visible que lorsqu'on diff les listes de transactions barre par barre. Nous l'avons fait, nous avons continué à demander pourquoi notre résultat différait de la référence, et nous avons aplani les différences une à une.

La dernière est une anomalie documentée côté TV — analysée en profondeur, tracée jusqu'à TradingView, reproductible depuis l'état propre de TV. Deux des trois anomalies d'origine (dépassement de marge à la frontière courtier ; <code>time()</code> renvoyant na à la frontière de session) ont été résolues par la réécriture chambre blanche. Celle qui subsiste est un non-déterminisme d'état du chart sur une fenêtre Apr 5–14 précise (Supertrend <code>var direction</code>). Zéro bug moteur réel ne subsiste.

Ce qui arrive

Q3 2026 : L'intégration Optuna est livrée. Optimisez n'importe quelle stratégie sur n'importe quelle fonction objectif d'une ligne — Sharpe, drawdown, profit factor, votre propre lambda Python. L'analyse walk-forward est intégrée ; l'out-of-sample est le comportement par défaut, pas une option de dernière minute.

Q4 2026 : Le Studio hébergé est lancé. Espace de projet, backtest, optimisation, comparaison, paper trading — le tout dans un navigateur, le tout exécuté sur le même `.so` que vous utiliseriez en local via la CLI aujourd'hui. L'accès vague 1 est réservé en priorité à la liste d'accès anticipé.

2027 : Le marketplace ouvre. Les vendeurs publient des binaires `.so` compilés avec des bornes de licence définies par eux-mêmes : temps, machine, courtier, symbole, plages d'entrées. Les acheteurs exécutent sur leurs données, ne voient jamais le code source. Le même modèle de distribution qui a fonctionné pour MQL5 — sauf que les stratégies sont écrites en Pine, le runtime est auditable et les licences sont révocables.

Le dernier pour cent

Tous les moteurs de parité que nous avons étudiés ont été construits puis abandonnés par quelqu'un qui s'est lassé à 90 %. Les 10 derniers pourcents sont un travail répétitif, exigeant et peu glamour — il doit être accompli par des gens qui s'enthousiasment vraiment à expliquer pourquoi deux listes de transactions divergent de 0,0001 %.

C'est l'équipe. C'est la rigueur. C'est ce qui fait que le runtime vaut la peine de lui confier votre argent.