How to use custom dictionaries with FIXEdge

A new format of Version property is available since FIXEdge 5.9.

Preparing a custom dictionary

Examples of dictionary modifications can be found in the FIX and FIXML Dictionaries Customization Guide.

Protocol customizations in FIX Antenna based products can be done as:

  1. Basic standalone dictionaries - the dictionaries describing a full list of the tags, messages, and message structure
  2. Additional dictionaries - the dictionary containing only incremental changes and updates for the basic dictionaries. An additional dictionary requires a basic one with a full message structure description. Using additional dictionaries is a convenient way to support FIX protocol customizations that slightly differ from the FIX standard.

Examples of the basic and additional dictionaries can be found in FIX Antenna or FIXEdge packages.

Create a standalone dictionary

  1. Pick the required FIX version (FIX.4.4, FIXT.1.1, FIX.5.0.SP2, FIXLatest etc)

    Get corresponded common dictionary file (fixdic44.xml, fixdict11.xml, fixdic50sp2.xml, fixdiclatest.xml, etc.) and save it with a new name e.g. fixdic44Custom.xml

    QuickFIX formatted dictionaries use a capitalized file name without an extension at the end as a dictionary ID.

  2. Change dictionary id, E.g. to FIX44Custom :

    before:

    fixdict44Custom.xml
    <fixdic xmlns="http://www.b2bits.com/FIXProtocol" 
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xsi:schemaLocation="http://www.b2bits.com/FIXProtocol fixdic.xsd"
            id="FIX44" 
            fixversion="4.4" 
            title="FIX 4.4 (with errata 20030618)" 
            version="1.5.19" 
            date="2013-03-14">

    after:

    fixdict44Custom.xml
    <fixdic xmlns="http://www.b2bits.com/FIXProtocol" 
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xsi:schemaLocation="http://www.b2bits.com/FIXProtocol fixdic.xsd"
            id="FIX44Custom" 
            fixversion="4.4" 
            title="FIX 4.4 (with errata 20030618)" 
            version="1.5.19" 
            date="2013-03-14">
  3. add other modifications if they are needed.

Create an additional dictionary modifying all sessions using a specified version

Modifications from the additional dictionaries can be applied to all sessions with the certain FIX Protocol version

The example below shows how to apply a dictionary to all sessions using version FIX44

additional.xml
<fixdics>
    <update>
        <fixdic 
            id="FIX44" 
            fixversion="4.4" 
            title="Custom fields FIX 4.4" 
            date="2015/01/25">
            <fielddic>
                <fielddef tag="1003" name="TradeID" type="String"/>
            </fielddic>
              <msgdic>
                <msgdef msgtype="AE" name="Trade Capture Report">
                    <field tag="1003" name="TradeID" req="Y"/>
                </msgdef>
            </msgdic>
        </fixdic>
    </update>
</fixdics>

Here are attributes id="FIX44" fixversion="4.4" determine basic version of FIX protocol for modification

Create an additional dictionary modifying only to specified sessions

Modifications from the additional dictionaries can be applied only for specific sessions and the FIX Protocol for the basic dictionary remains unchanged so the rest sessions wouldn't be affected by dictionaries customization.

The example below shows how to define a custom version of protocol FIX44 - FIX44Custom and do not affect sessions that use version FIX44:

additional.xml
<fixdics>
    <update>
        <fixdic 
            id="FIX44Custom" 
            parent_id="FIX44"
            fixversion="4.4" 
            title="Custom FIX 4.4" 
            date="2015/01/25">
            <fielddic>
                <fielddef tag="1003" name="TradeID" type="String"/>
            </fielddic>
              <msgdic>
                <msgdef msgtype="AE" name="Trade Capture Report">
                    <field tag="1003" name="TradeID" req="Y"/>
                </msgdef>
            </msgdic>
        </fixdic>
    </update>
</fixdics>

Here are the attributes:

  • id="FIX44Custom" - Version name defined by the user that should be used as Version parameter for the session.
  • parent_id="FIX44"  fixversion="4.4" - reference to basic FIX protocol version

Register the custom dictionaries in the configuration.

Add paths to custom dictionaries files to DictionariesFilesList property in the engine.properties file

QuickFIX formatted dictionaries use a capitalized file name without an extension at the end as a dictionary ID.

for a standalone version of dictionaries

engine.properties
# This parameter contains semicolon separated list of names of the XML files with definitions and extensions of the FIX protocols.
DictionariesFilesList = fixdic42.xml;fixdic44Custom.xml

or for a variant with additional dictionaries

engine.properties
# This parameter contains semicolon separated list of names of the XML files with definitions and extensions of the FIX protocols.
DictionariesFilesList = fixdic42.xml;fixdic44.xml;additional.xml
By default in FIXEdge, the dictionaries are located in FIXEdge1/conf directory.

Define custom parsers for sessions

Custom parsers are used in case if the customization for certain sessions should be applied to the basic dictionary.

Add definitions of parsers to AdditionalParsersList property in engine.properties file

e.g.

# List of additional protocols id's that require to register parsers
# Format of each value divided by semicolon: [UNIQUE_PARSER_NAME@][FIXT_PROTOCOL1:]APP_PROTCOL1[,APP_PROTCOL2...]
# Example if you have FIX44Custom dictionary:
AdditionalParsersList = FIX44Custom

In the case of modification FIX50+ protocols, a transport-level protocol can be also specified in the parser name. 

The format is the following: [UNIQUE_PARSER_NAME@][FIXT_PROTOCOL1:]APP_PROTCOL1[,APP_PROTCOL2...]

AdditionalParsersList = CustomParserName1@FIXT11:FIX50Custom

Configure FIX session to use a custom dictionary

Modify the Version property of the session in the configuration.

in FIXEdge.properties for FIXEdge

FixEdge.properties
# # Format of each value divided by semicolon: [UNIQUE_PARSER_NAME@][FIXT_PROTOCOL1:]APP_PROTCOL1[,APP_PROTCOL2...]
# FixLayer.FixEngine.Session.<SessionName>.Version = [<TransportDictionaryID>:]<ApplicationDictionaryID>
FixLayer.FixEngine.Session.TestFIXAcceptor1.Version = FIX44Custom
FixLayer.FixEngine.Session.TestFIXAcceptor2.Version = FIXT11Custom:FIX50Custom

in engine.properties for FIX Antenna C++

engine.properties
Session.Sender/Target.ParserVersion = FIX44Custom
Session.Default.ParserVersion = CustomParserName1@FIXT11:FIX50Custom

Please be aware that all changes in FIXEdge.properties file will be applied only after the FIXEdge server restart.

Default custom version of the FIX protocol for the session

The value of the default custom version is specified in the DefaultCstmApplVerID <1408> field of the Logon message. Its value can be configured in FIXEdge.properties via the Version property - the first custom version in the list will be considered the default one and its value will be set for the DefaultCstmApplVerID <1408> field of the Logon message.

Please be aware that the value of the default custom version of the FIX protocol should meet the counterparty's requirements. Otherwise, the Logout message will be received and the session connection process will be terminated.