QuickFIX with FIX 5.0 SP2: FIXT.1.1, Transport and Application Dictionaries
Written and maintained by ZagTrader. Last reviewed . How this page is sourced and checked
A FIX 5.0 SP2 session is really two protocols: FIXT.1.1 for the session layer (Logon, Heartbeat, resends) and FIX 5.0 SP2 for the business messages. QuickFIX mirrors that split in its settings: one BeginString, a default application version and two dictionaries. Most setup errors come from treating it like a FIX 4.4 session.
The settings
[SESSION]
BeginString=FIXT.1.1
DefaultApplVerID=FIX.5.0SP2
SenderCompID=BUYSIDE
TargetCompID=SELLSIDE
SocketConnectHost=fix.example.com
SocketConnectPort=9876
HeartBtInt=30
UseDataDictionary=Y
TransportDataDictionary=FIXT11.xml
AppDataDictionary=FIX50SP2.xmlBeginString=FIXT.1.1. There is noFIX.5.0SP2BeginString.DefaultApplVerIDis required on FIXT.1.1 sessions in all three engines; without it the session does not start. Write it as a name (FIX.5.0SP2) or as the ApplVerID (1128) code (9). It goes out in DefaultApplVerID (1137) on the Logon.TransportDataDictionarychecks the header, trailer and session messages.AppDataDictionarychecks the business messages. LeaveDataDictionaryout; it is for FIX 4.x sessions.- If the counterparty uses a customised FIX 5.0 SP2 dictionary, point AppDataDictionary at their file and keep the standard FIXT11.xml for transport.
More than one application version on a session
A FIXT.1.1 session can carry messages of several application versions; each message that differs from the default says so in ApplVerID (1128) in its header. Give QuickFIX a dictionary for each version with a qualified setting name:
DefaultApplVerID=FIX.5.0SP2
AppDataDictionary=FIX50SP2.xml
AppDataDictionary.FIX.4.4=FIX44.xmlThe part after the dot is a BeginString-style version name. QuickFIX/J, QuickFIX/n and QuickFIX C++ all read this form.
Message classes
- QuickFIX/J 3.x: add
quickfixj-messages-fixt11andquickfixj-messages-fix50sp2. Without the FIXT artefact the session messages cannot be built. - QuickFIX/n: add the
QuickFIXn.FIXT11andQuickFIXn.FIX50SP2packages (names without the inner dot since 1.14). From 1.14.1 a missing package shows up in the log as a message factory error, and QuickFIX/n answers the counterparty with a Logout. - Handlers for FIX 5.0 SP2 messages use the
fix50sp2classes (QuickFIX/Jquickfix.fix50sp2, QuickFIX/nQuickFix.FIX50SP2, QuickFIX C++FIX50SP2). A handler written for the FIX 4.4 class is never called. See onMessage not called.
Errors and what they mean
| What you see | Likely cause |
|---|---|
| The engine stops at start asking for DefaultApplVerID | The FIXT.1.1 session has no DefaultApplVerID. |
| Logout with "Incorrect BeginString" | One side sends FIXT.1.1 and the other expects a FIX 4.x BeginString, or the other way round. |
| Logon rejected or ignored | The Logon has no DefaultApplVerID (1137) or names a version the counterparty does not support. See FIXT.1.1 and ApplVerID errors. |
| Reject 373=18 | A message carries an ApplVerID (1128) the receiver does not support. |
| Rejects for valid business fields | The application dictionary is FIX 4.4 or the standard FIX 5.0 SP2 file while the counterparty uses a customised one. |
Questions
- What BeginString does QuickFIX use for FIX 5.0 SP2?
- FIXT.1.1. The application version is set with DefaultApplVerID, for example FIX.5.0SP2 or the code 9.
- Can I use DataDictionary on a FIXT.1.1 session?
- Use TransportDataDictionary and AppDataDictionary instead. DataDictionary is the FIX 4.x setting.
- Which ApplVerID codes do FIX 5.0 versions use?
- 7 for FIX 5.0, 8 for FIX 5.0 SP1 and 9 for FIX 5.0 SP2.
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
- QuickFIX/J user manual: Configuration
- QuickFIX/J source: DefaultSessionFactory.java (required settings and defaults)
- QuickFIX/J README: runtime artefacts per FIX version
- QuickFIX/n documentation: Configuration
- QuickFIX/n source: SessionFactory.cs (required settings, dictionaries)
- QuickFIX/n release notes
- QuickFIX/n source: Session.cs (reject handling, sequence texts)
- QuickFIX C++ documentation: Configuration
- QuickFIX C++ source: SessionSettings.h (setting names)
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.
See also
More QuickFIX guides
- QuickFIX/J vs QuickFIX/n vs QuickFIX C++: Which One to Use
- QuickFIX Session Settings Explained: Configuration Reference
- Custom Fields and a Custom Data Dictionary in QuickFIX
- Repeating Groups in QuickFIX: Reading, Writing and Validation Errors
- QuickFIX Session Schedules: Daily vs Weekly Sessions, Time Zones and Sunday to Thursday Markets
- QuickFIX "Tag not defined for this message type": Causes and Fixes
- QuickFIX "Conditionally Required Field Missing": Why Your Handler Caused It
- QuickFIX "Incorrect data format for value": Field Types and Fixes
- QuickFIX "MsgSeqNum too low": Reset Sequence Numbers Safely and Fix the File Store
- QuickFIX Logon Problems: Session Not Found, CompID Mismatch and Rejected Logons
- QuickFIX SSL and TLS: Setup per Engine and Handshake Failures
- QuickFIX onMessage Not Called: Message Cracking Problems
- Reading and Analyzing QuickFIX Logs: messages.log and event.log