Rode backtests de PineScript offline, com seus próprios dados
PineForge transpila PineScript v6 pra C++ nativo e roda na sua máquina local via Docker. Local-first, byte a byte reproduzível, roda em qualquer lugar que rode Docker. Traga seu próprio CSV de OHLCV.
Por que offline?
Backtest no browser é ótimo pra iterar do lado do gráfico. Backtest offline é o que você pega quando o próximo passo é botar dinheiro atrás da estratégia: quando você precisa de audit trail, quando o CI precisa fazer gate em cada commit, quando um resultado de dois meses atrás tem que se reproduzir bit a bit hoje.
Rodar backtests offline te dá o que testers no browser não conseguem: os resultados são byte a byte reproduzível — mesmo input, mesmo output, toda vez. Você pina a versão do engine, commita os resultados num repo, faz diff de trade-lists entre commits, e roda tudo em headless no seu pipeline de CI. O CSV que você joga é seu; o binário que roda é local; o relatório que volta é auditável.
A lista prática do que offline destrava: engines com versão pinada pra que um commit de dois meses atrás produza a mesma trade-list hoje; ingestão de dados custom pra testar contra reconstruções de tick da sua corretora, preços point-in-time do seu vendor de equity ou qualquer feed alt-data que você consiga serializar como OHLCV; integração com CI pra que regressões quebrem o build antes de chegar em produção; e portabilidade multi-broker porque a lógica da sua estratégia não está presa a uma plataforma — é um arquivo.
Se você já precisou compartilhar um resultado de backtest com um colega e percebeu que o único jeito de "compartilhar" era tirar print de um gráfico — execução offline é o que estava faltando.
Como funciona
Três passos. O fluxo completo do source Pine até um relatório JSON de trades leva menos de dois minutos da primeira vez e menos de trinta segundos em toda execução depois.
Passo 1 — Baixe o runtime. Uma única imagem de container. Sem pip, sem key, sem cadastro — transpile e backtest rodam os dois dentro dela, offline. Grátis pra uso pessoal de trading.
Passo 2 — Transpile seu Pine pra C++. Rode o container em modo transpile-only e ele transforma seu PineScript v6 num arquivo C++ completo, localmente. Nenhum interpretador Pine roda em runtime — o engine compila tudo pra código de 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
Passo 3 — Backtest. Monte seu CSV de OHLCV junto com o C++ gerado e rode o container. O engine lê o arquivo de dados, executa a estratégia barra a barra e escreve um relatório JSON no 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
O output JSON inclui uma trade-list completa com preços de entrada e saída, índices de barra, tamanhos de posição e um bloco de sumário com PnL líquido, max drawdown, total de trades, profit factor e Sharpe. Todos os campos são estáveis entre patch releases da mesma versão major — seguro pra parsear em scripts.
É isso. Sem GUI, sem reautenticação de conta, sem carregamento de gráfico. Se você consegue rodar Docker, consegue rodar backtests offline com PineForge.
O que dá pra fazer backtest
Resposta curta: qualquer coisa que você consiga serializar como OHLCV. PineForge não está conectado a nenhum provedor de dados de mercado. Você traz os dados; o engine roda a estratégia.
Cripto da sua exchange. Puxe trade data raw da Binance, Bybit, Kraken ou qualquer exchange com REST ou WebSocket. Agregue no timeframe que sua estratégia usa. Joga o CSV direto. Testa exatamente a combinação par-e-venue que você vai tradar.
Ações do seu vendor de dados. Polygon, Norgate, BarChart, Tiingo — escolhe a fonte, exporta preços ajustados point-in-time, roda backtests com seus fills reais e seu universo livre de viés de sobrevivência.
Reconstruções de tick. Se você tem dados de Level 2 e quer testar em barras sintéticas de 1 segundo reconstruídas a partir de ticks, dá. Gera o OHLCV a partir do tick e passa adiante. O engine não sabe nem se importa de onde vieram as barras.
Alt-data. Scores de sentimento, métricas on-chain, funding rates, skew de opções — se você consegue expressar como série temporal alinhada ao índice de barra, dá pra incorporar no Pine via colunas de dado custom e testar offline.
A suíte de referência de 246 estratégias na galeria foi backtestada contra exports CSV do TradingView (pra validação de paridade) e datasets CSV customizados (pra teste de regressão). 245 das 246 atingem o tier canônico estrito-excelente (drift de PnL ≤ 0,5% sobre a janela de comparação). A 1 restante é uma anomalia documentada do lado do TV — não-determinismo de chart-state deep-analyzed, rastreado até estado do TradingView. Zero engine bugs reais sobrando.