Network & Connectivity Sequence Numbers Logon Failures Fill Reconciliation Order Rejects Latency & Timing Duplicate Orders Gap Fill & Resend
FIL 10 min read Troubleshooting

Fill Reconciliation

Diagnose missing, duplicate, or mismatched executions between your application and the broker or exchange.
Critical Warning
A healthy FIX session does not guarantee accurate executions.
Quick Triage
  • 1 Is the order missing, or just the execution? Confirm the order was accepted (39=0) before assuming a fill was lost. A rejected order produces no fills.
  • 2 Compare total filled quantity on both sides. Pull your CumQty and compare it to the broker's position. The difference tells you how many shares are unaccounted for.
  • 3 Match every ExecID (17). Build a list of ExecIDs from your logs and compare against the broker's list. A gap identifies the exact execution that was missed.
  • 4 Verify CumQty (14) progression. Each Execution Report should increase CumQty monotonically. A jump or repetition indicates a missing or duplicate message.
  • 5 Check for recent Resend Requests or Gap Fills. A session recovery during active trading is the most common cause of duplicate or missing executions.
  • 6 Compare Drop Copy if available. Drop Copy is an independent feed — if your order-entry session has a gap, Drop Copy may have the missing Execution Reports.
Common Problems
Symptom Likely Cause First Check
Missing execution Execution Report not received Session logs — look for a gap in inbound messages
Duplicate fill booked Resent message processed twice ExecID (17) and PossDupFlag (43)
Quantity mismatch Missing partial fill CumQty (14) progression across all Execution Reports
Broker shows more fills Session gap during trading Resend Requests and Gap Fill messages in session log
Client shows extra fill Duplicate processing of resent message ExecID uniqueness — same ID should only be booked once
Average price mismatch One execution missing from sequence Reconstruct AvgPx (6) from individual fill prices
Key Execution Report Fields

These are the fields used during reconciliation. Pull them for every 35=8 in the sequence.

17 (ExecID) unique identifier — primary deduplication key; never book the same ExecID twice
37 (OrderID) exchange-assigned order identifier — links executions back to the order
11 (ClOrdID) your client order ID — use alongside OrderID to identify which order was filled
150 (ExecType) 2 = Fill (FIX 4.2), F = Trade/fill (FIX 4.4+), 1 = Partial fill; filter for these when counting executions
32 (LastQty) shares filled in this specific execution
31 (LastPx) price of this specific execution
14 (CumQty) cumulative shares filled as of this message — should increase monotonically
151 (LeavesQty) shares still open; CumQty + LeavesQty should always equal the original order quantity
6 (AvgPx) running average execution price — recalculate manually if a fill is missing
Reading the Logs

Example 1 — Partial fill Execution Report:

35=8|150=1|39=1|17=ABC12345|32=100|31=185.50|14=300|151=700|
  • • 100 shares executed at 185.50 in this fill.
  • • CumQty is now 300 — this means 200 shares were filled in earlier Execution Reports. If your position shows less than 300, you are missing at least one prior execution.
  • • 700 shares remain open. CumQty + LeavesQty = 1000 — the original order quantity checks out.

Example 2 — Retransmitted Execution Report:

35=8|17=ABC12345|43=Y|122=20240714-13:45:22|
  • • PossDupFlag (43) = Y signals this message was retransmitted — it may have already been processed.
  • • ExecID = ABC12345 is the same as Example 1. If you already booked that ExecID, discard this message. Do not book another fill.
Recovery Checklist

Work through this in order. Do not adjust positions until step 8 confirms both sides match.

Fill Reconciliation — Recovery
5-Minute Diagnosis
Fill Reconciliation — TL;DR
  1. Who has more fills — you or the broker?
  2. Match ExecIDs — are there gaps or duplicates?
  3. Does CumQty tell the same story on both sides?
  4. Were there Resend Requests or Gap Fills during active trading?
  5. Compare Drop Copy before booking or removing any positions.