PineForge Codegen

offiziell

Lokaler 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_pine in eine C++-Übersetzungseinheit, ohne einen Backtest auszuführen.
  • Backtest einer Pine-Strategie gegen OHLCV-Daten — Führen Sie einen einzelnen deterministischen Backtest mit backtest_pine durch, indem Sie Quelle, CSV-Pfad und optionale Eingabe-/Override-/Laufzeitparameter angeben.
  • Strategieparameter in einem Durchlauf durchsuchen — Verwenden Sie backtest_pine_grid, um alle Kombinationen von inputs × overrides gegen 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_ohlcv ab 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_params nach jedem akzeptierten Override und Laufzeitparameter ab, oder verwenden Sie check_pine_feature und get_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.

pineforge-backtest-mcp MCP server

demo

Werkzeuge

NameAusführung aufZweck
transpile_pineprozessinternPine v6 → C++-Übersetzungseinheit (nur Transpilierung)
list_engine_paramslokal (keine E/A)Katalog aller overrides + runtime-Einstellungen, die von den Backtests akzeptiert werden
backtest_pineprozessinternEinzelner Backtest einer Pine-Quelle gegen eine OHLCV-CSV
backtest_pine_gridprozessinternKartesischer Sweep von inputs × overrides unter Wiederverwendung einer Kompilierung
fetch_binance_ohlcvBinance Public APIErstellen einer backtest-fähigen CSV aus Binance-Spot- oder USDT-Perp-Klines
binance_symbolsBinance Public APIAuflisten / Filtern von Binance-Symbolen (5-Minuten-prozessinterner Cache)
list_coverage_topicslokal (keine E/A)Jedes Pine-v6-Abdeckungsthema mit einzeiligem Status + Zusammenfassung
check_pine_featurelokal (keine E/A)Nachschlagen, ob ein Pine-Bezeichner/Namespace in PineForge unterstützt wird
get_coverage_topiclokal (keine E/A)Vollständige Details + Listen unterstützter/nicht unterstützter Funktionen für ein Abdeckungsthema
engine_infolokal (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 9 strategy(...)-Headerfelder, die die Laufzeitumgebung über PINEFORGE_OVERRIDES liest: 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ür run_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

VariableStandardZweck
PINEFORGE_IMAGEghcr.io/pineforge-4pass/pineforge-release:latestImage (Engine-Laufzeit + gebündelte Codegen), das für Transpilierung + Backtest verwendet wird
PINEFORGE_ALLOW_ANYWHERE0OHLCV-Pfade außerhalb des CWD erlauben
PINEFORGE_DOCKER_TIMEOUT_MS120000Harter Abbruch für docker pull / docker run