Quant workbench de ações A local: como funciona
Entenda o que sustenta um quant workbench self-hosted para ações A e os quatro pontos a verificar antes de usar filtros, backtests e dados locais.
Uma quant workbench self-hosted para ações A é uma página web que filtra o mercado, acompanha uma lista de ativos, executa backtests e redige uma revisão pós-mercado em uma máquina sob seu controle, em vez de usar o terminal de uma corretora. Um projeto sob licença MIT, o tickflow-stock-panel, reúne tudo isso em uma única porta e tinha acumulado cerca de 2.800 estrelas no GitHub em agosto de 2026. A lista de recursos é a parte mais fácil de ler. A camada subjacente é que determina se tudo continuará funcionando no próximo trimestre.
Do que é composto um workbench quant de ações A hospedado localmente
A arquitetura é curta o suficiente para ser entendida de imediato. Com base no código e na documentação do commit de agosto de 2026, ela é composta por:
- Uma página web criada em React e TypeScript.
- Um serviço em Python, com FastAPI e um agendador que atualiza os dados em intervalos definidos.
- Um armazenamento local: arquivos Parquet em disco, consultados com DuckDB e processados com Polars.
- Um mecanismo de backtesting, o vectorbt, que usa esses arquivos.
- Um SDK do fornecedor que busca cada preço exibido pelo painel.
Observe o que não está presente. Nada nessa estrutura se conecta a uma bolsa. O painel faz os cálculos; o fornecedor fornece os dados. “Hospedado localmente” descreve onde o código é executado, mas não diz de onde vêm os números. Ter a posse dos candles brutos é função da camada abaixo, um data lake local de dados do mercado de ações A, e é isso que torna substituível tudo o que está acima dela.
O que o nível gratuito da fonte de dados oferece
Uma única variável de ambiente define o que o painel consegue consultar. Deixe a chave do fornecedor em branco, e o projeto funciona no que a documentação chama de modo None: barras históricas diárias de um endpoint gratuito, com os dados da sessão atual disponíveis entre uma e duas horas após o fechamento. Preencha a chave, e o acesso passa a depender do nível pago. É um nível gratuito utilizável para trabalhos de fim de dia, mas com uma limitação clara para qualquer operação intradiária, sujeito aos termos que o fornecedor pode alterar a cada renovação.
O responsável pelo projeto é direto sobre o acordo:
Este projeto destina-se apenas a estudos e pesquisas quantitativas e não constitui recomendação de investimento. Os resultados de backtests não representam retornos futuros.
Este é um projeto pessoal de código aberto, baseado na fonte de dados TickFlow, e não um projeto oficial da TickFlow.
README, shy3130/tickflow-stock-panel, consultado em 13 de agosto de 2026
Em outras palavras, o projeto destina-se a estudos e pesquisas quantitativas, não constitui recomendação de investimento, os resultados de backtests não representam retornos futuros e é um projeto pessoal de código aberto, não um produto oficial da TickFlow. Essa é a lição duradoura de todo esse tipo de projeto. O modelo zero-ops retira o trabalho operacional da sua mesa. Mas mantém a dependência exatamente onde estava: você aluga dados de uma empresa que nunca se comprometeu a dar suporte a esse painel. O README também limita o uso a estudos e pesquisas, enquanto o arquivo de licença é MIT.
Por que fixar um commit SHA em vez de um número de versão
Um commit SHA é a impressão digital de 40 caracteres que o git atribui a cada alteração salva. Ele identifica permanentemente um estado exato do código.
Em 13 de agosto de 2026, o repositório não tinha nada na página de Releases do GitHub. Ele tinha 31 tags de versão, de v0.1.31 a v0.1.88, com lacunas na numeração e sem notas anexadas. A tag mais recente apontava para um commit datado de 31 de julho de 2026, enquanto a branch padrão já havia avançado para um trabalho datado de 6 de agosto de 2026. Uma tag que está atrás da branch e não tem notas não informa o que você está obtendo.
Por isso, registre o SHA. O head da branch padrão em 6 de agosto de 2026 era ecfddb451e97f6fc9a7e43ac33e4ef0e69933b33. Faça checkout desse commit e registre-o ao lado de qualquer conclusão que tirar dos backtests. Seis semanas depois, “executei a versão mais recente” não descreve nada.
O início documentado consiste em duas linhas: copie o arquivo de ambiente de exemplo para .env e depois execute docker compose up --build, que disponibiliza o painel na porta 3018. Essas são as instruções do mantenedor para aquele commit, não um caminho testado; o build baixa imagens e precisa de acesso à rede, algo que esta página não verificou. O caminho de desenvolvimento (./dev.sh, ou .\dev.ps1 no Windows) requer Python 3.11 ou mais recente, Node 20 ou mais recente e os gerenciadores de pacotes uv e pnpm.
O que o recurso de estratégias com LLM envia e para onde
A geração de estratégias, os comentários sobre ações individuais e o texto de revisão são opcionais. Deixe AI_API_KEY em branco e toda a interface permanecerá escura. Ao preenchê-lo, você também define AI_PROVIDER (um endpoint compatível com OpenAI ou Ollama), AI_BASE_URL, AI_MODEL e AI_DAILY_TOKEN_BUDGET, que interrompe as chamadas quando o limite diário de tokens é atingido.
A direção do fluxo importa. O seu prompt e todo o contexto que o painel anexar a ele deixam a sua máquina e são enviados ao endpoint configurado. Se você apontar a URL base para uma API hospedada, a solicitação será enviada à empresa que opera essa API. Se apontar para um runtime na sua própria rede, os dados permanecerão nela. Hospedar o painel por conta própria não significa hospedar o modelo por conta própria. As chaves ficam em texto simples em .env, na raiz do projeto, e também podem ser editadas na página de configurações, protegida por uma senha do dashboard com no mínimo seis caracteres. Nossa nota sobre fatores de alpha gerados por LLM explica em que situações as estratégias escritas por máquinas tendem a falhar.
O backtester modela os custos de negociação?
O backtester anuncia tratamento de T+1, comissões, slippage e stop-losses. A existência dessas opções não significa que estejam configuradas. Um backtest que executa ao preço de fechamento publicado, com custos zerados, pressupõe que negociar é grátis. Não é. Um basis point corresponde a um centésimo de um por cento. O painel abaixo mede, em basis points, a diferença média entre a melhor oferta de compra e a melhor oferta de venda em seis listagens dos EUA, durante uma hora no meio do pregão de 17 de junho de 2026.
O SQL exato por trás de cada número
SELECT
ticker AS symbol,
round(avg(toFloat64(ask_price) - toFloat64(bid_price))
/ avg((toFloat64(ask_price) + toFloat64(bid_price)) / 2) * 10000, 2) AS spread_bps
FROM global_markets.cache_stocks_quotes
WHERE ticker IN ('SPY', 'AAPL', 'MSFT', 'NVDA', 'KO', 'F')
AND sip_timestamp >= toDateTime('2026-06-17 15:00:00', 'UTC')
AND sip_timestamp < toDateTime('2026-06-17 16:00:00', 'UTC')
AND bid_price > 0
AND ask_price > bid_price
GROUP BY ticker
ORDER BY spread_bpsO ativo com o menor spread no painel, SPY, apresentou uma média de 0.29 bps naquela hora. O mais amplo, F, apresentou 6.98 bps. Atravessar esse spread duas vezes, uma para entrar e outra para sair, custa aproximadamente o dobro do valor mostrado, antes das comissões.
O timing custa tanto quanto a seleção do ativo. O painel seguinte usa uma dessas listagens e mede quanto o preço se deslocou dentro de um único minuto, calculando a média em intervalos de meia hora ao longo do mesmo dia.
O SQL exato por trás de cada número
SELECT
formatDateTime(
toStartOfInterval(toTimeZone(window_start, 'America/New_York'), INTERVAL 30 MINUTE),
'%H:%i') AS et_time,
round(avg((toFloat64(high) - toFloat64(low)) / toFloat64(close)) * 10000, 1) AS range_bps
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'KO'
AND window_start >= toDateTime('2026-06-17 12:00:00', 'UTC')
AND window_start < toDateTime('2026-06-17 21:00:00', 'UTC')
AND volume > 0
AND close > 0
GROUP BY et_time
ORDER BY et_timeO painel começa em 08:00, antes do pregão regular, quando a barra média de um minuto registrou 0 bps de deslocamento: os minutos com alguma negociação permaneceram em um único preço. O último intervalo, 16:30, ocorre depois do fechamento e registrou uma média de 4.2 bps. Um backtest escolhe um ponto dentro de cada uma dessas faixas e o trata como o preço de execução. Analise a curva, não apenas os extremos: a mesma premissa é favorável em algumas horas e penalizadora em outras. As regras aplicáveis às ações A acrescentam outra restrição, pois o T+1 impede a venda, até o pregão seguinte, de ações compradas hoje, e os limites diários de preço podem eliminar completamente uma saída modelada. Nosso guia sobre um backtest reproduzível mostra o que uma configuração defensável registra, enquanto viés de antecipação aborda a outra forma pela qual uma curva aparentemente limpa pode dar errado.
Ajustado ou não ajustado: a questão da origem dos dados
É nas ações corporativas que um screener pode induzir o investidor ao erro sem chamar atenção. Uma ação que passa por um desdobramento de dez para um registra uma queda de 90% no dia, embora ninguém perca um centavo. O painel abaixo lista os doze maiores desdobramentos a termo em listagens nos EUA entre 1º de janeiro e 13 de agosto de 2026.
O SQL exato por trás de cada número
SELECT
ticker AS symbol,
formatDateTime(execution_date, '%b %e, %Y') AS effective_on,
round(any(toFloat64(split_to)) / any(toFloat64(split_from)), 2) AS shares_after_per_share
FROM global_markets.stocks_splits
WHERE execution_date >= toDate('2026-01-01')
AND execution_date <= toDate('2026-08-13')
AND split_from > 0
AND split_to > split_from
AND ticker NOT IN ('SPCX')
GROUP BY ticker, execution_date
ORDER BY shares_after_per_share DESC, execution_date DESC
LIMIT 12O maior deles transforma uma ação em 10000, com vigência em Feb 10, 2026. Proporções desse tamanho não são o desdobramento comum de quatro para um; um feed de ações corporativas traz toda a faixa em uma única coluna. O menor dos doze ainda transforma uma ação em 20, o suficiente para fazer um gráfico não ajustado parecer um colapso. Um screener de momentum que lê os preços brutos sinaliza todos eles como crashes. Os feeds chineses apresentam o mesmo problema em sua própria nomenclatura, distribuindo três variantes de cada série: não ajustada, ajustada a termo e ajustada retroativamente. Saiba qual delas foi carregada no seu painel. Histórico de preços ajustado por desdobramentos explica os cálculos.
O que verificar antes de hospedar localmente qualquer coisa desse tipo
- Origem dos dados. Qual é o fornecedor, sob qual licença os dados são disponibilizados e se o plano gratuito cobre o uso pretendido.
- Gestão das chaves. Onde as chaves de API são armazenadas no disco, quem consegue acessar a página de configurações e se a máquina está exposta além da sua própria rede.
- Modelagem de custos. Se o backtester considera comissões, slippage e as próprias regras do mercado, além de verificar o que esses campos recebem quando permanecem sem preenchimento.
- Caminho de atualização. Registre o commit exato implantado junto dos resultados, para que a análise possa ser reproduzida meses depois.
Perguntas frequentes
É gratuito executar uma estação quantitativa de ações A hospedada localmente?
O código usa a licença MIT e é gratuito. Os dados são uma questão separada: com a chave do fornecedor em branco, este projeto recorre a barras diárias históricas gratuitas, e os dados da sessão atual chegam uma a duas horas após o fechamento. Qualquer acesso mais rápido ou mais detalhado passa pelos planos pagos do fornecedor.
O que “hospedado localmente” significa neste caso?
A página web, o agendador, os arquivos armazenados e o backtester são executados na sua própria máquina ou servidor, sem uma conta em uma plataforma de terceiros. Isso não significa que os dados sejam seus. Os recursos opcionais de IA continuam remotos, a menos que você os direcione para um modelo na sua própria rede.
O recurso de LLM envia meus dados a terceiros?
Quando ativado, sim, para o endpoint compatível com OpenAI que você configurar. O recurso vem desativado: com a chave de IA em branco, nada sai da máquina.
Por que fixar um commit SHA em vez de uma tag de versão?
Em 13 de agosto de 2026, este repositório não tinha releases publicadas nem notas de versão, e sua tag mais recente apontava para um código mais antigo que o da branch padrão. Nesse caso, “Latest” significa o que a branch continha no dia em que você fez o clone, enquanto um commit SHA é exato. A mesma disciplina se aplica ao material de trading quantitativo open source em geral: fixe exatamente o que você executou.
Notas de verificação
Todos os detalhes de arquitetura e configuração acima foram lidos no repositório público em 13 de agosto de 2026, no commit ecfddb451e97f6fc9a7e43ac33e4ef0e69933b33, o head da branch padrão, datado de 6 de agosto de 2026. A página de Releases não listava nada; a lista de tags continha 31 tags de versão, de v0.1.31 a v0.1.88, e a mais recente apontava para um commit datado de 31 de julho de 2026. As linhas citadas são do próprio mantenedor, copiadas do README, sem paráfrase. O comando de inicialização do container foi citado desse README e não foi executado aqui.
Os painéis de mercado mostram listagens dos EUA, fixadas em datas passadas específicas para que os números não mudem. Eles demonstram duas verificações aplicáveis a qualquer mercado: custo de execução e ajuste por eventos societários. Não têm o objetivo de descrever o mercado chinês.
Todos os painéis desta página vêm acompanhados do SQL que os produziu, que pode ser expandido logo abaixo. Para executar a mesma verificação de spread na sua própria lista de ativos antes de incluir um deles em um screener, solicite-a em inglês simples no terminal Strasmore.