Versions Compared

Key

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

...

  1. Install FIXEdge using these instructions: https://kb.b2bits.com/display/B2BITS/FIXEdge+Installation+Guide
    During the installation, point to attached license files

  2. Create a database for storing ICE trades storing:
    1. Create a database itself. ‘ICE_Trades’ is suggested as the default name.
    2. Create database tables using ‘ICEthe ‘ICE_database.sql’ script – adjust if it if necessary (database name, user, etc)
    3. Add ODBC data source for the database

  3. Adjust FIXEdge configuration (typically located here ‘C:/B2BITS/FIXEdge/FIXEdge1/conf/’)
    1. ICE Handler property file (ICEProperties.properties)
      1.  Specify SenderCompID for:
        1.   The ICESession property so that its final format is: SenderCompID[SOH]TargetCompID
        2. The ICESession.SenderCompID property
      2. 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 in the ICESession.SecurityDefinitionSubscriptions property
        2. Specify SecurityID and CFICode for added security definition subscription as described in property in the property file comments or in the instruction below
        Codes of ICE markets can be found at: https://www.theice.com/publicdocs/technology/Supported_Market_Types_on_ICE_API.pdf
      3. Specify an appropriate value of of the ICESession.SecurityDefinitionSubscriptions.RequestMode property 
        1. If you wish to receive SecurityDefinitions from p.ii only once a day, set ICESession.SecurityDefinitionSubscriptions.RequestMode = OnceADay
        2. If you wish to receive SecurityDefinitions from p.ii on at each logon, set ICESession.SecurityDefinitionSubscriptions.RequestMode = EachLogon
      4. Specify a correct path in ICESessionin the ICESession.StorageFileName property.
    2. Make changes to the ‘FIXEdge.properties’ configuration file:
      1. For ‘ICESession’ specify SenderCompID, your ICE Username and Password. Now By default the parameters are filled with dummy values / not filled
    3. ‘BL_Config.xml’
      1. Make sure that correct ICE Handler lib (Windows or Linux) and appropriate path is path are specified in the ICE Handler definition
      2. Make sure that all <History> entities point to the correct DSN, also adjust username and password if differthey are wrong
      3. Specify correct SenderCompID in the rule "Launch ICE Handler" in line 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.*" />
      4. Check the paths to to the ICETrdCapt.js and ICESecDef.js java scripts in rules 'Save ICE Trade Capture Report data and register trade in ICEHandler' and 'Save ICE Security Definition data and register secdef in ICEHandler' accordingly

  4. Start FIXEdge from FIXEdge via FIX Integrated Control Center (FIXICC)

How to subscribe to the particular ICE market?

ICE markets ICE Trade Capture Solution will subscribe to are specified in in the ICEProperties.properties configuration file.

In order to subscribe to the particular ICE market, follow the step-by-step instruction below:

  1. Look through 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 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)

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

Code Block
languagebash
titleSnippet from ICEProperties.properties
linenumberstrue
ICESession.SecurityDefinitionSubscriptions = ICEAtlanticCoalOptions
ICESession.SecurityDefinitionSubscriptions.ICEAtlanticCoalOptions.SecurityID = 123
ICESession.SecurityDefinitionSubscriptions.ICEAtlanticCoalOptions.CFICode = OXXXXX

To add a new ICE market, just repeat the steps 1-3 and update the ICEProperties.properties configuration fileLet's say we are interested in Singapore Energy futures (Market ID is 133) and subscription name is ICESingaporeEnergyFuturesthe ICESingaporeEnergyFutures:

Code Block
languagebash
titleSnippet from ICEProperties.properties
linenumberstrue
ICESession.SecurityDefinitionSubscriptions = ICEAtlanticCoalOptions, ICESingaporeEnergyFutures
# Atlantic Coal Futures
ICESession.SecurityDefinitionSubscriptions.ICEAtlanticCoalOptions.SecurityID = 123
ICESession.SecurityDefinitionSubscriptions.ICEAtlanticCoalOptions.CFICode = OXXXXX
# Singapore Energy
ICESession.SecurityDefinitionSubscriptions.ICESingaporeEnergyFutures.SecurityID = 133
ICESession.SecurityDefinitionSubscriptions.ICESingaporeEnergyFutures.CFICode = FXXXXX

...

After the session is started, ICE Trade Capture Solution populates tags 75 (TradeDate) and 60 (TransactTime) in the Trade Capture Report Request based on the date & time from the persistence file to request the snapshot of trades starting from the time when the latest trade was received.

Note

If the file is absent or empty, today's midnight will be specified by the ICE Trade Capture Solution as subscription the subscription start time. Otherwise, data stated in the file will be used (if the value is more than 2 days ago, it will be reset to today's midnight).

In order to re-request trades which were already received which have already been received earlier, just remove persistence remove the persistence file (ICE_persistStorage.out) or specify desired a desired date there (from which the snapshot of trades should be requested) and restart the session.

...

According to ICE Trade Capture specification, ICE holds trade capture data for last 2 business days only.

What is the ICE Trade Capture behavior in case of the ICE session termination?

  1. ICE Trade Capture Solution determines that connection with ICE is lost.
  2. ICE Trade Capture Solution considers the Trade Capture Report subscription terminated.
  3. ICE Trade Capture Solution tries to reconnect in accordance with the ReconnectMaxTries and ReconnectInterval session properties specified in FIXEdgethe FIXEdge.properties.
  4. Once the connection is back, ICE Trade Capture Solution starts execution of the main flow from:

    1. step 2, if ICESession.SecurityDefinitionSubscriptions.RequestMode = EachLogon is specified in the ICEProperties.properties

    2. step 4, if ICESession.SecurityDefinitionSubscriptions.RequestMode = OnceADay  is specified in the ICEProperties.properties

    Note

    Start time in Trade Capture Report Request (MsgType = "AD") will be populated based on the data stored in persistence in is specified in the persistence file (ICE_persistStorage.out).

What is the ICE session schedule and how to setup it in ICE Trade Capture Solution?

According to ICE the ICE specification, all FIX sessions will be reset by the ICE FIX host after every 24 hours, i.e. beginning at the beginning of the next trading day (during maintenance window between 6:30 PM to 7:30 PM EST/EDT).

...

Below is the example of how ICE the ICE schedule can be setup (applicable for applicable to FIXEdge 6.0 and higher):

Code Block
languagebash
titleSnippet from FIXEdge.properties
linenumberstrue
Schedules.ICEFIXSchedule.StartTime = 0 30 18 * * *
Schedules.ICEFIXSchedule.TerminateTime =  0 30 19 * * *
Schedules.ICEFIXSchedule.TimeZone = EST

FixLayer.FixEngine.Session.ICESession.Schedule =  ICEFIXSchedule

How to make a new field from ICE Trade Capture FIX interface

...

 stored in the database?

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

  1. Add new fields to the BL_Config file. Use Business Rules Guide#Histories for reference.
    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 FIX If the FIX tag is located in the root of the message (either Trade Capture Report or Security Definition), then add it to the ICEReports / ICESecurityDefinitions history
    2. If FIX If the FIX tag is located in one of the repeating groups which are already stored in the database, then add it to the corresponding history
    3. If FIX If the FIX tag is located in one of the repeating groups which are not stored in the database, then add the add a new history for the group and specify a specify the required field there

  2. Add new fields to the JS files (either ICESecDef.js or ICETrdCapt.js depending on which fields you are going to add). Use BL Scripting with JavaScript for reference.
    Note that processing the values and recording of the values to them in the tables will be performed according to the order specified in JS the JS file.

  3. Add new fields to the database according to the changes made in BL_Config on step Config at the step 1.

In order to apply the changes, you will need to restart the FIXEdge.

...

Below is the example of how to add the new MiFID II related field to the ICE Trade Capture Solution so that it can be stored in the database.

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 ICE 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").
    Then the ICEReports history from the BL_Config file should be adjusted. Adding the new field to the ICEReports history:

    Code Block
    languagexml
    titleSnippet from BL_Config
    <History Name="ICEReports"
    	StorageType="ODBC"
    	MaxNumberOfRecords="15000"
    	TableName="ICEReports"
    	ColumnSize="256"
    	ConnectionString="DSN=ICE_Trades;UID=ice_admin;Pwd=temp_pass;">
    <KeyField ColumnName="TradeReportID" ColumnSize="256">571</KeyField>
    ..........
    <Field ColumnName="MiFIDID" ColumnSize="256">9707</Field>
    <Field ColumnName="ClientAppType" ColumnSize="256">9413</Field>
    </History>
  2. Add the processing of new of the new 9707 field to the ICETrdCapt.js:

    Code Block
    languagejs
    titleSnippet from ICETrdCapt.js
    ..........
    rootData = new Array();
    rootTags = new Array(487,856,828,150,17,39,570,55,48,22,461,9403,202,916,917,32,31,75,60,9018,9022,552,555,1126,207,820,9820,9520,9521,9522,9523,9524,9525,9064,762,9510,...,9707/*,in code 9413*/);
    ..........
  3. Add new the new MiFIDID column with varchar (256) type to the ICEReports table.

How can I know about

...

ICE releases which affect the ICE Trade Capture Solution?

EPAM B2BITS team is constantly monitoring updates on of ICE. In case of any changechanges, the impact on the solution is assessed. If the change is critical and it affects the solution, a new version of the software is released and distributed to the clients in advance.