Versions Compared

Key

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

...

  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.

      Info

      Make sure that the Server authentication parameter 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 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/’).

    Multiexcerpt
    MultiExcerptNameICE TC Adjust FIXEdge configuration
    1. ICEProperties.properties file:
      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.
          Please refer to the document for codes of ICE markets.
      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_idPlease refer to the document for codes of ICE markets.

          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 ICESessionICESession.TradeCaptureSubscriptionsSecurityDefinitionaSubscriptions.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.iii only once a day, set ICESessionICESession.TradeCaptureSubscriptionsSecurityDefinitionaSubscriptions.RequestMode = OnceADay.
        3. If you wish to receive SecurityDefinitions and UDS from p.iii at each logon, set ICESession.TradeCaptureSubscriptionsset ICESession.SecurityDefinitionaSubscriptions.RequestMode = EachLogon.
        4. If you wish to receive SecurityDefinitions and UDS from p.iii on a scheduled basis, set ICESessionICESession.TradeCaptureSubscriptionsSecurityDefinitionaSubscriptions.RequestMode = Schedule.
      6. Specify a correct path in the ICESession.StorageFileName property.
    2. BL_Config.xml file:
      1. Make sure that all <History> entities point to the correct DSN, also adjust username and password if they are different from the default ones.
      2. Specify the 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).

How to set up the qualified ICE session

...

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.

...

Once the connection is back, ICE Trade Capture Solution starts execution of the main flow from:

ICESession.TradeCaptureSubscriptions.RequestMode: 

...

Info

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

...

The schedule can be set in ICE Trade Capture Solution by means of FIXEdge Scheduler properties or via FIXICC Scheduler functionality.

  • Below is an example of how the ICE schedule for the Production environment can be configured (applicable to FIXEdge 6.0 and higher):

    Code Block
    languagebash
    titleSnippet from FIXEdge.properties
    linenumberstrue
    FIXICC.Schedules = true
    
    # Schedule for PROD ICE environment
    Schedules.ICEFIXSchedule.StartTime = 0 30 19 * * *
    Schedules.ICEFIXSchedule.TerminateTime =  0 30 18 * * *
    Schedules.ICEFIXSchedule.TimeZone = EST5EDT
    
    FixLayer.FixEngine.Session.ICESession.Schedule = ICEFIXSchedule
  • Below is an example of how the ICE schedule for the test environment can be set up (applicable to FIXEdge 6.0. version and higher):

    Code Block
    languagebash
    titleSnippet from FIXEdge.properties
    linenumberstrue
    FIXICC.Schedules = true
    
    # Schedule for TEST ICE environment
    Schedules.ICEFIXSchedule.StartTime = 0 30 20 * * *; 0 0 15 * * 4
    Schedules.ICEFIXSchedule.TerminateTime =  0 5 18 * * *; 0 0 13 * * 4
    Schedules.ICEFIXSchedule.TimeZone = EST5EDT
    
    FixLayer.FixEngine.Session.ICESession.Schedule = ICEFIXSchedule
Info

Both schedules are already configured out-of-box. Need just to switch between them when moving from Test to Production.

How to configure obtaining SecDef and UDS on a scheduled basis

...

  • Below is an example of how the obtaining of SecDef on a scheduled basis can be configured (applicable to FIXEdge 6.14.0 version and higher):

    Code Block
    languagebash
    titleSnippet from FIXEdge.properties
    linenumberstrue
    ICESession.TradeCaptureSubscriptionsSecurityDefinitionaSubscriptions.RequestMode = Schedule
    ICESession.SecurityDefinitionSubscriptions = FinancialGas
    ICESession.SecurityDefinitionSubscriptions.FinancialGas.SecurityID = 0
    ICESession.SecurityDefinitionSubscriptions.FinancialGas.CFICode = FXXXXX
    ICESession.SecurityDefinitionSubscriptions.FinancialGas.Schedule = Schedule1
    Schedules.Schedule1.StartTime = 0 15 20 * * *

...

  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 separate tables. Check the /wiki/spaces/EPMBFIXA/pages/6043351 page 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 a 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 the stored procedure (either SaveReports or SaveDefinitions depending on which fields you are going to add).

...

  1. Adjust ICE session host and port from FIXEdge.properties to point it to Production.
  2. Go through the steps from the How to deploy the package and make it work instruction 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 the What is the ICE session schedule and how to setup it in ICE Trade Capture Solution instruction as a reference.
  4. In case of 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 the FIXEdge.properties file 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 the 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.

...

Check if FIXEdge subscribes for missing instrument data. Please refer to the:

If the subscription configuration is correct but there is still no data then raise a request to ICE. Usually, ICE asked details about subscriptions sent by the application that can be found in <SenderId>_<TargetId>_*.out log file as messages with 35=c (Security Definition Request (c)).

...

  • Check errors in the application logs (FIXEdge.log file). In case of database connectivity issues, there would be log records with ERROR severity with a description describing the cause of connectivity issues.
  • Check if the FIXEdge1/conf/additional_ice.xml file corresponds to the most recent version of ICE TC FIX Specification.

    Info
    titleadditional_ice.xml

    <fixdic id="FIX44ICETC" parent_id="FIX44" fixversion="4.4" title="ICE Trade Capture FIX 4.4 specification version 4.11" date="2021/02/12">

    The actual version of the specification can be found on the ICE official site Trade Capture (FIX) Technical Specification.
    In the case of using an obsolete FIX dictionary, there would be Reject (3) 35=3 messages in outgoing logs.

    Recommendations about manual dictionary modification can be found here: FIX and FIXML Dictionaries Customization Guide.
  • If FIXEdge receives the messages but they're still not inserted into the database
  • Check XML → DB conversion in DB schema. 
    The schema example is provided in the ICEFIXTCap-SP FIXEdge package in FIXEdge/DB_script directory.