ZagTrader

QuickFIX "Incorrect data format for value": Field Types and Fixes

Written and maintained by ZagTrader. Last reviewed . How this page is sourced and checked

QuickFIX converts each incoming field according to the type its data dictionary gives the tag. If the conversion fails, the message gets a Reject with 373=6 and the tag in RefTagID (371). The value is usually close to right: a timestamp in ISO style, a comma in a price, true instead of Y.

What QuickFIX accepts per type

Dictionary typeAcceptedRejected, for example
UTCTIMESTAMP20261020-09:30:00, optionally with .123, .123456 or more digits2026-10-20T09:30:00Z, 20261020 09:30:00
PRICE, QTY, AMT, FLOAT, PERCENTAGEDigits with one optional dot and an optional leading minus187,50, +187.5, 1.875E2, 1 000
INT, SEQNUM, LENGTH, NUMINGROUPWhole numbers100.0
BOOLEANY or Ntrue, 1, y
CHAR (FIX 4.1 and later)One character10, an empty value
UTCDATEONLY, UTCTIMEONLY20261020, 09:30:002026-10-20

The rules for prices are the ones QuickFIX/J applies in its converter; QuickFIX/n and QuickFIX C++ apply the same kind of check. An empty value is a different error: 373=4, unless ValidateFieldsHaveValues=N.

Usual causes

  • Timestamps written with a general date library instead of the FIX format, or in local time with a zone suffix. Both SendingTime (52) and TransactTime (60) must be UTC in YYYYMMDD-HH:MM:SS(.sss).
  • Numbers formatted with the server's locale. A price written with the current culture can come out as 187,50. Format FIX numbers with an invariant locale.
  • Timestamp precision. A sender with nanosecond precision talks to a receiver that only accepts milliseconds. In QuickFIX/J set TimeStampPrecision=MILLIS; in QuickFIX/n TimestampPrecision=Milliseconds.
  • A custom field whose type in your dictionary differs from what the counterparty sends, for example INT for an ID that contains letters. Change the type to STRING in your dictionary.

Fix it

  1. Take the tag from RefTagID (371) (or from the QuickFIX event line Reject sent for message N: Incorrect data format for value:TAG).
  2. Paste the rejected message into the parser to see the value next to the field's type for your FIX version.
  3. If you sent it, fix the formatting in your code or the precision setting. If you received it and the value is valid for the counterparty, fix the type in your dictionary.

Questions

What timestamp format does QuickFIX expect?
UTC as YYYYMMDD-HH:MM:SS, optionally with fractional seconds after a dot. No T, no Z and no time zone offset.
Does QuickFIX accept true and false for boolean fields?
No. FIX booleans are Y and N.

The FIX side of the problem

What the error means on any FIX engine, with example messages you can open in the parser:

Reference

Sources

  1. QuickFIX/J source: DataDictionary.java (field checks)
  2. QuickFIX/J user manual: Configuration
  3. QuickFIX/n documentation: Configuration
  4. QuickFIX C++ documentation: Validation
  5. QuickFIX C++ source: Session.cpp (reject handling, sequence texts)

Setting names, defaults and message texts were checked against the projects' source code and documentation on the review date shown at the top of the page. Behaviour can change between releases; check the version you run. This guide is independent and not affiliated with the QuickFIX projects.

More QuickFIX guides