5041) with each update. Validating it confirms your local book is correctly synchronised with the exchange.
The checksum is always calculated over the top 10 price levels regardless of subscription depth. Process all updates in a message before calculating the checksum.
Book maintenance
Each entry in the Market Data Incremental Refresh carries an update action:Checksum calculation
Prices and quantities in the FIX feed are sent as floats. To compute the checksum correctly, you must first determine the precision for each instrument from an Security List Request.Step 1 — get instrument precision
Send a Security List Request for the instrument:The two fields you need for checksum calculation:
2349=1— price precision is 1 decimal place5010=8— quantity precision is 8 decimal places
Step 2 — subscribe and receive snapshot
Subscribe to Market Data for depth 10:Step 3 — calculate checksum on each incremental update
1
Apply the update
Apply all entries in the Market Data Incremental Refresh to your local book before calculating the checksum.
2
Build the asks string
For each of the top 10 ask price levels, sorted by price low to high:
- Format the price using the instrument’s price precision →
28013.0→"28013.0" - Remove
.→"280130" - Remove leading zeros →
"280130" - Format the quantity using the instrument’s quantity precision →
0.00096506→"0.00096506" - Remove
.→"000096506" - Remove leading zeros →
"96506" - Append
price + qtyto the asks string →"28013096506"
3
Build the bids string
For each of the top 10 bid price levels, sorted by price high to low, apply the same formatting and append to the bids string.
4
Concatenate and hash
Concatenate asks + bids strings, then pass the result to a CRC32 function. Cast the result to an unsigned 32-bit integer and compare to tag
5041 in the message.Example
Incremental update received:3341325816