기관용 FIX API (4.2 / 4.4 / 5.0 / 5.2)
기관용 FIX 4.2, 4.4, 5.0 및 5.2 연결: 주문 전송(:9878), 실시간 드롭 카피(797=Y / 9406=Y), 시장 데이터(:9879) 및 QuickFIX XML 스키마.
SKILL.mdHMAC-SHA256 서명, /fapi/v1 및 /fapi/v2 스키마, 시크릿 마스킹 가드레일을 갖춘 즉시 사용 가능한 Claude Code 스킬입니다.
AGENTS.md틱 크기 규칙, 레이트 리밋 예산, 자체 수탁 보호 경계가 포함된 OpenAI Codex CLI용 즉시 적용 저장소 AGENTS.md입니다.
AGY.md검증된 비동기 Python WebSocket + REST 실행 템플릿이 포함된 Google Antigravity(agy) 및 Gemini 에이전트 규격입니다.
llms.txt모든 GaiaEx 문서 페이지, OpenAPI 3.0 스키마 및 Postman 컬렉션을 단일 URL 머신 판독 가능 형식으로 제공하는 색인입니다.
1. 아키텍처 및 다중 버전 개요
GaiaEx Native C++26 기관용 FIX 게이트웨이는 지속적인 TCP/TLS 세션을 통해 결정론적 초저지연 주문 접수(Order Entry), 실시간 드롭 카피(Drop Copy), 포지션 및 주문 조회, L1/L2 시세 데이터 스트리밍을 제공합니다.
QuickFIX / OnixS XML 스키마 다운로드: /fix-dictionary.xml — QuickFIX (C++/Python/Go), QuickFIX/J, OnixS, OneZero 및 기관용 OMS 플랫폼과 호환됩니다. 상위 호환성을 위해 클라이언트 엔진을 ValidateUserDefinedFields=N 및 ValidateFieldsOutOfOrder=N(으)로 구성하십시오.
| 게이트웨이 세션 유형 | 포트 | 지원 버전 | 기능 | 접근 정책 |
|---|---|---|---|---|
| 주문 관리 (OE) | 9878 | FIX.4.2, FIX.4.4, FIX.5.0, FIX.5.2 | 주문 접수 (35=D), 취소 (35=F), 정정 (35=G), 대량 취소 (35=q), 주문 상태 (35=H), 포지션 (35=AN), 요청 속도 제한 (35=XLQ), 상품 정보 (35=x) | 읽기 + 거래 API Key |
| 드롭 카피 (DC) | 9878 | FIX.4.2, FIX.4.4, FIX.5.0, FIX.5.2 | 모든 FIX 및 REST/HTTP 주문에 걸쳐 797=Y 및 9406=Y(으)로 태그 지정된 실시간 통합 ExecutionReport (35=8) 스트림 | 읽기 전용 강제 (35=j 주문 거절) |
| 시세 데이터 (MD) | 9879 | FIX.4.2, FIX.4.4, FIX.5.0, FIX.5.2 | 실시간 L1/L2 Snapshot (35=W), IncrementalRefresh (35=X) 및 MarketDataRequestReject (35=Y) | 읽기 전용 강제 (35=j 주문 거절) |
버전 협상 및 회선 규칙
| FIX 버전 | BeginString (8) | Logon 태그 (35=A) | App Header 태그 | 거래 ExecType (150) | ExecTransType (20) 규칙 |
|---|---|---|---|---|---|
| FIX 4.2 | 8=FIX.4.2 | 없음 | 없음 | 150=1 (부분 체결), 150=2 (전량 체결) | 필수 (20=0 신규, 20=3 상태) |
| FIX 4.4 | 8=FIX.4.4 | 없음 | 없음 | 39=1/2 포함 150=F (체결) | 금지됨 (35=3, 371=20, 373=2(으)로 거절됨) |
| FIX 5.0 | 8=FIXT.1.1 | 1137=7 | 1128=7 | 39=1/2 포함 150=F (체결) | 금지됨 (35=3, 371=20, 373=2(으)로 거절됨) |
| FIX 5.2 (5.0 SP2) | 8=FIXT.1.1 | 1137=9 | 1128=9 | 39=1/2 포함 150=F (체결) | 금지됨 (35=3, 371=20, 373=2(으)로 거절됨) |
2. 세션 관리 및 HMAC-SHA256 로그온 (35=A)
모든 FIX 세션은 GaiaEx API Key(Tag 553), API Secret(Tag 554), 그리고 RawData (Tag 96)의 소문자 16진수 HMAC-SHA256 서명으로 인증되는 Logon (35=A) 프레임으로 시작됩니다.
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()| 태그 | 필드 이름 | 필수 | 설명 |
|---|---|---|---|
98 | EncryptMethod | Y | 0 = 없음 / TLS 전송 암호화 |
108 | HeartBtInt | Y | 하트비트 주기(초) (권장: 30) |
141 | ResetSeqNumFlag | N | Y = 시퀀스 번호를 1로 재설정, N = 당일 시퀀스 상태 유지 |
553 | Username | Y | GaiaEx API Key |
554 | Password | Y | GaiaEx API Secret |
96 | RawData | Y | 52|A|34|49|56에 대한 64자 16진수 HMAC-SHA256 서명 |
797 / 9406 | CopyMsgIndicator / DropCopyFlag | N | 읽기 전용 드롭 카피 세션을 등록하려면 797=Y, 9406=Y 또는 50=DROPCOPY(으)로 설정 |
1409 | SessionStatus | Out | 35=A / 35=5에서 반환: 0=활성, 4=로그아웃 완료, 5=인증 실패, 6=시퀀스 번호 낮음, 101=1억 시퀀스 한도 초과 |
갭 복구 (35=2 & 35=4) 및 연결 해제 시 취소 (CoD)
- 인바운드 갭 감지: 수신 메시지가
MsgSeqNum (34) > ExpectedSeqNum을(를) 포함하면 게이트웨이가 즉시ResendRequest (35=2, 7=ExpectedSeqNum, 16=0)을(를) 전송합니다.PossDupFlag (43=Y)없이MsgSeqNum (34) < ExpectedSeqNum인 경우 게이트웨이는Logout (35=5, 1409=6)을(를) 전송하고 소켓을 닫습니다. - 아웃바운드 재생: 클라이언트가
ResendRequest (35=2)을(를) 전송하면 게이트웨이는43=Y및122=OrigSendingTime과(와) 함께 모든 애플리케이션 메시지(드롭 카피35=8리포트 포함)를 재생하며, 관리 프레임은SequenceReset-GapFill (35=4, 123=Y)(으)로 병합합니다. - 자동 연결 해제 시 취소 (CoD): 주문 관리 세션의 연결이 끊어지면 해당 세션에서 제출된 모든 미체결 잔여 주문(
OrdStatus 39=0)이 자동으로 취소(150=4, 39=4, 103=3020)되며 활성화된 모든 드롭 카피 세션에 실시간으로 브로드캐스트됩니다.
3. 주문 접수, 정정, 취소 및 조회 (35=D, G, F, q, H, AN, XLQ)
NewOrderSingle (35=D)
| 태그 | 필드 이름 | 필수 | 지원 값 및 참고 사항 |
|---|---|---|---|
11 | ClOrdID | Y | 클라이언트가 부여한 고유 주문 식별자 (최대 31자) |
1 | Account | N | 자체 보관 볼트 주소 (0x...) 또는 서브계정 식별자 |
50 | SenderSubID | N | 트레이더 또는 전략 ID, 35=8의 TargetSubID (57)에 다시 에코되어 반환됨 |
55 | Symbol | Y | USDC 무기한 계약 (BTCUSDC, ETHUSDC, SOLUSDC), USDT 무기한 계약 (BTCUSDT, ETHUSDT), RWA 무기한 계약 (xyz:GOLD / GOLDUSDC, xyz:NVDA, xyz:TSLA) |
54 | Side | Y | 1 = 매수, 2 = 매도 |
38 | OrderQty | Y | 기초자산 기준 주문 수량 (소수점 4자리 정밀도 지원, 예: 0.0050) |
40 | OrdType | Y | 1 = 시장가, 2 = 지정가, 4 = 스탑 리밋 (99=StopPx 필수), p = 메이커 전용(Post-Only) (또는 18=6) |
44 | Price | C | 지정가 가격 (40=2, 40=4, 40=p에 필수) |
59 | TimeInForce | N | 1 = GTC (기본값), 3 = IOC, 4 = FOK, 5 = GTX |
544 | CashMargin | N | 1 = 현물 (기본값), 2 = 마진 오픈, 3 = 마진 청산 |
정정 (35=G), 취소 (35=F), 대량 취소 (35=q), 상태 (35=H), 포지션 (35=AN) 및 한도 (35=XLQ)
| MsgType | 메시지 이름 | 주요 요청 태그 | 게이트웨이 응답 |
|---|---|---|---|
35=G | OrderCancelReplaceRequest | 11=ClOrdID, 41=OrigClOrdID, 55=Symbol, 54=Side, 38=OrderQty, 44=Price | 150=5, 39=5(정정됨)가 포함된 35=8 또는 35=9 (434=2) |
35=F | OrderCancelRequest | 11=ClOrdID, 41=OrigClOrdID, 55=Symbol, 54=Side | 2단계 35=8: 150=6, 39=6 (취소 대기 중) → 150=4, 39=4 (취소 완료), 또는 35=9 (434=1) |
35=q | OrderMassCancelRequest | 11=ClOrdID, 530=7 (모든 주문 취소) | 35=r (1369=MassActionReportID, 531=7) + 취소된 주문당 1건의 35=8 (150=4, 39=4) |
35=H | OrderStatusRequest | 11=ClOrdID (또는 37=OrderID), 790=OrdStatusReqID | 150=I(주문 상태)가 포함된 35=8 또는 150=8, 103=5 (알 수 없는 주문) |
35=AN | RequestForPositions | 710=PosReqID, 724=0 (포지션), 1=Account, 55=Symbol | 721=PosMaintRptID, 728=0, 704=LongQty, 705=ShortQty, 730=SettlePrice이(가) 포함된 PositionReport (35=AP) |
35=XLQ | LimitQuery | 25003=ReqID | 25005=ORDERS(500/초) 및 25005=CONNECTIONS(계정당 20)이 포함된 LimitResponse (35=XLR) |
4. 실시간 드롭 카피 및 대사 (797=Y / 9406=Y)
드롭 카피는 프라임 브로커, 리스크 엔진 및 백오피스 대사 시스템에 FIX 주문 접수 세션과 REST/HTTP API 주문 전체에 걸친 모든 ExecutionReport (35=8) 이벤트의 실시간 읽기 전용 스트림을 제공합니다.
- 범용 구독 플래그:
9878포트에 연결하고797=Y(CopyMsgIndicator),9406=Y(DropCopyFlag) 또는50=DROPCOPY(SenderSubID)과 함께Logon (35=A)을(를) 전송하십시오. - 이중 태그 아웃바운드 스탬핑: 모든 드롭 카피
35=8프레임에는57=DROPCOPY,797=Y,9406=Y와(과) 함께 수수료/리베이트 내역 세부사항(381=GrossTradeAmt,1057=AggressorIndicator,136=1|137=MiscFeeAmt|138=MiscFeeCurr|139=4,20000=TradeFeeRebateAmt)이 포함됩니다. - 엄격한 읽기 전용 보호: 드롭 카피 세션에서
35=D,35=F,35=G또는35=q을(를) 제출하려는 시도는 즉시BusinessMessageReject (35=j, 380=4)(으)로 거절됩니다. - 시퀀스 갭 복구: 아웃바운드 드롭 카피 리포트는 세션 시퀀스 저장소에 영구 보관되며
PossDupFlag (43=Y)과(와) 함께ResendRequest (35=2)을(를) 통해 재생할 수 있습니다.
5. 시세 데이터 (35=V, W, X, Y) 및 참조 데이터 (35=x, y, h)
전용 시세 데이터 스트리밍을 위해 9879 포트에 연결하거나 SecurityListRequest (35=x)을(를) 통해 상품 사양을 조회하십시오.
- MarketDataRequest (
35=V):262=MDReqID,263=1(스냅샷 + 업데이트) 또는0(스냅샷),264=1(최우선 호가/Top of Book) 또는20(전체 호가 깊이/Full Depth), 그리고55=Symbol을(를) 전송하십시오.MarketDataSnapshotFullRefresh (35=W)에 이어MarketDataIncrementalRefresh (35=X)이(가) 반환됩니다. 알 수 없는 심볼은MarketDataRequestReject (35=Y, 281=0)을(를) 반환합니다. - SecurityListRequest (
35=x):320=SecurityReqID및559=0(55의 단일 심볼) 또는559=4(전체 상품)을 전송하십시오. 틱 크기(969=MinPriceIncrement), 최소/최대 주문 수량(8000/8001), 소수점 정밀도(8002/8003)가 포함된SecurityList (35=y)이(가) 반환됩니다. - TradingSessionStatus (
35=h):340=2(연중무휴 24x7x365 거래 가능) 또는340=1(거래 중단)을 반환합니다.
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