API FIX Institucional (4.2 / 4.4 / 5.0 / 5.2)
Conectividade institucional FIX 4.2, 4.4, 5.0 e 5.2: Inserção de Ordens (:9878), Drop Copy em Tempo Real (797=Y / 9406=Y), Dados de Mercado (:9879) e esquema XML QuickFIX.
SKILL.mdSkill pronta para uso no Claude Code com assinatura HMAC-SHA256, esquemas /fapi/v1 e /fapi/v2 e proteções contra vazamento de segredos.
AGENTS.mdArquivo AGENTS.md pronto para o repositório no OpenAI Codex CLI — regras de tick-size, limites de taxa (rate limits) e limites de autocustódia.
AGY.mdEspecificação de agente para Google Antigravity (agy) e Gemini com modelos verificados de execução assíncrona em Python para WebSocket e REST.
llms.txtÍndice legível por máquina em URL única de todas as páginas da documentação da GaiaEx, esquema OpenAPI 3.0 e coleção do Postman.
1. Visão Geral da Arquitetura e Múltiplas Versões
O Gateway FIX Institucional Nativo em C++26 da GaiaEx oferece Entrada de Ordens com latência ultrabaixa determinística, Drop Copy em Tempo Real, Consulta de Posições e Ordens e streaming de Dados de Mercado L1/L2 através de sessões TCP/TLS persistentes.
Baixar o Esquema XML QuickFIX / OnixS: /fix-dictionary.xml — compatível com QuickFIX (C++/Python/Go), QuickFIX/J, OnixS, OneZero e plataformas OMS institucionais. Configure o motor do seu cliente com ValidateUserDefinedFields=N e ValidateFieldsOutOfOrder=N para compatibilidade futura.
| Tipo de Sessão do Gateway | Porta | Versões Suportadas | Capacidades | Política de Acesso |
|---|---|---|---|---|
| Order Management (OE) | 9878 | FIX.4.2, FIX.4.4, FIX.5.0, FIX.5.2 | Entrada de ordens (35=D), Cancelamento (35=F), Modificação (35=G), Cancelamento em Massa (35=q), Status da Ordem (35=H), Posições (35=AN), Limites de Taxa (35=XLQ), Instrumentos (35=x) | Chave de API de Leitura + Negociação |
| Drop Copy (DC) | 9878 | FIX.4.2, FIX.4.4, FIX.5.0, FIX.5.2 | Stream consolidado de ExecutionReport (35=8) em tempo real marcado com 797=Y e 9406=Y para todas as ordens FIX e REST/HTTP | Somente Leitura Obrigatório (35=j rejeita ordens) |
| Market Data (MD) | 9879 | FIX.4.2, FIX.4.4, FIX.5.0, FIX.5.2 | Snapshot (35=W), IncrementalRefresh (35=X) e MarketDataRequestReject (35=Y) L1/L2 em tempo real | Somente Leitura Obrigatório (35=j rejeita ordens) |
Negociação de Versão e Regras de Conexão
| Versão do FIX | BeginString (8) | Tag de Logon (35=A) | Tag de Cabeçalho de Aplicação | ExecType (150) de Negociação | Regra de ExecTransType (20) |
|---|---|---|---|---|---|
| FIX 4.2 | 8=FIX.4.2 | Nenhum | Nenhum | 150=1 (Parcial), 150=2 (Executada) | Obrigatório (20=0 Novo, 20=3 Status) |
| FIX 4.4 | 8=FIX.4.4 | Nenhum | Nenhum | 150=F (Negociação) com 39=1/2 | Proibido (rejeitado via 35=3, 371=20, 373=2) |
| FIX 5.0 | 8=FIXT.1.1 | 1137=7 | 1128=7 | 150=F (Negociação) com 39=1/2 | Proibido (rejeitado via 35=3, 371=20, 373=2) |
| FIX 5.2 (5.0 SP2) | 8=FIXT.1.1 | 1137=9 | 1128=9 | 150=F (Negociação) com 39=1/2 | Proibido (rejeitado via 35=3, 371=20, 373=2) |
2. Gerenciamento de Sessão e Logon HMAC-SHA256 (35=A)
Toda sessão FIX começa com um frame Logon (35=A) autenticado através da sua Chave de API GaiaEx (Tag 553), Segredo da API (Tag 554) e uma assinatura HMAC-SHA256 hexadecimal em minúsculas em RawData (Tag 96).
import hmac, hashlib
def sign_fix_logon(api_secret: str, sending_time: str, seq_num: int, sender_comp_id: str, target_comp_id: str) -> str:
# Canonical prehash string: SendingTime(52) | MsgType(35) | MsgSeqNum(34) | SenderCompID(49) | TargetCompID(56)
payload = f"{sending_time}|A|{seq_num}|{sender_comp_id}|{target_comp_id}"
return hmac.new(api_secret.encode("utf-8"), payload.encode("utf-8"), hashlib.sha256).hexdigest()| Tag | Nome do Campo | Obr | Descrição |
|---|---|---|---|
98 | EncryptMethod | S | 0 = Nenhum / criptografia de transporte TLS |
108 | HeartBtInt | S | Intervalo de heartbeat em segundos (recomendado: 30) |
141 | ResetSeqNumFlag | N | Y = Redefinir números de sequência para 1; N = Retomar estado de sequência intradiário |
553 | Username | S | Chave de API GaiaEx |
554 | Password | S | Segredo da API GaiaEx |
96 | RawData | S | Assinatura HMAC-SHA256 hexadecimal de 64 caracteres sobre 52|A|34|49|56 |
797 / 9406 | CopyMsgIndicator / DropCopyFlag | N | Defina 797=Y, 9406=Y ou 50=DROPCOPY para registrar uma sessão de Drop Copy somente leitura |
1409 | SessionStatus | Saída | Retornado em 35=A / 35=5: 0=Ativo, 4=Logout Concluído, 5=Autenticação Inválida, 6=Sequência Muito Baixa, 101=Limite de Sequência de 100M |
Recuperação de Intervalo (35=2 e 35=4) e Cancel-on-Disconnect (CoD)
- Detecção de Lacuna de Entrada: Se uma mensagem recebida contiver
MsgSeqNum (34) > ExpectedSeqNum, o gateway emitirá imediatamenteResendRequest (35=2, 7=ExpectedSeqNum, 16=0). SeMsgSeqNum (34) < ExpectedSeqNumsemPossDupFlag (43=Y), o gateway emitiráLogout (35=5, 1409=6)e fechará o socket. - Reexecução de Saída: Quando o cliente envia
ResendRequest (35=2), o gateway reexecuta todas as mensagens de aplicação (incluindo relatórios de35=8de Drop Copy) com43=Ye122=OrigSendingTime, e agrupa frames administrativos emSequenceReset-GapFill (35=4, 123=Y). - Cancel-on-Disconnect (CoD) Automático: Quando uma sessão de Order Management é desconectada, todas as ordens abertas em espera (
OrdStatus 39=0) criadas nessa sessão são automaticamente canceladas (150=4, 39=4, 103=3020) e transmitidas em tempo real para qualquer sessão de Drop Copy ativa.
3. Entrada, Modificação, Cancelamento e Consulta de Ordens (35=D, G, F, q, H, AN, XLQ)
NewOrderSingle (35=D)
| Tag | Nome do Campo | Obr | Valores Suportados e Notas |
|---|---|---|---|
11 | ClOrdID | S | Identificador exclusivo de ordem atribuído pelo cliente (até 31 caracteres) |
1 | Account | N | Endereço do cofre de autocustódia (0x...) ou identificador de subconta |
50 | SenderSubID | N | ID do trader ou da estratégia; retornado em TargetSubID (57) no 35=8 |
55 | Symbol | S | Perpétuos de USDC (BTCUSDC, ETHUSDC, SOLUSDC), Perpétuos de USDT (BTCUSDT, ETHUSDT), Perpétuos de RWA (xyz:GOLD / GOLDUSDC, xyz:NVDA, xyz:TSLA) |
54 | Side | S | 1 = Compra, 2 = Venda |
38 | OrderQty | S | Quantidade da ordem no ativo base (suporta precisão fracionária de 4 casas decimais, por ex., 0.0050) |
40 | OrdType | S | 1 = A Mercado, 2 = Limite, 4 = Stop Limit (requer 99=StopPx), p = Post-Only (ou 18=6) |
44 | Price | C | Preço limite (obrigatório para 40=2, 40=4, 40=p) |
59 | TimeInForce | N | 1 = GTC (padrão), 3 = IOC, 4 = FOK, 5 = GTX |
544 | CashMargin | N | 1 = À Vista (padrão), 2 = Abertura com Margem, 3 = Fechamento com Margem |
Modificação (35=G), Cancelamento (35=F), Cancelamento em Massa (35=q), Status (35=H), Posições (35=AN) e Limites (35=XLQ)
| MsgType | Nome da Mensagem | Tags Principais da Requisição | Resposta do Gateway |
|---|---|---|---|
35=G | OrderCancelReplaceRequest | 11=ClOrdID, 41=OrigClOrdID, 55=Symbol, 54=Side, 38=OrderQty, 44=Price | 35=8 com 150=5, 39=5 (Substituída) ou 35=9 (434=2) |
35=F | OrderCancelRequest | 11=ClOrdID, 41=OrigClOrdID, 55=Symbol, 54=Side | 35=8 em duas etapas: 150=6, 39=6 (Cancelamento Pendente) → 150=4, 39=4 (Cancelada), ou 35=9 (434=1) |
35=q | OrderMassCancelRequest | 11=ClOrdID, 530=7 (Cancelar todas as ordens) | 35=r (1369=MassActionReportID, 531=7) + um 35=8 (150=4, 39=4) por ordem cancelada |
35=H | OrderStatusRequest | 11=ClOrdID (ou 37=OrderID), 790=OrdStatusReqID | 35=8 com 150=I (Status da Ordem) ou 150=8, 103=5 (Ordem desconhecida) |
35=AN | RequestForPositions | 710=PosReqID, 724=0 (Posições), 1=Account, 55=Symbol | PositionReport (35=AP) com 721=PosMaintRptID, 728=0, 704=LongQty, 705=ShortQty, 730=SettlePrice |
35=XLQ | LimitQuery | 25003=ReqID | LimitResponse (35=XLR) com 25005=ORDERS (500/s) e 25005=CONNECTIONS (20/conta) |
4. Drop Copy em Tempo Real e Reconciliação (797=Y / 9406=Y)
O Drop Copy oferece a prime brokers, motores de risco e sistemas de reconciliação de back-office um stream em tempo real e somente leitura de todos os eventos de ExecutionReport (35=8) em sessões FIX de Entrada de Ordens e ordens da API REST/HTTP.
- Flags de Assinatura Universal: Conecte-se à porta
9878e envieLogon (35=A)com797=Y(CopyMsgIndicator),9406=Y(DropCopyFlag) ou50=DROPCOPY(SenderSubID). - Marcação de Saída com Tag Dupla: Cada frame
35=8de Drop Copy inclui57=DROPCOPY,797=Ye9406=Y, além do detalhamento completo de taxas/reembolsos (381=GrossTradeAmt,1057=AggressorIndicator,136=1|137=MiscFeeAmt|138=MiscFeeCurr|139=4,20000=TradeFeeRebateAmt). - Proteção Estrita de Somente Leitura: Qualquer tentativa de enviar
35=D,35=F,35=Gou35=qem uma sessão de Drop Copy é imediatamente rejeitada viaBusinessMessageReject (35=j, 380=4). - Recuperação de Lacunas de Sequência: Relatórios de Drop Copy de saída são persistidos no armazenamento de sequência da sessão e podem ser reexecutados via
ResendRequest (35=2)comPossDupFlag (43=Y).
5. Dados de Mercado (35=V, W, X, Y) e Dados de Referência (35=x, y, h)
Conecte-se à porta 9879 para streaming dedicado de Dados de Mercado ou consulte especificações de instrumentos via SecurityListRequest (35=x).
- MarketDataRequest (
35=V): Envie262=MDReqID,263=1(Snapshot + Atualizações) ou0(Snapshot),264=1(Topo do Livro) ou20(Profundidade Total), e55=Symbol. RetornaMarketDataSnapshotFullRefresh (35=W)seguido porMarketDataIncrementalRefresh (35=X). Símbolos desconhecidos retornamMarketDataRequestReject (35=Y, 281=0). - SecurityListRequest (
35=x): Envie320=SecurityReqIDe559=0(único símbolo em55) ou559=4(todos os instrumentos). RetornaSecurityList (35=y)com tamanho do tick (969=MinPriceIncrement), quantidade mínima/máxima da ordem (8000/8001) e precisão decimal (8002/8003). - TradingSessionStatus (
35=h): Retorna340=2(Aberto 24x7x365) ou340=1(Interrompido).
Modelo de Configuração de Cliente QuickFIX (gaiaex_fix.cfg)
[DEFAULT]
ConnectionType=initiator
ReconnectInterval=5
FileStorePath=./store
FileLogPath=./log
StartTime=00:00:00
EndTime=00:00:00
UseDataDictionary=Y
DataDictionary=./fix-dictionary.xml
ValidateUserDefinedFields=N
ValidateFieldsOutOfOrder=N
HeartBtInt=30
[SESSION]
BeginString=FIX.4.4
SenderCompID=INST_CLIENT_OE
TargetCompID=GAIAEX_PROD
SocketConnectHost=10.10.0.51
SocketConnectPort=9878
ResetOnLogon=N
[SESSION]
BeginString=FIX.4.4
SenderCompID=INST_CLIENT_DC
TargetCompID=GAIAEX_PROD
SenderSubID=DROPCOPY
SocketConnectHost=10.10.0.51
SocketConnectPort=9878
ResetOnLogon=N