Backtests offline

PineScript backtesté hors ligne, sur vos séries

PineForge transpile PineScript v6 vers du C++ natif et l'exécute via Docker chez vous : local-first, déterministe, portable partout où Docker tourne. Apportez votre propre CSV OHLCV.

Pourquoi hors ligne ?

Le backtest dans un navigateur est idéal pour l'itération côté graphique. Le backtest hors ligne, c'est ce vers quoi vous vous tournez quand l'étape suivante est de mettre de l'argent réel derrière la stratégie : lorsque vous avez besoin d'une piste d'audit, lorsque la CI doit valider chaque commit, lorsqu'un résultat vieux de deux mois doit se reproduire bit pour bit aujourd'hui.

Exécuter des backtests hors ligne vous donne ce que les testeurs en ligne ne peuvent pas offrir : les résultats sont reproductible à l'octet près — même entrée, même sortie, à chaque fois. Vous épinglez la version du moteur, commitez les résultats dans un dépôt, diffs les listes de transactions entre commits, et exécutez le tout en mode headless dans votre pipeline CI. Le CSV que vous fournissez est le vôtre ; le binaire que vous exécutez est local ; le rapport que vous obtenez est auditable.

La liste concrète de ce que le mode hors ligne débloque : des moteurs versionnés et épinglés, pour qu'un commit vieux de deux mois produise aujourd'hui la même liste de transactions ; une ingestion de données personnalisées, pour tester contre les reconstructions tick de votre exchange, les prix actions point-in-time de votre fournisseur de données ou n'importe quel flux alt-data sérialisable en OHLCV ; l'intégration CI, pour que les régressions fassent échouer le build avant d'atteindre la production ; et la portabilité multi-courtier, parce que la logique de votre stratégie n'est pas verrouillée à une plateforme — c'est un fichier.

Si vous avez déjà eu besoin de partager un résultat de backtest avec un collègue et que vous avez réalisé que le seul moyen de « partager » était de faire une capture d'écran du graphique — l'exécution hors ligne est ce qui vous manque.

Comment ça fonctionne

Trois étapes. Le workflow complet, du code source Pine à un rapport JSON de transactions, prend moins de deux minutes la première fois et moins de trente secondes pour chaque exécution suivante.

Étape 1 — Récupérez le runtime. Une seule image conteneur. Pas de pip, pas de clé, pas d'inscription — la transpilation comme le backtest s'exécutent à l'intérieur, hors ligne. Gratuit pour le trading personnel.

Étape 2 — Transpilez votre Pine en C++. Lancez le conteneur en mode transpile seul et il transforme votre PineScript v6 en un fichier source C++ complet, en local. Aucun interpréteur Pine ne tourne à l'exécution — le moteur le compile en code machine 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-engine:latest > strategy.cpp

Étape 3 — Backtest. Montez votre CSV OHLCV aux côtés du C++ généré et lancez le conteneur. Le moteur lit le fichier de données, exécute la stratégie barre par barre et écrit un rapport JSON sur stdout.

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-engine:latest > report.json

La sortie JSON comprend une liste complète de transactions avec les prix d'entrée et de sortie, les indices de barres, les tailles de position, ainsi qu'un bloc de synthèse avec le PnL net, le drawdown maximal, le nombre total de transactions, le profit factor et le ratio Sharpe. Tous les champs sont stables entre les versions patch d'un même major — sûr à parser dans des scripts.

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.

Actions depuis votre fournisseur de données. Polygon, Norgate, BarChart, Tiingo — choisissez votre source, exportez des prix ajustés point-in-time, exécutez des backtests avec vos vraies exécutions et votre univers réel sans biais de survivant.

Reconstructions tick. Si vous disposez de données Level 2 et souhaitez tester sur des barres synthétiques d'une seconde reconstruites depuis des ticks, c'est possible. Générez l'OHLCV depuis vos données tick et passez-le. Le moteur ne sait pas et n'a pas besoin de savoir d'où viennent les barres.

Alt-data. Scores de sentiment, métriques on-chain, taux de financement, skew d'options — si vous pouvez l'exprimer comme une série temporelle alignée sur votre index de barres, vous pouvez l'incorporer dans Pine via des colonnes de données personnalisées et le tester hors ligne.

La suite de référence de 246 stratégies de la galerie a été backtestée contre les exports CSV de TradingView (pour la validation de parité) et des jeux de données CSV personnalisés (pour les tests de régression). 245 des 246 atteignent le palier canonique strict-excellent (dérive PnL ≤ 0,5 % sur la fenêtre de comparaison). La dernière est une anomalie documentée côté TV — non-déterminisme d'état du chart sur une fenêtre Apr 5–14 précise — analysée en profondeur, imputée à l'état TradingView. Zéro bug moteur réel ne subsiste.

Pour commencer