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 — Pegue uma API key gratuita de codegen. Cadastre no formulário de early-access abaixo. A key chega no seu e-mail na hora e tem um tier gratuito generoso — suficiente pro fluxo de desenvolvimento de qualquer quant individual.
Passo 2 — POST do seu source Pine pra API de codegen. A API transpila PineScript v6 pra C++ e devolve um shared object compilado. Nenhum interpretador Pine roda em runtime — o output é código de máquina nativo.
curl -s https://api.pineforge.io/v1/codegen \
-H "Authorization: Bearer $PINEFORGE_API_KEY" \
-H "Content-Type: application/json" \
-d '{"source": "'"$(cat my_strategy.pine | jq -Rs .)"'"}' \
| jq -r '.artifact_url' \
| xargs curl -sL -o strategy.soPasso 3 — docker run. Puxe a imagem do runtime do PineForge e monte seu CSV de OHLCV junto com o artefato compilado. 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 \ -v "$(pwd)/strategy.so":/strategy.so \ -v "$(pwd)/ohlcv.csv":/data.csv \ ghcr.io/pineforge/runtime:latest \ run /strategy.so --data /data.csv --output 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 167 estratégias na galeria foi backtestada contra exports CSV do TradingView (pra validação de paridade) e datasets CSV custom (pra teste de regressão). 165 das 167 atingem o tier canônico estrito-excelente (drift de PnL ≤ 0,5% sobre a janela de comparação); as duas restantes são matches completos trade a trade no tier forte (drift entre 0,5% e 1%, bem dentro da tolerância de reprodutibilidade pra sizing em produção). Um probe adicional — um stress test de margin-equity 1× — fica fora da sweep do headline; ele expõe um não-determinismo do broker emulator do TV que não dá pra modelar a partir de estado público do Pine.