ICE Trade Capture Solution FAQ

ICE Trade Capture Solution FAQ

Is B2BITS ICE Trade Capture Solution certified by ICE?

Yes, B2BITS ICE Trade Capture Solution is certified software. You can find us among ICE Trade Capture Vendors listed on the ICE website - https://www.theice.com/connectivity/trade-capture-vendors.

How to deploy the package and make it work

Follow the step-by-step instruction below:

  1. Install FIXEdge using the guide.

  2. Create a database for ICE trades storing:

    1. Create a database itself. ‘ICE_Trades’ is suggested as the default name.

    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 or 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/’).

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

How to set up the qualified ICE session

Availability

The qualified ICE sessions are available starting from the FIXEdge 6.11.0 version.

When ICE provides several connections to the same sender, these connections are distinguished by means of SenderSubID. It should be specified as follows: 

  1. For each qualified session, you need to declare the separate ICE Handler in the BL_Config.xml:

    BL_Config.xml

    .......... <DllHandlers> <Handler Name="ICEHandler" Description="ICE Handler" DllName="libICEHandler-MD-x64.so" VerifyHandlersVersion="true" ConfigFile="../FIXEdge1/conf/Separate_ICEProperties.properties" /> .......... </DllHandlers> ..........
  2. In the ICE Handler property file (ICEProperties.properties):

    ICEProperties.properties

    # ============ YOU NEED TO FILL SENDER COMP ID IN THE FOLLOWING PROPERTIES: START ============= #ICE Session SenderCompID ICESession.SenderCompID = ***as supplied by ICE*** #ICE Session SenderSubID (session qualifier) # This parameter is optional and to be used when ICE provides more than one connection for one Sender ICESession.SenderSubID = ***as supplied by ICE*** # ============= YOU NEED TO FILL SENDER COMP ID IN THE FOLLOWING PROPERTIES: END ==============

How to subscribe to the particular ICE market

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

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

Security Definition Subscriptions

  1. Review the document 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 a 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).

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 an example of the subscription to some ICE market type #1. The Market ID is 123. Let's say we are interested in options and the subscription name is SecDefSubscription1:

Snippet from ICEProperties.properties
ICESession.SecurityDefinitionSubscriptions = SecDefSubscription1 ICESession.SecurityDefinitionSubscriptions.SecDefSubscription1.SecurityID = 123 ICESession.SecurityDefinitionSubscriptions.SecDefSubscription1.CFICode = OXXXXX

To add a new ICE market, just repeat steps 1-3 and update the ICEProperties.properties configuration fileLet's say we are interested in some ICE market type #2 (Market ID is 133) and the subscription name is the SecDefSubscription2:

Snippet from ICEProperties.properties
ICESession.SecurityDefinitionSubscriptions = SecDefSubscription1, SecDefSubscription2 # SecDefSubscription1 ICESession.SecurityDefinitionSubscriptions.SecDefSubscription1.SecurityID = 123 ICESession.SecurityDefinitionSubscriptions.SecDefSubscription1.CFICode = OXXXXX # SecDefSubscription2 ICESession.SecurityDefinitionSubscriptions.SecDefSubscription2.SecurityID = 133 ICESession.SecurityDefinitionSubscriptions.SecDefSubscription2.CFICode = FXXXXX

Defined Strategies Subscriptions

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

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

  1. Review the document and find the ICE Market Type ID you are interested in according to the How to identify ICE Market Type for ICE Product instruction.

  2. Come up with the name for the subscription and specify it in the ICESession.UDSSubscriptions property (it supports several values delimited by a comma).

  3. Add subscription details in the following format: ICESession.UDSSubscriptions.<Subscription_Name>.SecurityID = ice_market_type_id.

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 an example of a subscription to several market types:

  • ICE Market #3 (Market ID is 3, subscription name is the ICEMarket3)  

  • ICE Market #4 (Market ID is 4, subscription name is the ICEMarket4)

  • ICE Market #5 (Market ID is 5, subscription name is the ICEMarket5)

Snippet from ICEProperties.properties
ICESession.UDSSubscriptions = ICEMarket3, ICEMarket4, ICEMarket5 ICESession.UDSSubscriptions.ICEMarket3.SecurityID = 3 ICESession.UDSSubscriptions.ICEMarket4.SecurityID = 4 ICESession.UDSSubscriptions.ICEMarket5.SecurityID = 5

How to identify ICE Market Type for ICE Product

Please refer to the ICE official site or ICE Support to inquire about the ICE product codes.

How to perform recovery and re-request trades from some period

ICE Trade Capture Solution has inbuilt abilities to restore the trade data missed due to the outage. Basic recovery mechanism is based on the persistence file (ICE_persistStorage.out), where the date & time of the last received trade are preserved with the time accuracy received in the incoming message.

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 (see LastTransactTime field) from the persistence file to request the snapshot of trades starting from the time when the latest trade was received.

If the file is absent or empty, ICE Trade Capture Solution will request the snapshot of trades from the last 2 days starting from the "current" time (in UTC). Otherwise, the data stated in the file will be used.

In order to re-request trades that have already been received earlier, just remove the persistence file (ICE_persistStorage.out) or specify the desired time in a LastTransactTime field (from which the snapshot of trades should be requested) and restart the session. Keep in mind the how long ICE keeps trade records instruction when specifying LastTransactTime in ICE_persistStorage.out.

The name of the ICE storage file is specified in ICEProperties.properties:

ICESession.StorageFileName = ../FIXEdge1/log/ICE_persistStorage.out