Reported July 2026
Virtu Financialhash table

FIX Message Reconciliation

Reported by candidates from Virtu Financial's online assessment. Pattern, common pitfall, and the honest play if you blank under the timer.

Get StealthCoderRuns invisibly during the live Virtu Financial OA. Under 2s to a working solution.
Founder's read

Virtu Financial reportedly served up a FIX Message Reconciliation question in July 2026, and it looks scarier than it is. Two pipe-delimited strings, four required tags, one verdict. There's no graph, no DP, no clever math. It's string parsing plus a hash map, and the whole thing is about not tripping on details. If you blank on the parsing, StealthCoder can sit invisibly on your screen during the live OA as a safety net. But you probably won't need it once you see the shape.

The problem

In financial trading systems, FIX (Financial Information eXchange) messages are represented as tag=value fields separated by the pipe character |, which stands in for the SOH delimiter.
Given one House FIX message houseMessage and one Street FIX message streetMessage, compare these required tags:
32: Order Quantity
31: Price
54: Side, where 1 means Buy and 2 means Sell
48: Security ID
Return "True" if both messages contain all four required tags and the raw value string for every required tag matches exactly. Return "False" otherwise.
The order of fields and any tags outside the required set do not affect the result.

Function
reconcileFixMessages(houseMessage: String, streetMessage: String) → String

Examples
Example 1
houseMessage = "8=FIX.4.4|11=ORD001|48=AAPL|54=1|32=1000|31=150.50|"
streetMessage = "8=FIX.4.4|11=ORD001|48=AAPL|54=1|32=1000|31=150.50|"
return = "True"
The required values match exactly: 32=1000, 31=150.50, 54=1, and 48=AAPL.
Example 2
houseMessage = "32=250|31=99.00|54=2|48=MSFT|"
streetMessage = "48=MSFT|10=abc|54=2|31=99.00|32=250|"
return = "True"
The required values match even though their field order differs and the Street message contains the unrelated tag 10.
Example 3
houseMessage = "32=250|31=99.0|54=2|48=MSFT|"
streetMessage = "32=250|31=99.00|54=2|48=MSFT|"
return = "False"
The Price values 99.0 and 99.00 are numerically equal but are not exact string matches.

Constraints
houseMessage and streetMessage are non-empty.
Each message is a sequence of well-formed tag=value fields separated by |.
A message may end with a trailing |.
Each tag appears at most once within a message.

Reported by candidates. Source: FastPrep

Pattern and pitfall

The trick is that brute force never comes up. Each message is a flat list of tag=value fields, and each tag appears at most once. Split on |, skip empty pieces from the trailing pipe, split each field on the first = sign, and store the pairs in a hash map. Then loop over the four required tags: 32, 31, 54, 48. If any tag is missing from either map, return False. If the raw strings differ, return False. Otherwise return True. Time is linear in message length. The big pitfall is Example 3: 99.0 and 99.00 must fail, so never parse to float. Compare strings exactly. Also return the strings "True" and "False", not booleans. If you freeze on edge cases mid-OA, StealthCoder is the hedge that gets you a clean version fast.

Drill it cold or hedge it with StealthCoder. Either way, don't walk into the OA hoping you remember the trick.

If this hits your live OA

You can drill FIX Message Reconciliation cold, or you can hedge it. StealthCoder runs invisibly during screen share and surfaces a working solution in under 2 seconds. The proctor sees the IDE. They don't see what's behind it. Made for the candidate who got the OA invite this morning and has 72 hours, not six months.

Get StealthCoder

Related leaked OAs

⏵ The honest play

You've seen the question. Make sure you actually pass Virtu Financial's OA.

Virtu Financial reuses patterns across OAs. Made for the candidate who got the OA invite this morning and has 72 hours, not six months. Works on HackerRank, CodeSignal, CoderPad, and Karat.

FIX Message Reconciliation FAQ

How hard is the Virtu Financial FIX Message Reconciliation problem really?+

Easy. It's string splitting and dictionary lookups. The difficulty is purely in the details: trailing pipes, missing tags, and exact string comparison. If you've parsed key=value strings before, you can finish it in a few minutes and spend the rest on edge cases.

What's the trick to solving it?+

Build a map of tag to value for each message, then compare only tags 32, 31, 54 and 48. Ignore everything else and ignore field order. Compare the raw value strings, never numbers. That one rule handles the 99.0 versus 99.00 case.

Should I convert price and quantity to numbers?+

No. The problem says the raw value string must match exactly. Example 3 shows 99.0 and 99.00 must return False even though they're numerically equal. Parsing to float or int would give you the wrong answer on exactly that kind of test.

What edge cases should I test before submitting?+

Test a trailing pipe, which creates an empty last piece when you split. Test a message missing one of the four required tags, in either house or street. Test reordered fields and extra unrelated tags. Also confirm you return the strings "True" and "False" in that capitalization.

How do I prepare for this in 48 hours?+

Write the solution once from scratch in your OA language. Practice splitting on a delimiter, splitting each piece on the first equals sign, and filling a hash map. Then run the three examples by hand. That's enough for this problem, since the pattern is simple parsing.

Problem reported by candidates from a real Online Assessment. Sourced from a publicly-available candidate-aggregated repository. Not affiliated with Virtu Financial.

OA at Virtu Financial?
Invisible during screen share
Get it