PineForge backteste votre Pine Script sans TradingView, en local avec Docker : mêmes données, mêmes trades.
Pourquoi hors ligne ?
Pour itérer sur le graphique, le backtest dans le navigateur est idéal. Le backtest hors ligne prend le relais au moment d’engager de l’argent réel sur la stratégie : quand il vous faut une piste d’audit, quand la CI doit valider chaque commit, quand un résultat obtenu il y a deux mois doit être reproduit aujourd’hui à l’identique, trade par trade.
Exécuter des backtests hors ligne vous donne ce que les testeurs en ligne ne peuvent pas offrir : les résultats sont déterministes. À script, données et version d’image identiques, trades identiques. Vous épinglez la version de l’image, versionnez les rapports dans un dépôt, comparez les listes de trades d’un commit à l’autre et exécutez le tout sans interface, en CI. Le CSV que vous fournissez est le vôtre, le moteur tourne en local, et le rapport enregistre une empreinte de ce qui l’a produit.
Concrètement : des versions d’image épinglées, pour qu’un commit vieux de deux mois donne aujourd’hui la même liste de trades ; vos propres données, des bougies d’une plateforme d’échange aux barres que vous construisez à partir de ticks, tant qu’elles sont au format OHLCV ; des vérifications en CI qui font échouer le build en cas de régression ; et une stratégie qui est un fichier, sans attache à une plateforme.
Si vous avez déjà eu besoin de partager un résultat de backtest avec un collègue et constaté que le seul moyen de le « partager » était une capture d’écran d’un graphique, c’est l’exécution hors ligne qui vous manque.
Comment backtester du Pine Script hors ligne
PineForge transpile PineScript v6 en C++ natif et l’exécute sur votre machine, dans une seule image Docker.
Trois étapes. L’image se télécharge une seule fois ; ensuite, tout tourne hors ligne.
Étape 1 : récupérez le runtime
Une seule image : ghcr.io/pineforge-4pass/pineforge-release. Pas de pip, pas de clé, pas d’inscription : transpilation, compilation et backtest s’exécutent tous à l’intérieur, hors ligne. Le moteur embarqué dans l’image est sous licence Apache-2.0 ; le transpileur inclus est gratuit pour le trading personnel.
Étape 2 : transpilez votre Pine en C++
Lancez l’image en mode transpilation seule : elle transforme votre PineScript v6 en un fichier source C++ complet, en local. Aucun interpréteur Pine ne tourne au moment du backtest : l’image compile le C++ en code natif.
docker run --rm --network=none \
-e PINEFORGE_TRANSPILE_ONLY=1 \
-v "$(pwd)/my_strategy.pine":/in/strategy.pine:ro \
ghcr.io/pineforge-4pass/pineforge-release:1.10.0 > strategy.cppÉtape 3 : lancez le backtest
Montez votre CSV OHLCV à côté du C++ généré et lancez l’image. Le CSV doit avoir l’en-tête timestamp,open,high,low,close,volume, avec des horodatages en millisecondes UNIX. Le moteur exécute la stratégie barre par barre et écrit un rapport JSON sur stdout. Vous pouvez aussi sauter l’étape 2 : montez plutôt strategy.pine, et l’image le transpile d’abord.
docker run --rm --network=none \
-v "$(pwd)/strategy.cpp":/in/strategy.cpp:ro \
-v "$(pwd)/ohlcv.csv":/in/ohlcv.csv:ro \
ghcr.io/pineforge-4pass/pineforge-release:1.10.0 > report.jsonLe rapport JSON contient un bloc de synthèse (nombre total de trades, trades gagnants et perdants, taux de réussite, P&L net, drawdown max), la liste complète des trades (heures d’entrée et de sortie, prix, quantité, P&L et indices de barre), des métriques comme le facteur de profit, le Sharpe et le Sortino, la courbe d’équité, et une empreinte du moteur, du transpileur, des paramètres d’entrée et des données à l’origine de l’exécution (null si elle n’a pas pu être calculée).
C’est l’intégralité du workflow. Pas d’interface graphique, pas de ré-authentification, pas de chargement de graphique. Si vous pouvez faire tourner Docker, vous pouvez exécuter des backtests PineForge hors ligne.
Ce que vous pouvez backtester
La réponse courte : tout ce que vous pouvez sérialiser en OHLCV. PineForge n’est connecté à aucun fournisseur de données de marché. Vous apportez les données ; le moteur exécute la stratégie.
- Crypto depuis votre exchange. Récupérez les données de transactions brutes depuis Binance, Bybit, Kraken ou n’importe quel exchange disposant d’une API REST ou WebSocket. Agrégez à l’unité de temps qu’utilise votre stratégie. Passez le CSV directement. Testez sur la paire et le venue exacts que vous allez trader.
- Barres construites à partir de ticks. Si vous construisez des barres à partir de ticks ou de données de carnet d’ordres, passez-les au format OHLCV. Peu importe au moteur d’où viennent les barres.
- Autres séries. Le moteur ne lit que timestamp, open, high, low, close et volume ; les colonnes supplémentaires sont ignorées. Un score de sentiment ou une métrique on-chain ne peut être backtesté que si vous l’encodez dans ces colonnes.
Les 312 stratégies de la galerie viennent du corpus ouvert, chacune notée face à l’export de TradingView lui-même. Sur la branche main du moteur, la vérification du corpus en fige 311 au niveau excellent : même nombre de trades, prix à 0,01 % près et P&L à 1 % près au 90e percentile, avec des limites plus souples sur le prix de sortie et le P&L pour les 7 stratégies dont les sorties trail_* sont notées avec le profil « production ». La dernière est une anomalie déclarée. Pour le niveau excellent, lorsque TradingView affiche deux ou plusieurs Signals d’entrée distincts au même instant exact, au même prix et dans la même direction, le moteur affiche autant d’entrées distinctes à cet endroit (identité des entrées distinctes).