FIX Log Analyzer
Load a FIX log and get the numbers that matter for the whole log: message rates, orders and their outcomes, fill and reject rates, order latency, reject reasons and session health. Free, no sign-up, and it runs in your browser.
Your log never leaves your computer. Files are read, parsed and analysed in the browser; nothing is uploaded or sent to ZagTrader.
Preview
Messages
11,022
3 sessions
Time span
6 h 45 min
one trading day
Peak rate
62/s
busiest second
Orders
2,041
2,843 fills
Fill rate
75.4%
reject 0.9%
Ack p50
1.77 ms
p99 10.2 ms
Message rate over time
Messages per 5 min, stacked by category
SessionExecutionsOrder requestsRejects
Order outcomes
Final state of 2,041 orders
- Filled1,415
- Partly filled then cancelled or expired98
- Open and partly filled26
- Open37
- Cancelled415
- Expired or done for day32
- Rejected18
Top symbols
Filled quantity (LastQty 32)
- NVDA260.5K
- AAPL216.1K
- JPM207.9K
- AMZN203.9K
- KO183.4K
- XOM178K
Reject reasons
373, 103, 102 and 380 codes, ranked, each linked to how to fix it
- 103=99 Other5
- 102=0 Too late to cancel4
- 103=1 Unknown symbol2
- 103=3 Order exceeds limit2
- 103=13 Incorrect quantity2
Open this demo in the analyzer and click any bar to see the FIX messages behind it.
What the analyzer measures
Each statistic, how it is computed from FIX tags, an example from the demo log and how to read it.
- Message rateMessages per second, peak second and busiest minute, mix by MsgType and category, inbound and outbound.
- Order outcomesHow every order ended: filled, partly filled, cancelled, expired, rejected or open, with fill, reject and cancel rates.
- Execution analysisExecution Reports by ExecType (150), partial and full fills, and the fill-size distribution from LastQty (32).
- Trading activityVolume and traded value per symbol and currency, side, order type, time in force, venues, order-to-trade and cancel-to-fill.
- Order latencyNew order to ack, first fill, cancel and replace times, and Test Request to Heartbeat: p50, p90, p99 and max.
- Reject analysisSessionRejectReason, OrdRejReason, CxlRejReason and BusinessRejectReason ranked, Text (58) grouped, CheckSum and BodyLength errors.
- Session healthPer session: heartbeats, test requests, sequence gaps, resends and gap fills, resets, logons, logouts and the longest silence.
Inside the Analytics view
Message rate and mix
Messages per second and per minute through the day, stacked into order requests, executions, rejects and session messages; the busiest second and minute; every MsgType with inbound and outbound counts.
Orders and outcomes
New orders, replaces, cancels and mass cancels; each order followed through ClOrdID, OrigClOrdID and OrderID to its final state: filled, partly filled then cancelled, cancelled, expired, rejected or still open.
Fill, reject and cancel rates
Fill rate, reject rate and cancel rate per order, the order-to-trade ratio and the cancel-to-fill ratio, Execution Reports by ExecType, and the distribution of fill sizes.
Trading activity
Filled quantity and traded value (LastQty x LastPx) per symbol, kept apart per currency; orders by side, order type and time in force; fills by LastMkt and orders by ExDestination.
Order latency
New order to ack, new order to first fill, cancel and replace to confirmation, and Test Request to Heartbeat: p50, p90, p99 and max, a histogram and latency through the day, on the log clock, SendingTime or TransactTime.
Rejects and errors
SessionRejectReason, OrdRejReason, CxlRejReason and BusinessRejectReason codes ranked, reject texts grouped by wording, plus CheckSum, BodyLength and dictionary failures, each linked to a guide on how to fix it.
Session health
Per session: heartbeats, test requests, sequence gaps, resend requests and gap fills, logons with ResetSeqNumFlag, logouts and the longest silence, drawn on one timeline per session.
Click through to the messages
Every bar, point and marker opens the matching messages in the parser timeline, so a number on a chart is one click from the FIX messages behind it.
How to analyze a FIX log
- Open the analyzer and paste a log, or open or drop a .log, .txt, .fix, .gz or .zip file.
- Switch to Analytics. The key figures and charts appear for the whole log.
- Click a bar, a point or a session marker to see those messages in the timeline, then open any message to see every tag.
- Use Copy summary, Download report or CSV to share the results. Turn on Anonymise first if the log holds client details.
How privacy works
- The page downloads the analyzer once; after that, reading, parsing and analysing happen in your browser.
- The log is not uploaded. There is no server step and no analytics event that carries log content.
- Large logs run in a Web Worker, a background thread of the same page on your computer.
- Downloads are created in the browser. With Anonymise on, CompIDs, accounts, order and execution IDs and free text are replaced with placeholders.
- A share link keeps the log in the part of the address after #, which browsers never send to a server.
Frequently asked questions
How do I analyze a FIX log?
Open the analyzer, paste the log or open the file (.log, .txt, .fix, .gz or .zip) and switch to the Analytics view. The analyzer reads every message, follows each order and shows statistics and charts for the whole log. Click any bar or point to see the messages behind it in the timeline.
What statistics does the FIX log analyzer show?
Message counts and rates, the message type mix, sessions and FIX versions, order outcomes, fill, reject and cancel rates, order-to-trade and cancel-to-fill ratios, filled quantity and traded value per symbol and currency, orders by side, order type, time in force and venue, latency percentiles, ranked reject reasons and session health per session.
How is FIX order latency measured?
Ack latency is the time from a New Order Single (35=D) to the first Execution Report for that order. First fill is the time from the new order to its first fill. Cancel and replace latency run from the request to the Execution Report or Order Cancel Reject that answers it. You can measure on the log timestamp, SendingTime (52) or TransactTime (60); percentiles use the nearest-rank method.
How are order outcomes and the fill rate calculated?
Each order is followed through ClOrdID (11), OrigClOrdID (41) and OrderID (37). Its outcome comes from the last OrdStatus (39) in the log and whether it had fills. The fill rate is the share of orders with at least one fill; the order-to-trade ratio is new, replace and cancel requests per fill.
Is my FIX log uploaded?
No. The analyzer runs in your browser: the file is read, parsed and analysed on your computer and nothing you load is sent to ZagTrader or anyone else. Large logs are processed in a background thread of the page, not on a server.
How large a log can it analyze?
Logs of a few hundred thousand messages work in a current browser on a typical laptop. Large files are parsed and analysed in a background thread so the page stays usable, with a progress bar. Compressed .gz and .zip files are read directly.
Can I share the results with my team?
Yes. Copy summary gives a plain-text summary for a ticket or chat, Download report saves one HTML file with every table and chart that works offline and prints to PDF, and CSV exports the statistics tables. Turn on Anonymise to replace CompIDs, accounts, order IDs and free text with placeholders in all of them.
Which FIX versions does it support?
FIX 4.0 to FIX 4.4 and FIX 5.0 SP2 over FIXT.1.1, including logs that mix versions and sessions. Each session is counted separately by BeginString, SenderCompID and TargetCompID.
Related
FIX message parserFIX errors and how to fix themOrdRejReason (103) codesHeartbeat timeoutFIX guides
Running FIX at scale? ZagTrader monitors sessions and order flow across all your FIX connections from one OMS/EMS.