Versions Compared

Key

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

Table of Contents

Is B2BITS ICE Private Order Feed certified by ICE

Yes, B2BITS ICE Private Order Feed is a certified software. You can find us among ICE Private Order Feed Vendors listed on the ICE website - https://www.theice.com/connectivity/private-order-feed-vendors.

What session details should be supplied by ICE?

The next session details should be supplied by ICE:

  • Username  (Tag 553)  
  • Password (Tag 96)
  • SenderCompID (Tag 49) - Company ID value for client request
  • UserType (Tag 9001) - indicates the type of POF Session: either '1' (Trading Firm) or '2' (Clearing Firm Company)

How to deploy the package and make it work

Follow the step-by-step instruction below:

Note

This instruction is sufficient to configure ICE Private Order Feed interface for test environment. Check "How to move ICE Private Order Feed configuration from Test to Production" to know how to configure it for production environment.

...

Table of Contents

Is B2BITS ICE Private Order Feed certified by ICE

Yes, B2BITS ICE Private Order Feed is a certified software. You can find us among ICE Private Order Feed Vendors listed on the ICE website - https://www.theice.com/connectivity/private-order-feed-vendors.

What session details should be supplied by ICE?

The next session details should be supplied by ICE:

  • Username  (Tag 553)  
  • Password (Tag 96)
  • SenderCompID (Tag 49) - Company ID value for client request
  • UserType (Tag 9001) - indicates the type of POF Session: either '1' (Trading Firm) or '2' (Clearing Firm Company)

How to deploy the package and make it work

Follow the step-by-step instruction below:

Note

This instruction is sufficient to configure ICE Private Order Feed interface for test environment. Check "How to move ICE Private Order Feed configuration from Test to Production" to know how to configure it for production environment.

  1. Install FIXEdge using these instructions: https://b2bits.atlassian.net/wiki/display/B2BITS/FIXEdge+Installation+Guide

  2. Create a database for ICE order events storing:
    1. Create a database itself. ‘ICE_POF’ 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 ‘ICE_POF_database.sql’ script – adjust it if necessary (database name, user, etc)

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

    Info
    All configuration files can be opened with any text editor (e.g. Notepad ++)
    1. Additional FIX dictionary 'additional_icepof.xml' must located in FIXEdge configuration directory
    2. Make changes to the ‘ICEPOF_Logon.msg’ configuration file:

      • Adjust tag UserType (9001) which indicates type of POF Session - either '1' (Trading Firm) or '2' (Clearing Firm Company) if necessary. 

        Default value specified in the package is '1'.

    3. Make changes to the ‘FIXEdge.properties’ configuration file: 
      1. For ‘ICEPOFSession’ specify SenderCompID, Username, Password. 
        By default the parameters are filled with dummy values / not filled
    4. Make changes to the ‘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 your SenderCompID in the rule "Rule to notify java script creating Historic Request about established ICE POF FIX session" at the line:

        <MatchMessage Value=".*147=\[NOTE\] SENDER_COMP_ID:ICE Established.*"/>

        E.g., if your SenderCompID is 1234, the rule will look like:

        <MatchMessage Value=".*147=\[NOTE\] 1234:ICE Established.*"/>


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

How to perform recovery and re-request order events from some period

ICE Private Order Feed Drop Copy Solution has built-in mechanism for requesting historic events in case of session/FIXEdge outage. By default it requests for order events starting from today's midnight on each FIX session start by means of ICEPofHistoryReq.js. If any duplicates are received, they will be discarded. 

In case of outage, just restart the FIXEdge and ICE Private Order Feed Drop Copy Solution will get missed messages from today's midnight. To request historic events for particular time period specify fields StartDate (916) and EndDate (917) in Custom History Request (MsgType = "UHR"). For that purpose the following changes in the JavaScript file ICEPofHistoryReq.js should be made:

Code Block
languagejava
titleICEPofHistoryReq.js
.....
  setStringField(9415, reqID);
  setStringField(109, sessionSender);
  setStringField(916, '20180522-00:00:00'); // StartDate (916) in 'YYYYMMDD-hh:mm:ss' format
  setStringField(917, '20180523-00:00:00'); // EndDate (917) in 'YYYYMMDD-hh:mm:ss' format
  send(sessionSender, sessionTarget, "Q1");
 }
 break; 
    }
.....

What is the ICE Private Order Feed behavior in case of the ICE session termination

  1. ICE Private Order Feed Drop Copy Solution determines that connection with ICE is lost.
  2. ICE Private Order Feed Drop Copy Solution tries to reconnect in accordance with the ReconnectMaxTries and ReconnectInterval session properties specified in the FIXEdge.properties.
  3. Once the connection is back, ICE POF Drop Copy Solution starts execution of the main flow from step 2.

What is the ICE session schedule and how to setup it in ICE Private Order Feed

According to ICE Prevate Private Order Feed specification, the maintenance window is presented here: Regular Trading & Support Hours (6:05pm - 6:55pm ET - weekday and Fri 6:05pm - Sun 5:00pm ET - weekend).

The schedule can be set in ICE Private Order Feed Solution by means of FIXEdge Scheduler properties or via FIXICC Scheduler functionality. Below is the example of how the ICE schedule for Production environment can be configured (applicable to FIXEdge 6.0 and higher):

Code Block
languagebash
titleSnippet from FIXEdge.properties
linenumberstrue
FixLayer.FixEngine.Session.ICEPOFSession.Schedule = ICEPOFFIXSchedule

FIXICC.Schedules = true

# Schedule for PROD ICE environment
Schedules.ICEPOFFIXSchedule.StartTime = 0 55 18 * * 2-5; 0 0 17 * * 1  
Schedules.ICEPOFFIXSchedule.TerminateTime =  0 5 18 * * 2-6
Schedules.ICEPOFFIXSchedule.TimeZone = EST5EDT
Info
These parameters are commented out for Test environment.

How to make a new field from ICE from ICE Private Order Feed FIX interface stored 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 Private Order Feed to Database for details.
    1. If the FIX tag is located in the root of the Execution Reports message, then add it to the ICEPOFReports history
    2. If the FIX tag is located in one of the repeating groups which are already stored in the database, then add it to the relevanthistory (to the ICEPOFReportsCombiDefinitions history as an example)
    3. If the FIX tag is located in one of the repeating groups which are not stored in the database, then add a new history for the group and specify the required field there

  2. Add new fields to ICEPofExecRpt.js file. Use BL Scripting with JavaScript for reference.
    Note that processing the values and recording them in the tables will be performed according to the order specified in the JS file.

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

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

Example:

Below is the example of how to add the new MiFID II related field to the ICE Private Order Feed so that it can be stored in the database.

Assume that tag 9707 (MiFIDID) from the ICE Private Order Feed Execution Report message (MsgType = "8") should be now stored in the database. Following the step-by-step instruction presented above:

  1. According to the ICE Private Order Feed specification (see https://community.theice.com/docs/DOC-19795), MiFIDID is located in the root of the Execution Report message (MsgType = "8").
    Then the ICEPOFReports history from the BL_Config file should be adjusted. Adding the new field to the ICEPOFReports history:

    Code Block
    languagexml
    titleSnippet from BL_Config
    <History Name="ICEPOFReports"
             StorageType="ODBC"
             MaxNumberOfRecords="15000"
             TableName="ICEPOFReports"
             ColumnSize="256"
             ConnectionString="DSN=ICE_POF;UID=pof_admin;Pwd=temp_pass;">
    <KeyField ColumnName="ExecID" ColumnSize="128">17</KeyField>
    .........
    <Field ColumnName="MiFIDID" ColumnSize="128">9707</Field>
    <Field ColumnName="MemberName" ColumnSize="128">5364</Field>
    </History>
  2. Add the processing of the new 9707 field to the ICEPofExecRpt.js:

    Code Block
    languagejs
    titleSnippet from ICETrdCapt.js
    ..........
    rootKey = new Array();
    rootData = new Array();
    rootSendingData = new Array();
    rootTags = new Array (37, 11, 41, 109, 56, 18, 115, 116, 144, 9415, 9139, 20, 19, 150, 39, 9175, 103, 38, 167, 201, 202, 210, 40, 44, 378, 1031, 9120, 9121, 9123, 9022, 9028, 9413, 9209, 828, 59, 77, 151, 14, 6, 32, 31, 669, 60, 442, 527, 548, 549, 439, 440, 916, 917, 9195, 9207, 9405, 9520, 9521, 9522, 9523, 9524, 9525, 9526, 58, 423, 99, 432, 126, 9527, 9065, 9066, 9067, 285, 693, 8013, 4329003, 1269208, 95279700, 90659701, 90669702, 90679703, 2859704, 6939705, 80139706, 90039707, 9208, 9700, 9701, 9702, 9703, 9704, 9705, 9706, 9707, 5364);
    ..........
  3. Add the new MiFIDID column with varchar (256) type to the ICEPOFReports table.

How to move ICE Private Order Feed configuration from Test to Production

In order to move your ICE Private Order Feed configuration to Production, several steps are required and/or recommended to be performed:

  1. Adjust ICE session host and port from FIXEdge.properties to point it to Production;
  2. Go through the steps from ICE Private Order Feed FAQ#How to deploy the package and make it work and adjust your configuration to point it to Production;
  3. Turn on (uncomment) the schedule for ICE PROD environment in FIXEdge.properties. Use ICE Private Order Feed FAQ#What is the ICE session schedule and how to setup it in ICE Private Order Feed 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.ICEPOFSession.SSL = true
    FixLayer.FixEngine.Session.ICEPOFSession.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.

How can I know about ICE releases which affect the ICE Private Order Feed

...

  1. 5364);
    ..........
  2. Add the new MiFIDID column with varchar (256) type to the ICEPOFReports table.

How to move ICE Private Order Feed configuration from Test to Production

In order to move your ICE Private Order Feed configuration to Production, several steps are required and/or recommended to be performed:

  1. Adjust ICE session host and port from FIXEdge.properties to point it to Production;
  2. Go through the steps from ICE Private Order Feed FAQ#How to deploy the package and make it work and adjust your configuration to point it to Production;
  3. Turn on (uncomment) the schedule for ICE PROD environment in FIXEdge.properties. Use ICE Private Order Feed FAQ#What is the ICE session schedule and how to setup it in ICE Private Order Feed 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.ICEPOFSession.SSL = true
    FixLayer.FixEngine.Session.ICEPOFSession.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.

How can I know about ICE releases which affect the ICE Private Order Feed

EPAM B2BITS team is constantly monitoring updates of ICE Private Order Feed interface. In case of any changes, 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.

How to use dictionary from ICE Private Order Feed Solution package based on FIXEdge 6.7.1 in previous versions

Replace <fixdic> tag from:

Code Block
languagexml
titleadditional_ice.xml
...
<fixdic id="FIX42ICEPOF" parent_id="FIX42" fixversion="4.2" title="ICE Private Order Feed FIX 4.2" date="2018/11/16" >
...

to:

Code Block
languagexml
titleadditional_ice.xml
...
<fixdic fixversion="4.2" title="ICE Private Order Feed FIX 4.2" date="2018/11/16" id="FIX42">
..
Info

Date may be different

Replace the dictionary with a new one and restart FIXEdge.