Outils

Backtester une stratégie Pine depuis Claude Code en 90 secondes

Pas à pas avec le serveur @pineforge/codegen-mcp : installation en une commande npx, demande à Claude de transpiler votre Pine, exécutez un backtest Docker et relisez la liste des trades. Vos OHLCV restent sur la machine.

7 min de lecture#mcp#ai#claude#cursor#tooling

Le codegen PineForge vivait derrière un curl depuis plusieurs mois ; cette semaine, il vit aussi derrière un serveur Model Context Protocol — vous pouvez enchaîner un backtest depuis n’importe quel client compatible MCP : Claude Desktop, Claude Code, Cursor, Continue.dev, et la liste s’allonge.

Voici la traversée de bout en bout. Du dépôt vide au rapport JSON de backtest : environ 90 secondes horloge murale, plus le premier docker pull une fois pour toutes.

Ce que fait réellement le serveur

Le paquet npm @pineforge/codegen-mcp est un pont stdio local très fin. Il expose quatre outils à votre client IA :

ToolOù ça tourneCoût
transpile_pineAPI codegen hébergéeconsomme le quota (remboursé si erreur de compile)
get_quotaAPI codegen hébergéegratuit
backtest_pineDocker localcompte 1 (transpile incluse)
pull_engine_imageDocker localgratuit

La surface vie privée mérite une pause. Le source Pine part vers le codegen hébergé (codegen.pineforge.dev). Le CSV OHLCV ne part pas. backtest_pine exécute le strategy.cpp produit contre le fichier que vous indiquez via votre Docker local, monté en lecture seule dans le conteneur. Pas d’accès réseau sortant depuis le runtime. Vos données restent sur votre machine.

Installation (une commande)

npx -y @pineforge/codegen-mcp

C’est tout. Au premier lancement le paquet se télécharge, TypeScript se compile à la volée, et le serveur parle MCP sur stdio. Pas d’installation globale ni d’étape de build.

Il vous faut trois choses :

  • Node ≥ 20
  • Un démon Docker local actif (backtest_pine appelle docker run)
  • Une clé API PineForge pf_… obtenue via la file d’attente pineforge.dev

Brancher Claude Desktop

Ouvrez le fichier de configuration :

  • macOS : ~/Library/Application Support/Claude/claude_desktop_config.json
  • Windows : %APPDATA%\Claude\claude_desktop_config.json

Ajoutez sous mcpServers :

{
  "mcpServers": {
    "pineforge-codegen": {
      "command": "npx",
      "args": ["-y", "@pineforge/codegen-mcp"],
      "env": {
        "PINEFORGE_API_KEY": "pf_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
      }
    }
  }
}

Redémarrez Claude Desktop. Le serveur apparaît sous « Outils disponibles ». Le premier appel touche le codegen hébergé et déclenche docker pull pour l’image runtime — ~250 Mo, une seule fois.

Claude Code (CLI)

Si vous êtes déjà dans un terminal, c’est plus court :

claude mcp add pineforge-codegen \
  --transport stdio \
  --env PINEFORGE_API_KEY=pf_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx \
  -- npx -y @pineforge/codegen-mcp

Relancez la session : les quatre outils sont là.

Cursor

Réglages → MCP → Nouveau serveur MCP → collez le même bloc JSON. Cursor gère le cycle de vie.

Piloter en langage naturel

Une fois câblé, le modèle d’interaction, ce sont des prompts en français ou en anglais. Exemple (légèrement compressé) :

Vous : J’ai une stratégie Pine v6 dans ./strategy.pine et 7 jours de ETHUSDT en 15 minutes dans ./eth_15m.csv. Backteste-la et donne-moi le Sharpe et le drawdown max.

Claude : J’exécute backtest_pine sur ces fichiers…
[appel d’outil ~3 s]
Terminé. 49 trades sur la fenêtre. PnL net −190,85 $, Sharpe 0,21, drawdown max 312 $. La stratégie passe short après la 3e perte et ne se relève pas — on inspecte le déclencheur d’entrée ou on balaie le seuil ?

C’est la surface productive : le modèle connaît les descriptions d’outils et la forme de retour de backtest_pine, et enchaîne sans que vous tapiez le curl. La friction « éditer Pine → TradingView → recharger → lire les chiffres → retour éditeur » se replie dans une seule conversation.

À quoi ressemble le rapport

backtest_pine renvoie la même forme JSON que l’image Docker autonome. Bloc résumé :

{
  "engine": "pineforge",
  "summary": {
    "total_trades": 49,
    "net_pnl": -190.85,
    "max_drawdown": 312.0,
    "sharpe": 0.21,
    "profit_factor": 0.78,
    "win_rate": 0.43
  },
  "trades": [
    /* 49 entrées avec horodatages, prix, PnL */
  ],
  "elapsed_seconds": 0.0042,
  "_meta": {
    "strategy_cpp_bytes": 5079,
    "image": "ghcr.io/pineforge-4pass/pineforge-engine:latest"
  }
}

Le modèle voit la structure complète. Pour « quel était le pire trade ? », il peut scanner trades[] lui-même — souvent sans second appel d’outil.

Conscience du quota

Toute conversation qui utilise l’API codegen compte dans votre quota. L’outil get_quota sert à vérifier avant une grille de paramètres coûteuse. Le tier gratuit : 100 transpilations par mois — largement suffisant pour du hobby et des smokes CI, plus juste si vous bouclez une optimisation intensive.

Bon réflexe : dans CLAUDE.md, indiquez par exemple
« Si on demande d’optimiser une stratégie, appelle get_quota avant plus de 5 transpiles et annonce le budget restant. »

Ce qui est volontairement hors du serveur

  • Pas d’ordres live. Le serveur est en lecture seule sur stratégie et données ; pas de courtier. Le trading réel est un autre sujet.
  • Pas de téléchargement de données. Vous apportez l’OHLCV. Pas d’appels exchanges ou fournisseurs — vous contrôlez l’origine des octets.
  • Pas d’état entre les appels. Chaque backtest_pine est un conteneur neuf. Pas de cache persistant ni de session partagée.

Ce sont des limites de périmètre volontaires : surface auditable, modes de défaillance simples.

Où ça devient intéressant

Quelques motifs pénibles à la main, naturels ici :

  • « Resserre le stop et relance. » Le modèle change un nombre dans le Pine, rappelle backtest_pine, compare le Sharpe.
  • « Essaie les 30 derniers jours au lieu de 7. » Autre CSV, même flux — pas d’UI de filtres à parcourir.
  • « Sensibilité du paramètre ? » Balayage, Sharpe par valeur, petit tableau Markdown.
  • « Compare à mon autre stratégie. » Deux appels backtest_pine, deux rapports côte à côte.

Pas d’infrastructure nouvelle : modèle + quatre outils + votre prose.

Essayez

Le paquet est open source. Le serveur est assez petit pour être lu d’une traite si vous voulez auditer ce qui traverse le fil.