Cauda apertada. Sem surpresas em p99.
Filas SPSC lock-free, decodificadores de tags sem branching, inlining no caminho quente. A mensagem mais lenta parece a mais rápida. É isso que as venues realmente avaliam.
Um motor de protocolo FIX em C++23 construído para venues que não perdoam um heartbeat perdido. Zero alocações no caminho quente, parsing sub-microssegundo, estado de sessão determinístico.
Previsível. Até o último detalhe.
Cada número que você buscaria num runbook de produção. Medido sob carga, em hardware comum, contra um replay determinístico.
Três escolhas arquitetônicas que se acumulam. Cada uma torna a próxima possível.
Filas SPSC lock-free, decodificadores de tags sem branching, inlining no caminho quente. A mensagem mais lenta parece a mais rápida. É isso que as venues realmente avaliam.
Arenas estáticas, freelists intrusivas, slots de mensagem de tamanho fixo. O alocador nunca roda enquanto ordens fluem. Assim o kernel nunca te preempta para reclamar uma página.
Dicionários gerados por versão, selecionáveis em runtime por sessão. Overlays de dialeto personalizados para campos específicos de venue. O formato wire que a venue roda é o formato que você envia.
Perfis de sessão pré-construídos para as principais venues de ações, futuros, FX e cripto. Heartbeats, semântica de reset de sequência e peculiaridades de resend-request capturadas de traços de produção reais.
Um NewOrderSingle decodificado e roteado, lado a lado. Mesma mensagem, mesma máquina, custo muito diferente.
void Application::onMessage(const FIX44::NewOrderSingle& msg, const SessionID& sid) { FIX::ClOrdID clOrdId; msg.get(clOrdId); // allocates FIX::Symbol symbol; msg.get(symbol); // allocates FIX::Side side; msg.get(side); FIX::OrderQty qty; msg.get(qty); // allocates Decimal FIX::Price price; msg.get(price); // allocates Decimal std::string key = symbol.getString(); // allocates std::string router_->route(key, clOrdId.getString(), qty, price); } // ~14 heap allocs / msg
void OrderHandler::on_message(MessageView m, SessionRef sid) noexcept { auto [cl_ord_id, symbol, side, qty, price] = m.decode<D::ClOrdID, D::Symbol, D::Side, D::OrderQty, D::Price>(); // in-place, span<const char> // fixed-arena order slot, no heap, no copies auto& slot = arena_.acquire(cl_ord_id); slot.init(symbol, side, qty, price, sid); router_.route(slot); // 0 heap allocs / msg }
QuickFIX carregou o trabalho pesado da indústria por duas décadas. NexusFIX é o que se busca quando essas escolhas viraram o gargalo.
| QuickFIX | NexusFIX | |
|---|---|---|
| Alocações no hot path | ~14 allocs de heap por mensagem (std::string, Decimal) | 0 · arenas estáticas, decode in-place |
| Latência p99 de parsing | 1,2–1,8 µs dependendo do dialeto | < 500 ns · decode de tags sem branching |
| Throughput / núcleo | 60–90K msg/s sustentado | 240K+ msg/s sustentado |
| Comportamento da cauda sob carga | Sem GC, mas o churn do alocador = picos imprevisíveis | Sem alocador no hot path. cauda plana |
| Versões de protocolo | 4.2 / 4.4 / 5.0. Dicionário de dados XML por build | 4.2 / 4.4 / 5.0 / FIXT + overlay de dialeto em runtime |
| Linguagem | Idiomas C++03 / C++11, despacho virtual | C++23, concepts + ranges, sem virtual no hot path |
Bytes do fio entram. Ordem roteada sai. Três estágios, todos rodando na mesma thread, todos sem alocar.
O stream delimitado por SOH é iterado in-place. Cada tag se resolve em uma visão tipada sobre o buffer original; os campos numéricos são parseados sem branching, com o overlay de dialeto aplicado no bind da sessão.
Números de sequência, janelas de heartbeat, semântica gap-fill, peculiaridades de resend-request. Tratado por uma state machine gerada por perfil de venue. Cada transição é registrada em um journal memory-mapped.
Um slot de ordem em uma arena fixa é adquirido, preenchido por referência, e entregue à sua aplicação via uma fila SPSC lock-free. O slot vive até o estado terminal da ordem, depois retorna para a arena.
Dois fios para puxar a seguir. O escrito de arquitetura, ou o explicador conversacional ao vivo.
Como o NexusFIX usa arenas estáticas, filas SPSC lock-free, e state machines geradas para fazer a mensagem mais lenta parecer tão rápida quanto a mais rápida. Com números.
Ler o aprofundamento →Uma interface conversacional para os docs do motor, dicionários de mensagens, perfis de venue e suite de benchmarks. Treinado no código de produção, fundamentado nos cabeçalhos reais.
Abrir o chatbot →O NexusFIX é entregue como uma única biblioteca estática e um simulador de sessão CLI. Traga uma config de venue e um handler, e você tem uma sessão FIX determinística rodando localmente. Rejogável a partir de um journal, rastreável até o byte.
NexusFIX é um dos três motores que construímos. Mesma filosofia: open-source onde possível, performance primeiro, sem lock-in.
Geração de IA em escala + velocidade de backtest C++23 + composição estatística de grau institucional. O fosso competitivo de 3 camadas que torna o trading quant de 1000+ sinais acessível.
Saiba mais →Motor de backtesting C++23 com 138+ indicadores e estratégias prontas para produção. A camada de replay por baixo do StratCraft, disponível standalone para o seu próprio stack de pesquisa.
Saiba mais →