Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Table of Contents

...

  1. Install FIXEdge using these instructions: https://kb.b2bits.com/display/B2BITS/FIXEdge+Installation+Guide

  2. Create a database for ICE trades storing:
    1. Create a database itself. ‘ICE_Trades’ is suggested as the default name.

      Note

      Make sure that the parameter Server authentication of the SQL Server Database Engine is set to SQL Server and Windows Authentication mode.
      Change it, if necessary. For more information please refer to SQL Server technical manual.

    2. Create user login, database user and database tables using the ‘MSSQL_ICE_database.sql’ script – adjust it if necessary (database name, user, etc)
    3. Execute 'MSSQL_ICETrdCapt.sql', ,'MSSQL_ICEStrategies.sql', and 'MSSQL_ICESecDef.sql' scripts against the database to create stored procedures (adjust change the database name if necessary
    4. Add ODBC data source for the database on the server with installed FIXEdge

  3. Adjust FIXEdge configuration (typically located here ‘C:/B2BITS/FIXEdge/FIXEdge1/conf/’)
    1. ICE Handler property file (ICEProperties.properties)
      1. Specify a SenderCompID (Tag 49) for the ICESession.SenderCompID property
      2. If connecting to multiple FIX sessions, specify SenderSubIDs (Tag 50) for the ICESession.SenderSubID property
      3. Add Security Definitions subscriptions to the necessary markets using provided examples in the "Security Definition Subscriptions" section: 
        1. Add a security definition subscription name to the list in the ICESession.SecurityDefinitionSubscriptions property
        2. Specify SecurityID and CFICode for added security definition subscription as described in the property file comments
        Codes of ICE markets can be found at: https://www.theice.com/publicdocs/technology/Supported_Market_Types_on_ICE_API.pdf
      4. Add Define Strategy (UDS) subscriptions to the necessary markets using provided examples in the "Security Definition Subscriptions" section:
        1. Add a security definition subscription name to the list in the ICESession.UDSSubscriptions property
        2. Specify SecurityID  for added defined strategy subscription as described in the instruction below
          ICESession.UDSSubscriptions.<Subscription_Name>.SecurityID = ice_market_type_id

        Codes of ICE markets can be found at: https://www.theice.com/publicdocs/technology/Supported_Market_Types_on_ICE_API.pdf

        Info

        Defined Strategy (35=UDS) messages support is implemented in the ICE Trade Capture Solution (with DB Stored Procedures) based on FIXEdge 6.7.1

      5. Specify an appropriate value of the ICESession.SecurityDefinitionSubscriptions.RequestMode property 
        1. Two request modes are available: SecDefFirst and TradesFirst
          1. SecDefFirst (default) = Security Definition subscriptions are processed first. Trades processing follows once Security Definition processing is complete.
          2. TradesFirst = trades are processed first, and if configured, Security Definition subscription processing is executed simultaneously. 
        2. If you wish to receive SecurityDefinitions and UDS from p.ii iii only once a day, set ICESession.SecurityDefinitionSubscriptions.RequestMode = OnceADay
        3. If you wish to receive SecurityDefinitions and UDS from p.ii iii at each logon, set ICESession.SecurityDefinitionSubscriptions.RequestMode = EachLogon
      6. Specify a correct path in the ICESession.StorageFileName property.
    2. ‘BL_Config.xml’
      1. Make sure that all <History> entities point to the correct DSN, also adjust username and password if they are different from default ones
      2. Specify correct SenderCompID in the rule "Launch ICE Handler" at the line: <MatchMessage Value=".*PLACE YOUR SENDER COMP ID HERE.*" />
        E.g., if your SenderCompID is 1234, the rule will look like: <MatchMessage Value=".*1234.*" />

      3. Specify condition in the rules that should be executed for a session with a specific SenderSubID. If SenderSubID is 987, the condition will look like: <EqualField Field="57" Value="987" />
  4. Start FIXEdge via FIX Integrated Control Center (FIXICC)

...

  1. Review https://www.theice.com/publicdocs/technology/Supported_Market_Types_on_ICE_API.pdf and find the ICE Market Type ID you are interested in;
  2. Come up with the name for the subscription and specify it in the ICESession.SecurityDefinitionSubscriptions property (it supports several values delimited by comma).
  3. Add subscription details in the following format:
    ICESession.SecurityDefinitionSubscriptions.<Subscription_Name>.SecurityID = ice_market_type_id
    ICESession.SecurityDefinitionSubscriptions.<Subscription_Name>.CFICode = FXXXXX (for Futures) or OXXXXX (for Options) or OXXFXX (for Unique Option market IDs)

Warning

Parameter values SecurityDefinitionSubscriptions and UDSSubscriptions must be unique. Names of subscriptions should not be the same for receiving Security Definition response (35=d) and Defined Strategies (35=UDS) messages.

Below is the example of the subscription to the Atlantic Coal Futures market type. Market ID is 123. Let's say we are interested in options and the subscription name is ICEAtlanticCoalOptions:

...

Defined Strategies Subscriptions

Defined Strategy (35=UDS) messages support is implemented in the ICE Trade Capter Solution (with DB Stored Procedures) based on FIXEdge 6.7.1.  Receiving UDS messages is possible only when switching to New Security Definition interface. Make sure that the values for StrategyPreference(9006) tag equal to "1" in Logon (35=A) message for New Security Definition messages support. Also recommended to specify PublishMktCreationRealtime(9010)  tag equal to "1" in Logon (35=A) message for receiving in real-time the createddefined strategies during the trading session.

Info

See custom Logon in ICETC_Logon.msg file (typically located here ‘C:/B2BITS/FIXEdge/FIXEdge1/conf/’)

  1. Review https://www.theice.com/publicdocs/technology/Supported_Market_Types_on_ICE_API.pdf and find the ICE Market Type ID you are interested in;
  2. Come up with the name for the subscription and specify it in the ICESession.UDSSubscriptions property (it supports several values delimited by comma).
  3. Add subscription details in the following format:
    ICESession.UDSSubscriptions.<Subscription_Name>.SecurityID = ice_market_type_id
Warning

Parameter values SecurityDefinitionSubscriptions and UDSSubscriptions must be unique. Names of subscriptions should not be the same for receiving Security Definition response (35=d) and Defined Strategies (35=UDS) messages.

Below is the example of the subscription to the:

  • IPE Natural Gas Futures (Market ID is 3, subscription name is the ICEEuropeNaturalGas),  
  • IPE Gas Oil Futures (Market ID is 4, subscription name is the ICEEuropeGasOil),
  • IPE Brent Futures (Market ID is 5, subscription name is the ICEEuropeBrent)
    market type. 
Code Block
languagebash
titleSnippet from ICEProperties.properties
linenumberstrue
ICESession.UDSSubscriptions = ICEEuropeNaturalGas, ICEEuropeGasOil, ICEEuropeBrent
ICESession.UDSSubscriptions.ICEEuropeNaturalGas.SecurityID = 3
ICESession.UDSSubscriptions.ICEEuropeGasOil.SecurityID = 4
ICESession.UDSSubscriptions.ICEEuropeBrent.SecurityID = 5

...

How to make a new field from ICE Trade Capture FIX interface stored in the database

Download process is free from any FIXEdge specifics. Any changes can be done by modifying the proper stored procedure and data model.

In order to process new fields so that they can appear in the database, the following needs to be done:

  1. Check where the FIX tag you are interested in is located in the FIX message. Note that tags from repeating groups are allocated in the separate tables. Check ICE Trade Capture to Database for details.
    1. If the FIX tag is located in the root of the message (either Trade Capture Report or Security Definition), then add the coincident column to the ICEReports / ICESecurityDefinitions table
    2. If the FIX tag is located in one of the repeating groups which are already stored in the database, then add column to the corresponding table
    3. If the FIX tag is located in one of the repeating groups which are not stored in the database, then add a new table for the group and specify the required field there

  2. Add support for new fields in stored procedure (either SaveReports or SaveDefinitions depending on which fields you are going to add).

FIXEdge server restart is not required.

Example (for MS SQL Server):

...

Assume that tag 9707 (MiFIDID) from the Trade Capture Report message (MsgType = "AE") should be now stored in the database. Following the step-by-step instruction presented above:

  1. According to the ICE Trade Capture specification (see https://community.theice.com/docs/DOC-19796), MiFIDID is located in the root of the Trade Capture Report message (MsgType = "AE"). Add the new MiFIDID column with varchar (256) type to the ICEReports table.

    Code Block
    languagesql
    titleICEReports
    ALTER TABLE [ICEReports] ADD [MiFIDID] [varchar](256) NULL
  2. Then the SaveReports stored procedure should be adjusted:

    Code Block
    languagesql
    titleSaveReports
     INSERT INTO [ICEReports]
     (
      TradeReportID,
      SendingTime,
      .....  
      ClientIDCode,
      MiFIDID,                               -- new MiFIDID tag 
      ClientAppType
     )
     SELECT
      @ReportID,
      @SendingTime,
      .....
      C.value('f9706[1]', 'nvarchar(256)'),
      C.value('f9707[1]', 'nvarchar(256)'), -- new MiFIDID tag 
      @ClientAppType
     FROM @xmlData.nodes('/FIXMessage') as T(C)
     OPTION (OPTIMIZE FOR ( @xmlData = NULL ));


...

  1. Adjust ICE session host and port from FIXEdge.properties to point it to Production;
  2. Go through the steps from ICE Trade Capture FAQ#How to deploy the package and make it work and adjust your configuration to point it to Production;
  3. Turn off (comment out) the schedule for ICE TEST and turn on (uncomment) the schedule for ICE PROD environment in FIXEdge.properties. Use ICE Trade Capture FAQ#What is the ICE session schedule and how to setup it in ICE Trade Capture Solution as a reference;
  4. In case SSL connection is required for ICE Production environment (subject for clarification with ICE team), uncomment the following properties in FIXEdge properties:

    Code Block
    FixLayer.FixEngine.Session.ICESession.SSL = true
    FixLayer.FixEngine.Session.ICESession.SSLProtocols = TLSv1, TLSv1_1, TLSv1_2
  5. Turn off debug and trace levels of logging by changing values of appropriate properties in FIXEdge.properties to reduce the number of log records and hence reduce the size of log files;

    Code Block
    Log.DebugIsOn = false
    Log.TraceIsOn = false
  6. Configure logs rotation to manage the disk space where FIXEdge is installed;
  7. Setup email notifications to be informed in case of ICE session state is changed. Check How to configure session state changes notifications article for more details.

What is the Download Performance? 

While all the Trade Capture Reports are downloaded in real-time, the necessity to request the whole ICE markets in order to get desired instruments and the massive size of the security definition FIX messages lead to the question regarding the performance of security definitions download.

The performance of the download can vary and depends on the following factors (including, but not limited to):

  • number of ICE markets subscriptions
  • number of underlying instruments for each subscription
  • period of operation and volume of data already stored in the database
  • overall solution setup (e.g. are FIXEdge and database located on one server or on two different servers? are these servers located in one or different regions?)
  • network specifics

Our tests shows that performance can decrease with the increased volume of data stored in the database after some period of operation. To maintain high performance of the solution, it is recommended to clean the database and archive/purge old/unused data on a regular basis (e.g. once a week/month).

How can I know about ICE releases which affect the ICE Trade Capture Solution

...

Code Block
languagexml
titleadditional_ice.xml
...
<fixdic fixversion="4.4" title="ICE Trade Capture FIX 4.4" date="2018/11/16" id="FIX44">
..
Info

Date may be different

Replace the dictionary with a new one and restart FIXEdge.

...

ExecType(150) will not be sent on snapshot Trade Capture Reports. The value for ExecType(150) is set to "F" by ICE Trade Capture Solution when processing such messages. This value is stored in the database.


Info

See https://community.theice.com/docs/DOC-19796