PineForge Codegen
oficialServidor 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 Pine Forge Codegen MCP?
- Transpile PineScript v6 a C++ — Convierte una estrategia Pine v6 en una unidad de traducción de C++ con
transpile_pinepara inspeccionar el código generado. - Realizar backtest de una estrategia Pine con datos OHLCV — Ejecuta un backtest determinista único con
backtest_pine, proporcionando el código fuente, la ruta del CSV y los argumentos opcionalesinputs,overridesyruntime. - Barrido de parámetros de estrategia en una sola ejecución — Usa
backtest_pine_gridpara probar cada combinación deinputs×overridescontra un CSV, reutilizando una sola compilación. - Obtener datos OHLCV de Binance como CSV listo para backtest — Extrae velas spot o USDT-perp con
fetch_binance_ohlcvy escríbelas en un archivo local para uso inmediato. - Descubrir símbolos disponibles en Binance — Valida o filtra símbolos negociables con
binance_symbolsantes de obtener datos de mercado. - Inspeccionar parámetros del motor y cobertura de Pine — Enumera todos los parámetros de backtest aceptados mediante
list_engine_paramsy verifica la compatibilidad con funciones de Pine v6 concheck_pine_featureoget_coverage_topic.
Documentación
@pineforge/codegen-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 backtest contra datos
de mercado de Binance — todo en un contenedor, en proceso. Totalmente local — la imagen
incluye el transpilador pineforge-codegen,
por lo que Pine → C++ → ejecución de backtest sin demonio Docker en el host. Sin clave
API, nada sale de la caja.

Herramientas
| nombre | se ejecuta en | propósito |
|---|---|---|
transpile_pine | en proceso | Unidad de traducción Pine v6 → C++ (solo transpilación) |
list_engine_params | local (sin E/S) | Catálogo de cada parámetro overrides + runtime aceptado por los backtests |
backtest_pine | en proceso | Backtest único de una fuente Pine contra un CSV OHLCV |
backtest_pine_grid | en proceso | Barrido cartesiano de inputs × overrides reutilizando una compilación |
fetch_binance_ohlcv | API pública Binance | Escribe un CSV listo para backtest desde velas spot o USDT-perp de Binance |
binance_symbols | API pública Binance | Listar / filtrar símbolos de Binance (caché en proceso de 5 min) |
list_coverage_topics | local (sin E/S) | Cada tema de cobertura de Pine v6 con estado de una línea + resumen |
check_pine_feature | local (sin E/S) | Consultar si un identificador/espacio de nombres Pine está soportado en PineForge |
get_coverage_topic | local (sin E/S) | Detalle completo + listas de características soportadas/no soportadas para un tema de cobertura |
engine_info | local (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. Monte un directorio de trabajo en /work para que el servidor pueda
leer/escribir sus CSV:
docker run --rm -i -v "$PWD:/work" ghcr.io/pineforge-4pass/pineforge-codegen-mcp:latest
Único requisito: Docker, y red saliente para las herramientas de obtención de Binance. Conéctelo a su cliente MCP como se indica abajo.
Alternativa alojada (sin instalación)
¿Quiere la prueba más rápida sin Docker y sin clave API? Pegue el endpoint HTTP transmisible en cualquier cliente MCP:
https://mcp.pineforge.dev/mcp
Compensación frente a este repositorio: el servidor alojado está medido (cuota semanal por IP en
backtest_pine + limitación de tasa perimetral de Cloudflare) y se ejecuta contra un lago de datos
cripto fijo y sellado (spot Binance + USDT-perp). Este repositorio local es
no medido, se ejecuta sin conexión y le permite traer sus propios CSV y ejecutar barridos
de cuadrícula. Repositorio: pineforge-mcp-public.
Configuración del cliente
Monte un directorio en /work; apunte fetch_binance_ohlcv / backtest_pine a
rutas bajo él. (-i es obligatorio; nunca agregue -t — un TTY corrompe el flujo
JSON-RPC stdio.)
Claude Desktop / Cursor / JSON genérico
{
"mcpServers": {
"pineforge-codegen": {
"command": "docker",
"args": [
"run", "--rm", "-i",
"-v", "${workspaceFolder}:/work",
"ghcr.io/pineforge-4pass/pineforge-codegen-mcp:latest"
]
}
}
}
(En Cursor: Configuración → MCP → Nuevo Servidor MCP → pegue lo anterior.)
Claude Code CLI
claude mcp add pineforge-codegen \
-- docker run --rm -i -v "$PWD:/work" ghcr.io/pineforge-4pass/pineforge-codegen-mcp:latest
Para agentes de IA — uso vía MCP
La brecha de capacidad que esto cierra. Un modelo de lenguaje no puede hacer backtest preciso de una estrategia PineScript v6 razonando sobre ella. La semántica de series de PineScript, el orden de llenado 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 lado del broker de TradingView en el límite exacto de margen de capital 1x, 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. Eso 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 backtest, evaluarla, comprobar si es rentable, contar sus operaciones, calcular su P&L o reproducir sus resultados de TradingView en 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. Sin conexión; 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 sobrestiman el beneficio (deslizamiento y comisiones no modelados, suposiciones de llenado al cierre, sesgo de look-ahead); el valor aquí es una ejecución determinista y 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 cabecerastrategy(...)que el tiempo de ejecución lee víaPINEFORGE_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 pararun_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}. Llame 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 de la
brecha 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) 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 UNIX ms 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 (relaje 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 obtención de
OHLCV. Caché de 5 min en proceso. Use esto 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. Anule con:
export PINEFORGE_ALLOW_ANYWHERE=1
Otras variables de entorno
| var | predeterminado | propósito |
|---|---|---|
PINEFORGE_IMAGE | ghcr.io/pineforge-4pass/pineforge-release:latest | Imagen (tiempo de ejecución del motor + generación de código incluida) usada para transpilar + backtest |
PINEFORGE_ALLOW_ANYWHERE | 0 | Permitir rutas OHLCV fuera del directorio de trabajo actual |
PINEFORGE_DOCKER_TIMEOUT_MS | 120000 | Finalización forzosa para docker pull / docker run |