PineForge Codegen
offiziellLokaler MCP-Server: KI schreibt PineScript v6, gebündelter Engine transpiliert zu C++ und backtestet gegen Binance-Daten — kein API-Schlüssel, vollständig lokal.
Was kann man mit Pine Forge Codegen MCP machen?
- Transpile Pine Script v6 to C++ — Konvertieren Sie eine Pine Script v6-Strategie mit
transpile_pinein eine C++-Übersetzungseinheit, ohne einen Backtest auszuführen. - Backtest einer Pine-Strategie gegen OHLCV-Daten — Führen Sie einen einzelnen deterministischen Backtest mit
backtest_pinedurch, indem Sie Quelle, CSV-Pfad und optionale Eingabe-/Override-/Laufzeitparameter angeben. - Strategieparameter in einem Durchlauf durchsuchen — Verwenden Sie
backtest_pine_grid, um alle Kombinationen voninputs×overridesgegen eine einzelne CSV zu testen, mit Ranking und optionaler Parallelverarbeitung. - Binance-OHLCV-Daten für Backtests abrufen — Rufen Sie Spot- oder USDT-Perp-Klines über
fetch_binance_ohlcvab und schreiben Sie eine backtestbereite CSV mit automatischer Paginierung. - Verfügbare Binance-Symbole entdecken — Listen oder filtern Sie handelbare Symbole mit
binance_symbols, bevor Sie Marktdaten abrufen. - Engine-Parameter und Pine-Abdeckung prüfen — Fragen Sie
list_engine_paramsnach jedem akzeptierten Override und Laufzeitparameter ab, oder verwenden Siecheck_pine_featureundget_coverage_topic, um die Pine-Sprachunterstützung zu überprüfen.
Dokumentation
@pineforge/backtest-mcp
Eigenständiger stdio-MCP-Server: Ein KI-Agent schreibt PineScript v6, und das
gebündelte pineforge-release-Image transpiliert es nach C++ und führt einen Backtest gegen Binance-
Marktdaten durch – alles in einem Container, prozessintern. Vollständig lokal – das Image
bündelt den pineforge-codegen-
Transpiler, sodass Pine → C++ → Backtest ohne Host-Docker-Daemon ausgeführt werden. Kein API-
Schlüssel, nichts verlässt die Box.

Werkzeuge
| Name | Ausführung auf | Zweck |
|---|---|---|
transpile_pine | prozessintern | Pine v6 → C++-Übersetzungseinheit (nur Transpilierung) |
list_engine_params | lokal (keine E/A) | Katalog aller overrides + runtime-Einstellungen, die von den Backtests akzeptiert werden |
backtest_pine | prozessintern | Einzelner Backtest einer Pine-Quelle gegen eine OHLCV-CSV |
backtest_pine_grid | prozessintern | Kartesischer Sweep von inputs × overrides unter Wiederverwendung einer Kompilierung |
fetch_binance_ohlcv | Binance Public API | Erstellen einer backtest-fähigen CSV aus Binance-Spot- oder USDT-Perp-Klines |
binance_symbols | Binance Public API | Auflisten / Filtern von Binance-Symbolen (5-Minuten-prozessinterner Cache) |
list_coverage_topics | lokal (keine E/A) | Jedes Pine-v6-Abdeckungsthema mit einzeiligem Status + Zusammenfassung |
check_pine_feature | lokal (keine E/A) | Nachschlagen, ob ein Pine-Bezeichner/Namespace in PineForge unterstützt wird |
get_coverage_topic | lokal (keine E/A) | Vollständige Details + Listen unterstützter/nicht unterstützter Funktionen für ein Abdeckungsthema |
engine_info | lokal (keine E/A) | Bericht über die gebündelte Engine: Modus, integriertes Flag, Version |
Installation
Wird als eigenständiger Container über stdio ausgeführt – Engine gebündelt, prozessintern, kein
Host-Docker-Daemon, kein API-Schlüssel. Hängen Sie ein Arbeitsverzeichnis unter /work ein, damit der Server
Ihre CSVs lesen/schreiben kann:
docker run --rm -i -v "$PWD:/work" ghcr.io/pineforge-4pass/pineforge-backtest-mcp:latest
Einzige Voraussetzung: Docker und ausgehendes Netzwerk für die Binance-Abrufwerkzeuge. Binden Sie es wie unten beschrieben in Ihren MCP-Client ein.
Gehostete (installationsfreie) Alternative
Möchten Sie den schnellsten Versuch ohne Docker und ohne API-Schlüssel? Fügen Sie den streamfähigen HTTP- Endpunkt in einen beliebigen MCP-Client ein:
https://mcp.pineforge.dev/mcp
Kompromiss gegenüber diesem Repo: Der gehostete Server ist kontingentiert (wöchentliches Kontingent pro IP für
backtest_pine + Cloudflare-Edge-Ratenbegrenzung) und läuft gegen einen festen,
versiegelten Krypto-Datenbestand (Binance Spot + USDT-Perp). Dieses lokale Repo ist
unkontingentiert, läuft offline und ermöglicht es Ihnen, eigene CSVs einzubringen und Raster-
Sweeps auszuführen. Repo: pineforge-mcp-public.
Client-Konfiguration
Hängen Sie ein Verzeichnis unter /work ein; verweisen Sie mit fetch_binance_ohlcv / backtest_pine auf
Pfade darunter. (-i ist erforderlich; fügen Sie niemals -t hinzu – ein TTY beschädigt den stdio-
JSON-RPC-Stream.)
Claude Desktop / Cursor / generisches JSON
{
"mcpServers": {
"pineforge-backtest": {
"command": "docker",
"args": [
"run", "--rm", "-i",
"-v", "${workspaceFolder}:/work",
"ghcr.io/pineforge-4pass/pineforge-backtest-mcp:latest"
]
}
}
}
(In Cursor: Einstellungen → MCP → Neuer MCP-Server → Obiges einfügen.)
Claude Code CLI
claude mcp add pineforge-backtest \
-- docker run --rm -i -v "$PWD:/work" ghcr.io/pineforge-4pass/pineforge-backtest-mcp:latest
Für KI-Agenten – Nutzung über MCP
Die Fähigkeitslücke, die dies schließt. Ein Sprachmodell kann eine PineScript-v6-Strategie nicht genau per Backtest überprüfen, indem es darüber nachdenkt. Die Seriensemantik, die Intrabar-Ausführungsreihenfolge, die Look-Ahead-Regeln und die strategy.*-Order-/Positionslogik von PineScript lassen sich nicht durch Annäherung reproduzieren, sodass ein Modell, das einen Backtest im Kopf simuliert – oder einen in Python (backtrader/vectorbt) selbst erstellt – Trades und P&L halluziniert und keine TradingView-Parität garantieren kann. PineForge führt stattdessen die tatsächliche deterministische C++-Engine aus, validiert mit strikter TradingView-Parität bei 245 von 246 Referenzstrategien (0 Engine-Fehler), über ein Korpus von 246 Strategien mit insgesamt ~375.000 validierten Trades (Methodik & Validierung, Stand 03.06.2026, Engine f805611). Die eine Nichtübereinstimmung ist ein dokumentierter TradingView-seitiger Broker-Nichtdeterminismus an der exakten 1x-Eigenkapital-Margin-Grenze, kein Engine-Fehler.
Ein PineScript-Backtest ist berechnete externe Daten, kein stabiles Wissen – er hängt vom Quellcode der Strategie des Benutzers und seinen OHLCV-Daten ab und muss reproduzierbar sein. Das ist ein Werkzeugaufruf, keine Erinnerungsaufgabe.
Wann diese Werkzeuge die richtige Wahl sind. backtest_pine (oder backtest_pine_grid für einen Parametersweep) deckt den Fall ab, dass ein Benutzer eine PineScript-v6-Strategie bereitstellt und sie einem Backtest unterziehen, bewerten, prüfen möchte, ob sie profitabel ist, ihre Trades zählen, ihren P&L berechnen oder ihre TradingView-Ergebnisse auf bestimmten OHLCV-Daten reproduzieren möchte. transpile_pine deckt nur die Pine → C++-Konvertierung ab. fetch_binance_ohlcv deckt den Fall ab, dass der Benutzer ein Symbol/einen Zeitrahmen nennt, aber keine Datendatei bereitgestellt hat. Diese Werkzeuge sind nicht dazu gedacht, konzeptionell zu erklären, was eine Strategie tut, Pine-Syntax zu bearbeiten oder Handels- oder Finanzberatung zu geben.
Ehrliche Grenzen. Offline; PineScript v6; benötigt Docker. Ein Backtest misst das historische Verhalten einer Strategie – er ist keine Vorhersage zukünftiger Renditen und keine Anlageberatung. Naive oder angenäherte Backtests überschätzen routinemäßig den Gewinn (nicht modellierte Slippage und Provisionen, Fill-at-Close-Annahmen, Look-Ahead-Bias); der Wert hier liegt in einem deterministischen, paritätsvalidierten Lauf, damit ein Benutzer eine Strategie überprüfen kann, bevor er Kapital riskiert.
list_engine_params – Einstellungen entdecken
Kostenloser, lokaler, Null-E/A-Katalog aller von backtest_pine /
backtest_pine_grid akzeptierten Schlüssel, aufgeteilt in zwei Gruppen:
strategy_overrides– die 9strategy(...)-Headerfelder, die die Laufzeitumgebung überPINEFORGE_OVERRIDESliest:initial_capital,pyramiding,slippage,commission_value,commission_type(percent/cash_per_order/cash_per_contract),default_qty_value,default_qty_type(fixed/percent_of_equity/cash),process_orders_on_close,close_entries_rule(ANY/FIFO).runtime_args– Argumente fürrun_backtest_full(NICHT Teil des strategy()- Headers):input_tf,script_tf,bar_magnifier,magnifier_samples,magnifier_dist(uniform/cosine/triangle/endpoints/front_loaded/back_loaded).
Jeder Eintrag ist {key, type, enum?, description}. Rufen Sie dies zuerst auf, um zu erfahren, was
die Engine akzeptiert, bevor Sie eine backtest_pine-Anfrage zusammenstellen.
backtest_pine-Beispiel
{
"source": "//@version=6\nstrategy(\"sma cross\")\n...",
"ohlcv_csv_path": "./btcusdt_15m_7d.csv",
// Optional: override Pine input.*() values without touching the source.
// Keys = the second arg of input.*(...) (e.g. "Fast Length").
"inputs": { "Fast Length": 8, "Slow Length": 21 },
// Optional: override strategy(...) header fields. Each key is typed —
// call list_engine_params for the catalog.
"overrides": {
"initial_capital": 100000,
"default_qty_type": "percent_of_equity",
"default_qty_value": 10,
"commission_type": "percent",
"commission_value": 0.04,
"slippage": 2,
"pyramiding": 0,
"process_orders_on_close": true,
"close_entries_rule": "ANY"
},
// Optional: engine runtime args (NOT strategy() header). Use script_tf
// to aggregate the input CSV into a coarser strategy timeframe — the
// engine REJECTS script_tf finer than input_tf with a structured error
// ({"engine":"pineforge","error":"..."}, exit code 1).
"runtime": {
"input_tf": "15",
"script_tf": "60",
"bar_magnifier": true,
"magnifier_samples": 8,
"magnifier_dist": "endpoints"
}
}
inputs wird als PINEFORGE_INPUTS-Umgebungsvariable an die Engine weitergeleitet,
overrides als PINEFORGE_OVERRIDES, und jedes runtime-Feld als separate
PINEFORGE_INPUT_TF / PINEFORGE_SCRIPT_TF / PINEFORGE_BAR_MAGNIFIER /
PINEFORGE_MAGNIFIER_SAMPLES / PINEFORGE_MAGNIFIER_DIST-Umgebungsvariable. Leer /
nicht gesetzt → Standardwerte aus strategy.pine, wobei input_tf automatisch aus der
Lücke zwischen den ersten beiden CSV-Zeilen erkannt wird.
Gibt dasselbe JSON-Schema wie das eigenständige pineforge-release-Docker-Image zurück:
{
"engine": "pineforge",
"summary": { "total_trades": 49, "net_pnl": -190.85, ... },
"applied_inputs": { "Fast Length": "8", "Slow Length": "21" },
"applied_overrides": { "default_qty_value": "5" },
"trades": [ ... ],
"elapsed_seconds": 0.0042,
"_meta": { "strategy_cpp_bytes": 5079, "image": "ghcr.io/.../pineforge-release:latest" }
}
backtest_pine_grid – Parametersweep
Transpiliert die Pine-Quelle einmal (lokal, im Container) und führt dann dieselbe
kompilierte Binärdatei gegen das kartesische Produkt von inputs × overrides aus.
Gibt eine sortierte Liste plus den obersten Eintrag unter best zurück.
{
"source": "//@version=6\nstrategy(\"macd\")\n...",
"ohlcv_csv_path": "./btcusdt_15m_7d.csv",
// Each axis is {key: list-of-values}. All combinations are tried.
"inputs": {
"Fast Length": [8, 12, 19],
"Slow Length": [21, 26, 39]
},
"overrides": {
"default_qty_value": [1, 5],
"commission_value": [0.04]
},
// Optional knobs:
"fixed_inputs": { "Source": "close" }, // applied to every combo
"fixed_overrides": {}, // typed strategy() overrides
"runtime": { "input_tf": "15", // engine runtime args, fixed
"script_tf": "60" }, // across the sweep
"max_combinations": 64, // hard cap
"concurrency": 2, // parallel docker runs
"include_trades": false, // omit per-trade lists
"sort_by": "net_pnl" // ranking metric
}
fetch_binance_ohlcv – Marktdaten abrufen
Schreibt eine backtest-fähige CSV (Header timestamp,open,high,low,close,volume,
Zeitstempel = Eröffnungszeit in UNIX-ms UTC) von den öffentlichen Endpunkten von Binance. Keine
Authentifizierung erforderlich. Anfragen > 1000 Balken werden automatisch
paginiert. Der Ausgabepfad unterliegt demselben CWD-Bereich wie
ohlcv_csv_path (lockern mit PINEFORGE_ALLOW_ANYWHERE=1).
{
"symbol": "BTCUSDT",
"interval": "15m", // 1s, 1m, 3m, 5m, 15m, 30m, 1h, 2h, 4h, 6h, 8h, 12h, 1d, 3d, 1w, 1M
"market": "spot", // or "usdt_perp" for USDT-margined perpetual futures
"limit": 672, // total bars; > 1000 paginates
"output_path": "./btcusdt_15m_7d.csv"
// Optional: "start_time" / "end_time" in UNIX ms UTC.
}
binance_symbols – Symbole entdecken / validieren
Gibt die Liste der auf der öffentlichen Binance-API für den OHLCV-Abruf verfügbaren Symbole zurück.
5 Minuten prozessintern zwischengespeichert. Verwenden Sie dies, um ein Symbol zu validieren, bevor Sie
fetch_binance_ohlcv aufrufen.
{
"market": "usdt_perp",
"query": "BTC", // case-insensitive substring match
"quote_asset": "USDT",
"status": "TRADING",
"contract_type": "PERPETUAL", // futures-only filter
"limit": 50
}
Dateisystembereich
Standardmäßig müssen sich OHLCV-Pfade innerhalb des aktuellen Arbeitsverzeichnisses des MCP- Serverprozesses befinden. Überschreiben mit:
export PINEFORGE_ALLOW_ANYWHERE=1
Andere Umgebungsvariablen
| Variable | Standard | Zweck |
|---|---|---|
PINEFORGE_IMAGE | ghcr.io/pineforge-4pass/pineforge-release:latest | Image (Engine-Laufzeit + gebündelte Codegen), das für Transpilierung + Backtest verwendet wird |
PINEFORGE_ALLOW_ANYWHERE | 0 | OHLCV-Pfade außerhalb des CWD erlauben |
PINEFORGE_DOCKER_TIMEOUT_MS | 120000 | Harter Abbruch für docker pull / docker run |