PineForge Codegen

oficial

Servidor MCP local: IA escribe PineScript v6, motor incluido transpila a C++ y realiza backtesting contra datos de Binance — sin clave API, completamente local.

¿Qué puedes hacer con PineForge Codegen MCP?

  • Transpile Pine Script v6 a C++ — Convierte una estrategia de Pine Script v6 en una unidad de traducción de C++ con transpile_pine sin ejecutar un backtest.
  • Probar una estrategia Pine con datos OHLCV — Ejecuta un backtest determinista único con backtest_pine, proporcionando el código fuente, la ruta del CSV y parámetros opcionales de entrada, anulación o tiempo de ejecución.
  • Barrido de parámetros de estrategia en una sola ejecución — Usa backtest_pine_grid para probar todas las combinaciones de inputs × overrides contra un único CSV, con clasificación y concurrencia opcional.
  • Obtener datos OHLCV de Binance para backtesting — Extrae velas spot o USDT-perp mediante fetch_binance_ohlcv y escribe un CSV listo para backtest con paginación automática.
  • Descubrir símbolos disponibles en Binance — Lista o filtra símbolos negociables con binance_symbols antes de obtener datos de mercado.
  • Inspeccionar parámetros del motor y cobertura de Pine — Consulta list_engine_params para cada anulación aceptada y control de tiempo de ejecución, o usa check_pine_feature y get_coverage_topic para verificar la compatibilidad del lenguaje Pine.

Documentación

@pineforge/backtest-mcp

Servidor MCP stdio autocontenido: un agente de IA escribe PineScript v6, y la imagen pineforge-release incluida lo transpila a C++ y lo somete a backtesting con datos de mercado de Binance — todo en un contenedor, en proceso. Completamente local — la imagen incluye el transpilador pineforge-codegen, por lo que Pine → C++ → backtest se ejecutan sin demonio Docker en el host. Sin clave API, nada sale de la caja.

pineforge-backtest-mcp MCP server

demo

Herramientas

nombrese ejecuta enpropósito
transpile_pineen procesoUnidad de traducción Pine v6 → C++ (solo transpilación)
list_engine_paramslocal (sin E/S)Catálogo de cada parámetro overrides + runtime aceptado por los backtests
backtest_pineen procesoBacktest único de una fuente Pine contra un CSV OHLCV
backtest_pine_griden procesoBarrido cartesiano de inputs × overrides reutilizando una compilación
fetch_binance_ohlcvAPI pública BinanceEscribe un CSV listo para backtest desde velas spot o USDT-perp de Binance
binance_symbolsAPI pública BinanceListar / filtrar símbolos de Binance (caché en proceso de 5 min)
list_coverage_topicslocal (sin E/S)Cada tema de cobertura de Pine v6 con estado de una línea + resumen
check_pine_featurelocal (sin E/S)Consultar si un identificador/espacio de nombres Pine está soportado en PineForge
get_coverage_topiclocal (sin E/S)Detalle completo + listas de características soportadas/no soportadas para un tema de cobertura
engine_infolocal (sin E/S)Informar el motor incluido: modo, bandera predefinida, versión

Instalación

Se ejecuta como un contenedor autocontenido sobre stdio — motor incluido, en proceso, sin demonio Docker en el host, sin clave API. Monta un directorio de trabajo en /work para que el servidor pueda leer/escribir tus CSVs:

docker run --rm -i -v "$PWD:/work" ghcr.io/pineforge-4pass/pineforge-backtest-mcp:latest

Único requisito: Docker, y red saliente para las herramientas de obtención de Binance. Conéctalo a tu cliente MCP como se indica abajo.

Alternativa alojada (sin instalación)

¿Quieres la prueba más rápida sin Docker y sin clave API? Pega el endpoint HTTP transmisible en cualquier cliente MCP:

https://mcp.pineforge.dev/mcp

Contrapartida frente a este repositorio: el servidor alojado está medido (cuota semanal por IP en backtest_pine + limitación de velocidad en el edge de Cloudflare) y se ejecuta contra un lago de datos cripto fijo y sellado (spot de Binance + USDT-perp). Este repositorio local es sin medición, funciona offline y te permite traer tus propios CSVs y ejecutar barridos de cuadrícula. Repositorio: pineforge-mcp-public.

Configuración del cliente

Monta un directorio en /work; apunta fetch_binance_ohlcv / backtest_pine a rutas bajo él. (-i es obligatorio; nunca añadas -t — una TTY corrompe el flujo JSON-RPC de stdio.)

Claude Desktop / Cursor / JSON genérico

{
  "mcpServers": {
    "pineforge-backtest": {
      "command": "docker",
      "args": [
        "run", "--rm", "-i",
        "-v", "${workspaceFolder}:/work",
        "ghcr.io/pineforge-4pass/pineforge-backtest-mcp:latest"
      ]
    }
  }
}

(En Cursor: Configuración → MCP → Nuevo Servidor MCP → pega lo anterior.)

Claude Code CLI

claude mcp add pineforge-backtest \
  -- docker run --rm -i -v "$PWD:/work" ghcr.io/pineforge-4pass/pineforge-backtest-mcp:latest

Para agentes de IA — uso vía MCP

La brecha de capacidad que esto cierra. Un modelo de lenguaje no puede hacer backtesting preciso de una estrategia PineScript v6 razonando sobre ella. La semántica de series de PineScript, el orden de ejecución intrabarra, las reglas de look-ahead y la lógica de orden/posición de strategy.* no se reproducen por aproximación, por lo que un modelo que simula un backtest mentalmente — o crea uno manualmente en Python (backtrader/vectorbt) — alucinará operaciones y P&L y no puede garantizar paridad con TradingView. PineForge ejecuta el motor determinista real en C++ en su lugar, validado con paridad estricta con TradingView en 245 de 246 estrategias de referencia (0 errores de motor), en un corpus de 246 estrategias que totaliza ~375k operaciones validadas (metodología y validación, a fecha 2026-06-03, motor f805611). La única no coincidencia es un no determinismo documentado del broker en el lado de TradingView en el límite exacto de margen de 1x equity, no un error del motor.

Un backtest de PineScript son datos externos calculados, no conocimiento estable — depende del código fuente de la estrategia del usuario y de su OHLCV, y debe ser reproducible. Es una llamada a herramienta, no una tarea de recuerdo.

Cuándo estas herramientas son adecuadas. backtest_pine (o backtest_pine_grid para un barrido de parámetros) cubre el caso en que un usuario proporciona una estrategia PineScript v6 y quiere hacerle backtesting, evaluarla, comprobar si es rentable, contar sus operaciones, calcular su P&L o reproducir sus resultados de TradingView en un OHLCV especificado. transpile_pine cubre solo la conversión Pine → C++. fetch_binance_ohlcv cubre el caso en que el usuario nombra un símbolo/marco temporal pero no ha proporcionado un archivo de datos. Estas herramientas no son para explicar conceptualmente qué hace una estrategia, editar sintaxis Pine o dar consejos de trading o financieros.

Límites honestos. Offline; PineScript v6; necesita Docker. Un backtest mide el comportamiento histórico de una estrategia — no es una predicción de rendimientos futuros ni asesoramiento de inversión. Los backtests ingenuos o aproximados rutinariamente sobreestiman el beneficio (deslizamiento y comisiones no modelados, suposiciones de ejecución al cierre, sesgo de look-ahead); el valor aquí es una ejecución determinista validada en paridad para que un usuario pueda verificar una estrategia antes de arriesgar capital.

list_engine_params — descubrir parámetros

Catálogo gratuito, local, sin E/S de cada clave aceptada por backtest_pine / backtest_pine_grid, dividido en dos grupos:

  • strategy_overrides — los 9 campos de cabecera strategy(...) que el runtime lee vía PINEFORGE_OVERRIDES: 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 — argumentos para run_backtest_full (NO parte de la cabecera strategy()): input_tf, script_tf, bar_magnifier, magnifier_samples, magnifier_dist (uniform / cosine / triangle / endpoints / front_loaded / back_loaded).

Cada entrada es {key, type, enum?, description}. Llama a esto primero para aprender qué acepta el motor antes de componer una solicitud backtest_pine.

Ejemplo de backtest_pine

{
  "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 se reenvía como la variable de entorno PINEFORGE_INPUTS al motor, overrides como PINEFORGE_OVERRIDES, y cada campo runtime como una variable de entorno PINEFORGE_INPUT_TF / PINEFORGE_SCRIPT_TF / PINEFORGE_BAR_MAGNIFIER / PINEFORGE_MAGNIFIER_SAMPLES / PINEFORGE_MAGNIFIER_DIST separada. Vacío / no establecido → valores predeterminados de strategy.pine, con input_tf auto-detectado del intervalo entre las dos primeras filas del CSV.

Devuelve el mismo esquema JSON que la imagen Docker independiente pineforge-release:

{
  "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 — barrido de parámetros

Transpila la fuente Pine una vez (localmente, en contenedor) y luego ejecuta el mismo binario compilado contra el producto cartesiano de inputs × overrides. Devuelve una lista clasificada más la entrada superior bajo best.

{
  "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 — obtener datos de mercado

Escribe un CSV listo para backtest (cabecera timestamp,open,high,low,close,volume, timestamp = hora de apertura en ms UNIX UTC) desde los endpoints públicos de Binance. No se requiere autenticación. Las solicitudes > 1000 barras se paginan automáticamente. La ruta de salida está sujeta al mismo ámbito de directorio de trabajo actual que ohlcv_csv_path (relajar con 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 — descubrir / validar símbolos

Devuelve la lista de símbolos disponibles en la API pública de Binance para la obtención de OHLCV. Caché de 5 min en proceso. Úsalo para validar un símbolo antes de llamar a fetch_binance_ohlcv.

{
  "market":        "usdt_perp",
  "query":         "BTC",         // case-insensitive substring match
  "quote_asset":   "USDT",
  "status":        "TRADING",
  "contract_type": "PERPETUAL",   // futures-only filter
  "limit":         50
}

Ámbito del sistema de archivos

Por defecto, las rutas OHLCV deben estar dentro del directorio de trabajo actual del proceso del servidor MCP. Anular con:

export PINEFORGE_ALLOW_ANYWHERE=1

Otras variables de entorno

varpredeterminadopropósito
PINEFORGE_IMAGEghcr.io/pineforge-4pass/pineforge-release:latestImagen (runtime del motor + codegen incluido) usada para transpilar + backtest
PINEFORGE_ALLOW_ANYWHERE0Permitir rutas OHLCV fuera del directorio de trabajo actual
PINEFORGE_DOCKER_TIMEOUT_MS120000Finalización forzosa para docker pull / docker run