¿Por qué offline?
El backtest en el navegador destaca para iterar junto al gráfico. El modo sin conexión es lo adecuado cuando el siguiente paso es capital real: pista de auditoría, CI que valide cada commit y un resultado de hace dos meses que se reproduzca bit a bit hoy.
Ejecutar sin conexión te da lo que el motor en navegador no ofrece: resultados reproducible a nivel de bytes — misma entrada, misma salida, siempre. Fijas la versión del motor, registras resultados en el repositorio, comparas listas de operaciones entre commits y todo sin interfaz en CI. El CSV es tuyo; el binario es local; el informe es auditable.
Lista práctica: motor con versión fija para que un commit antiguo genere la misma lista hoy; ingesta de datos a medida para reconstrucciones de ticks de tu exchange, precios de equity «point-in-time» de tu proveedor o cualquier dato alternativo serializable a OHLCV; CI que haga fallar la compilación ante regresiones; portabilidad multi-bróker porque tu lógica es un archivo, no una plataforma.
Si alguna vez intentaste compartir un backtest y solo pudiste enviar una captura del gráfico, te falta ejecutar en modo sin conexión.
Cómo funciona
Tres pasos. De Pine fuente a JSON de trades: menos de dos minutos la primera vez; menos de treinta segundos después.
Paso 1 — Descarga el runtime. Una sola imagen de contenedor. Sin pip, sin clave, sin registro — la transpilación y el backtest corren dentro de ella, sin conexión. Gratis para trading personal.
Paso 2 — Transpila tu Pine a C++. Ejecuta el contenedor en modo solo transpilación y convierte tu PineScript v6 en un archivo fuente C++ completo, en local. No corre ningún intérprete de Pine en tiempo de ejecución — el motor lo compila a código máquina nativo.
docker run --rm --network=none \ -e PINEFORGE_TRANSPILE_ONLY=1 \ -v "$(pwd)/my_strategy.pine":/in/strategy.pine:ro \ ghcr.io/pineforge-4pass/pineforge-engine:latest > strategy.cpp
Paso 3 — Backtest. Monta tu CSV OHLCV junto al C++ generado y ejecuta el contenedor. El motor lee el archivo de datos, ejecuta la estrategia barra a barra y escribe un informe JSON en stdout.
docker run --rm --network=none \ -v "$(pwd)/strategy.cpp":/in/strategy.cpp:ro \ -v "$(pwd)/ohlcv.csv":/in/ohlcv.csv:ro \ ghcr.io/pineforge-4pass/pineforge-engine:latest > report.json
El JSON trae lista completa de trades con precios entrada/salida, índices de barra, tamaños y bloque resumen: net PnL, max drawdown, total trades, profit factor, Sharpe. Campos estables entre patches de la misma major — parsea tranquilo en scripts.
Eso es todo. Sin GUI, sin re-login de cuenta, sin cargar charts. Si tienes Docker, tienes backtests PineForge offline.
Qué puedes backtestear
Respuesta corta: todo lo serializable como OHLCV. PineForge no está cableado a ningún data vendor. Tú traes datos; el motor corre la estrategia.
Crypto desde tu exchange. Trades crudos de Binance, Bybit, Kraken o cualquier venue con REST/WebSocket. Agrega al timeframe que uses. Mete el CSV. Prueba el par y venue exactos que operarás.
Equities desde tu proveedor. Polygon, Norgate, BarChart, Tiingo — elige fuente, exporta precios ajustados point-in-time, backtest con tus fills reales y universo sin sesgo de supervivencia.
Reconstrucciones de ticks. ¿Level 2 y barras sintéticas de 1s desde ticks? Genera OHLCV desde ticks y pásalo. Al motor le da igual el origen de las barras.
Alt-data. Sentimiento, on-chain, funding, skew de opciones — si es serie temporal alineada al índice de barras, entra en Pine vía columnas custom y lo pruebas offline.
Las 252 estrategias de referencia de la galería se ejecutaron contra CSV de TradingView (para validación de paridad) y conjuntos de datos CSV personalizados (para pruebas de regresión). 251 de las 252 alcanzan el nivel canónico estricto-excelente (deriva de PnL ≤ 0.5% en la ventana de comparación). La 1 restante es una anomalía documentada del lado de TV — analizada a fondo, trazada al estado de TradingView. Cero bugs reales del motor.
