Saltar al contenido

Backtest de una estrategia Pine desde Claude Code o Cursor

7 min de lectura

Recorrido por los servidores MCP de PineForge: conecta el endpoint alojado gratuito con un solo comando o ejecuta el servidor Docker local con tus propios datos, pide a tu asistente el backtest de una estrategia Pine y lee el informe que recibe.

Versiones actuales: el motor v1.10.0, publicado el 2026-11-03, y el servidor local @pineforge/backtest-mcp v0.9.40.

Actualizado el 2026-09-30 para los servidores actuales: el endpoint alojado en mcp.pineforge.dev y el servidor Docker local ghcr.io/pineforge-4pass/pineforge-backtest-mcp (v0.9.32).

PineForge expone su motor de backtest como servidor Model Context Protocol, así que puedes lanzar un backtest desde cualquier cliente compatible con MCP: Claude Code, Claude Desktop, Cursor y otros. Hay dos servidores. El alojado no requiere instalar nada. El local se ejecuta en Docker en tu máquina, con tus propios datos.

Qué hacen los servidores

El servidor alojado en https://mcp.pineforge.dev/mcp expone 11 herramientas. Las que más vas a usar:

HerramientaQué haceCosto
backtest_pineTranspila, compila y ejecuta el backtest de una estrategia Pine v6 sobre datos OHLCV alojadoscuota semanal compartida con las comprobaciones de paridad, gratis
list_symbolsLista los símbolos con OHLCV en un mercado de cripto compatibleno se contabiliza
check_pine_featureIndica si un identificador de Pine está soportadono se contabiliza
check_quotaCuántas llamadas te quedan esta semana en la cuota compartida de backtest y paridadno se contabiliza

El servidor local tiene 11 herramientas, entre ellas backtest_pine sobre tu propio CSV, backtest_pine_grid para barridos de parámetros, check_tradingview_parity para evaluar una exportación de TradingView, transpile_pine y fetch_binance_ohlcv. Su uso no se contabiliza.

Conviene detenerse un momento en la privacidad. Con el servidor alojado, tu código Pine viaja a mcp.pineforge.dev y el OHLCV sale del conjunto de datos de PineForge. Para contar cuántos llamantes distintos usan el servidor alojado, se registra la dirección IP de cada llamada a una herramienta (en IPv6, el bloque /64) junto con la semana y el número de llamadas. Estos registros se eliminan después de 8 semanas; solo se conservan los totales semanales sin direcciones. Hasta este cambio, solo se registraba la dirección IP de las llamadas que cuentan para la cuota semanal. Con el servidor local, la transpilación y el backtest se ejecutan dentro del contenedor: tu código Pine y tu CSV no salen de tu máquina. Las únicas llamadas de red van a la API pública de Binance: las descargas que tú pidas, el tamaño del tick de un mercado cuando indicas su símbolo y las barras que descarga check_tradingview_parity cuando no pasas ninguna.

Conecta el servidor alojado (un comando)

claude mcp add --transport http pineforge https://mcp.pineforge.dev/mcp

Sin instalación y sin clave. Otros clientes aceptan la URL https://mcp.pineforge.dev/mcp como servidor Streamable HTTP. En Claude Desktop, añádelo como conector personalizado (Customize, Connectors, Add custom connector).

O ejecuta el servidor local

Necesitas Docker. Registra el servidor en Claude Code:

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

Si ya habías descargado la imagen, docker pull ghcr.io/pineforge-4pass/pineforge-backtest-mcp:latest la actualiza: Docker no descarga por sí solo una versión más reciente de latest.

El directorio desde el que lo lanzas se monta en /work. Indica tus archivos con su ruta /work/... (por ejemplo, /work/eth_15m.csv): una ruta relativa se resuelve dentro del contenedor, no en tu directorio.

Claude Desktop y Cursor

En los clientes que leen un JSON mcpServers, añade el servidor local. En Cursor es .cursor/mcp.json en tu proyecto (o ~/.cursor/mcp.json para todos los proyectos); en Claude Desktop es claude_desktop_config.json (Settings, Developer, Edit Config). Sustituye /absolute/path/to/your/data por la carpeta que contiene tus CSV:

{
  "mcpServers": {
    "pineforge-backtest": {
      "command": "docker",
      "args": [
        "run", "--rm", "-i",
        "-v", "/absolute/path/to/your/data:/work",
        "ghcr.io/pineforge-4pass/pineforge-backtest-mcp:latest"
      ]
    }
  }
}

Mantén -i y no añadas nunca -t: una TTY corrompe el flujo JSON-RPC que viaja por stdio.

Pídeselo en lenguaje natural

Con un servidor conectado, la interacción es en lenguaje natural. Con el servidor local, un intercambio realista (resumido; las cifras son de una ejecución del 2026-09-30):

Tú: Descarga los últimos 7 días de ETHUSDT en barras de 15 minutos en /work/eth_15m.csv, luego haz el backtest de strategy.pine con esos datos y dame la tasa de acierto y el drawdown.

Claude: Ejecuto fetch_binance_ohlcv y después backtest_pine…

[fetch_binance_ohlcv escribe 672 barras; backtest_pine responde en unos dos segundos]

49 operaciones en la ventana. P&L neto de −144,63, tasa de acierto del 38,8 %, drawdown máximo de 199,66. Profit factor de 0,61. ¿Quieres que haga un barrido de las longitudes de las medias móviles con backtest_pine_grid?

El modelo tiene las descripciones de las herramientas, sabe qué devuelve backtest_pine y puede encadenar la siguiente llamada. El ciclo de «editar el Pine, cambiar a TradingView, recargar el gráfico, leer las cifras, volver» se reduce a una sola conversación.

Cómo es el informe

backtest_pine devuelve el mismo informe JSON que escribe la imagen Docker pineforge-release. Este es el bloque de resumen de la ejecución anterior:

{
  "engine": "pineforge",
  "summary": {
    "total_trades": 49,
    "wins": 19,
    "losses": 30,
    "win_rate_pct": 38.7755,
    "net_pnl": -144.63,
    "avg_trade": -2.9516,
    "best_trade": 45.39,
    "worst_trade": -47.13,
    "max_drawdown": -199.66,
    "bars_processed": 672
  },
  "trades": [
    /* 49 entries: side, entry and exit time and price, qty, pnl, bar indices */
  ],
  "metrics": { /* profit factor, Sharpe, Sortino, CAGR and more */ },
  "equity_curve": [ /* one point per bar */ ],
  "fingerprint": { /* engine, transpiler, inputs and data behind the run */ }
}

El modelo recibe la estructura completa, así que puede responder «¿cuál fue la peor operación?» a partir de trades, sin una segunda llamada. Con informes muy grandes, el servidor local devuelve solo el resumen en lugar del informe completo.

Ten en cuenta la cuota

En el servidor alojado, backtest_pine y check_tradingview_parity comparten una misma cuota semanal por IP, cuyo tope encontrarás en la página de Asistentes de IA; la semana se reinicia el lunes a las 00:00 UTC, y el resto de herramientas no consume cuota. Además, un presupuesto mensual de cómputo compartido por todos los usuarios gratuitos puede pausar los backtests gratuitos hasta el siguiente mes UTC. check_quota permite al modelo comprobarlo antes de un bucle largo. El servidor local no tiene cuota, así que es la mejor opción para los barridos.

Un patrón útil: en el CLAUDE.md de tu proyecto (o su equivalente), añade una indicación como Before running more than 5 hosted backtests, call check_quota and report the remaining budget.

Lo que queda fuera de los servidores, a propósito

  • Sin envío de órdenes. Los servidores hacen backtests; nunca se conectan a un broker.
  • Sin datos que no hayas pedido. El servidor alojado hace los backtests con sus propios datos de cripto; el servidor local usa tu CSV o una descarga de Binance que tú solicites.
  • Sin estado entre llamadas. Cada llamada a backtest_pine es independiente.

Son límites de alcance deliberados. Mantienen la superficie auditable y los modos de fallo simples.

Aquí es donde se pone interesante

Algunos patrones que resultan engorrosos a mano:

  • «Ajusta el stop y vuelve a ejecutarlo». El modelo cambia un número en el código Pine, vuelve a llamar a backtest_pine y compara los resultados.
  • «Pruébalo con los últimos 30 días en vez de los últimos 7». El modelo descarga otra ventana y vuelve a ejecutarlo.
  • «¿Qué sensibilidad tiene a los parámetros?». Con el servidor local, backtest_pine_grid transpila el código una sola vez, ejecuta todas las combinaciones de los parámetros de entrada que le indiques y ordena los resultados.
  • «Compárala con esta otra estrategia que tengo». Dos llamadas a backtest_pine e informe lado a lado.

Nada de esto requiere infraestructura nueva. Sale del modelo, las herramientas y tu prosa.

Pruébalo