Page tree
Skip to end of metadata
Go to start of metadata

Preface

B2BITS' FIX ICE Trade Capture Solution is a server application pre-configured to work with ICE Trade Capture FIX interfaceICE Trade Capture Solution design is based on B2BITS' generic server FIXEdge extended with the ICE handler. It inherits and leverages all FIXEdge features including easy configuration, administration and monitoring. 

Workflow Overview

1. Supported FIX Messages

ICE Trade Capture data is captured by FIXEdge via FIX 4.4 session with use of ICE Handler. The ICE Trade Capture Solution supports the following FIX messages: 

  • From ICE Trade Capture Solution to ICE:
    • Security Definition Request (MsgType = ''c");
    • Trade Capture Report Request (MsgType = ''AD")
  • From ICE to ICE Trade Capture Solution:
    • Security Definition (MsgType = ''d");
    • Trade Capture Report Request Ack (MsgType = ''AQ");
    • Trade Capture Report (MsgType = ''AE").

Trade Capture data will start flowing in right after successful subscription. 

2. ICE Trade Capture Solution Workflow

See also step-by-step description below:

Main flow:

  1. ICE Trade Capture Solution starts and establishes FIX Session to ICE Trade Capture using details from FIXEdge.properties file
  2. Once session is established ICE Trade Capture Solution generates Security Definition Request (MsgType = 'c') using information stated in ICEProperties.properties file and sends it to ICE Session
    FIX message example 8=FIX.4.4|9=100|35=c|49=SenderCompId|56=ICE|34=77|50=1|52=20140915-19:32:54.954|320=1410809574952_76|321=0|48=1|461=FXXXXX|10=043|
  3. ICE Trade Capture determines that request parameters are valid and replies with Security Definition (MsgType = 'd') messages.
  4. ICE Trade Capture Solution generates Trade Capture Report Request (MsgType = 'AD') for all available data or filtered subscription (if defined in ICEProperties.properties file) and sends it to ICE Session
    FIX message example8=FIX.4.4|9=129|35=AD|49=SenderCompId|56=ICE|34=78|50=1|52=20140915-19:32:54.954|568=1410809574953_77|569=0|263=1|580=1|75=20140915|60=20140915-00:00:00|10=228|
  5. ICE Trade Capture determines that subscription parameters are valid and sends Trade Capture Report Request Ack (MsgType = 'AQ') with tags 749=0 (Success) and 750 = 0 (Accepted) confirming successful subscription.
    FIX message example8=FIX.4.4|9=104|35=AQ|49=ICE|34=165|52=20141001-23:32:24.029|56=SenderCompId|568=1410809574952_76|569=0|749=0|750=0|10=178|
  6. ICE Trade Capture sends Snapshot of trades - one or more Trade Capture Report (MsgType='AE') messages.
  7. ICE Trade Capture notices saying that all snapshot of trades is sent by Trade Capture Report Request Ack (MsgType = 'AQ') with tags 749=0 (Success) and 750 = 1 (Completed).
    FIX message example8=FIX.4.4|9=104|35=AQ|49=ICE|34=167|52=20141001-23:32:24.029|56=SenderCompId|568=1410809574952_76|569=0|749=0|750=1|10=178|
  8. ICE Trade Capture starts sending live updates (new trades or changes to existing ones - Trade Capture Report (MsgType='AE') messages).

Exceptional cases:

5a. ICE Trade Capture determines that request contains invalid ICE Market Id or such which user is not allowed to access.

5a1. ICE Trade Capture sends Security Definition (MsgType = 'd') with tag 323 (SecurityResponseType) = '5' or '6'

5a2. Main flow continues from step 4. 

8a. ICE Trade Capture does not have data available to be sent as Snapshot.

8a1. Main flow continues from step 7. 

3. Processing Incoming ICE Trade Capture Data

ICE Trade Capture Solution Configuration

Please see the table below that represents the components included into the FIXEdge package intended for ICE Trade Capture Solution:

Add-on ComponentConfiguration FileDescription
ICE Trade Capture Handler
(ICEHandler)
ICEProperties.properties

Configuration file used to specify the following ICE Handler parameters: ICE session name, persistence file location, parameters of security definition request(s), filters for trade subscription.

#ICE HANDLER CONFIGURATION PARAMETERS

# ICE Session name
ICESession = SenderCompID[SOH]ICE
# ICE Session SenderCompID
ICESession.SenderCompID = SenderCompID
#ICE Session TargetCompID
ICESession.TargetCompID = ICE
#Persistence file name and location. This file holds Transasct Time of last received trade capture report.
ICESession.StorageFileName = ../FIXEdge1/log/ICE_persistStorage.out

#Security definition requests

# SecurityDefinitionSubscriptions defines list of requests to be submitted. 
# ICE Handler will generate one Security Definition Request (MsgType='c') message for each configured subscription
# For each request SecurityID and CFI Code should be specified. 
# SecurityID represents ICE Market Types, list of valid codes is available https://www.theice.com/publicdocs/technology/Supported_Market_Types_on_ICE_API.pdf
# CFI Code defines security types. Valid values: 'FXXXXX' (Futures), 'OXXXXXX' (Options)

ICESession.SecurityDefinitionSubscriptions = IPEBrentFutures, IPEGasOilOptions

# Security definitions' request mode, defines frequency of requests for security definitions (once a day after the very first logon or after each logon).
# Setting will be applied to all subscriptions defined under 'ICESession.SecurityDefinitionSubscriptions' property
# Valid values: 'OnceADay', 'EachLogon' (default)
ICESession.SecurityDefinitionSubscriptions.RequestMode = EachLogon

# ICE Market Type ID (IPE Brent Futures)  for 'IPEBrentFutures' request
ICESession.SecurityDefinitionSubscriptions.IPEBrentFutures.SecurityID = 5
# CFI Code (Futures) for 'IPEBrentFutures' request
ICESession.SecurityDefinitionSubscriptions.IPEBrentFutures.CFICode = FXXXXX

# ICE Market Type ID (IPE Gas Oil Futures) for 'IPEGasOilOptions' request
ICESession.SecurityDefinitionSubscriptions.IPEGasOilOptions.SecurityID = 4  
# CFI Code (Option) for 'IPEGasOilOptions' request    
ICESession.SecurityDefinitionSubscriptions.IPEGasOilOptions.CFICode = OXXXXX

# Subscription for ICE trades - filters (optional part).

# If section is absent ICE Handler will subscribe for all trades which ICE Trade Capture session is entitled to
# TradeCaptureSubscriptions defines list of subscriptions. 
# ICE Handler will generate one Trade Capture Report Request (MsgType='AD') message for each configured subscription
# For each subscription can specify one of the following properties: ClientID, CFICode, SecurityID, Symbol.
# ClientID - Company ID submitted trades# CFICode - defines security types. Valid values: 'FXXXXX' (Futures), 'OXXXXXX' (Options)
# Symbols - List of symbols which trade(s) was(were) made for. More than one value can be stated. 
#           Valid values are defined by UnderlyingSymbol (311) received in Security Definition (MsgType = 'd') message
# SecurityID - represents ICE Market Types or SecurityID of certain instrument (i.e. value of UnderlyingSecurityID (309) received in Security Definition (MsgType = 'd') message)
ICESession.TradeCaptureSubscriptions = TrdCpt01, TrdCpt02
# Definition of 'TrdCpt01' subscription
ICESession.TradeCaptureSubscriptions.TrdCpt01.ClientID = SenderCompID        # Company ID submitted trades
ICESession.TradeCaptureSubscriptions.TrdCpt01.CFICode = FXXXXX               # CFI Code (Futures) 
ICESession.TradeCaptureSubscriptions.TrdCpt01.SecurityID = 2                 #ICE Market Type ID (Oil) 
ICESession.TradeCaptureSubscriptions.TrdCpt01.Symbols = Symbol1, Symbol2     # List of symbols which trade(s) was(were) made for
# Definition of 'TrdCpt02' subscription
ICESession.TradeCaptureSubscriptions.TrdCpt02.CFICode = OXXXXX               # CFI Code (Options)
BL_Config.xml

Is used to specify the following:

  • declare ICE Handler;

    ..........
    <DllHandlers>
    	<Handler Name="ICEHandler" 
            Description="ICE Handler" 
            DllName="libICEHandler-gcc44-MD-x64.so" 
            VerifyHandlersVersion="true" 
            ConfigFile="../FIXEdge1/conf/ICEProperties.properties" />
        ..........
    </DllHandlers>
    ..........
  • define rules for ICE Handler launch;

    ..........
    <Rule Description="Launch ICE Handler">
    	 <Source> 
              <FixSession SenderCompID=".*" TargetCompID=".*" />
    	 </Source>
    	 <Condition>
    	      <MatchMessage Value=".*SenderCompID.*" /> 
              <MatchMessage Value=".*Established.*" /> 
    	 </Condition>
    	 <Action>
    	      <!-- <Send><Client Name="SMTPClient" /></Send> --> <!-- Optional action to be used if email notification is required -->
    	      <HandlerAction Name="ICEHandler" />
    	  </Action>
    </Rule>
    ..........
  • rules for processing incoming FIX messages (including those which call java scripts storing data todatabase)

    ..........
    <Rule Description="Save ICE Trade Capture Report data and register trade in ICEHandler">
    	<Source Name=".*ICESession" />
    	<Condition>
    		<EqualField Field="35" Value="AE" />
    	</Condition>
    	<Action>
    		<HandlerAction Name="ICEHandler" />
    		<Script Language="JavaScript" FileName="../FIXEdge1/conf/ICETrdCapt.js" />
    	</Action>
    </Rule>
    
    <Rule Description="Save ICE Security Definition data and register secdef in ICEHandler">
    	<Source Name=".*ICESession" />
    	<Condition>
    		<EqualField Field="35" Value="d" />
    	</Condition>
    	<Action>
    		<HandlerAction Name="ICEHandler" />
    		<Script Language="JavaScript" FileName="../FIXEdge1/conf/ICESecDef.js" />
    	</Action>
    </Rule>	
    ..........
  • description of DB tables to store data to (if applicable)

    ..........
    <History Name="Sent_Messages_ICE"
                 StorageType="ODBC"
                 MaxNumberOfRecords="15000"
                 TableName="Sent_Messages_ICE"
                 ColumnSize="256"
                 ConnectionString="DSN=ICE_Trades;UID=ice_admin;Pwd=temp_pass;">
          <KeyField ColumnName="ExecID" ColumnSize="256">17</KeyField>
          <KeyField ColumnName="Symbol" ColumnSize="128">55</KeyField>
          <KeyField ColumnName="Side" ColumnSize="128">54</KeyField>
          <KeyField ColumnName="SendingTime" ColumnSize="128">52</KeyField>
          <KeyField ColumnName="OrdStatus" ColumnSize="128">39</KeyField>
          <KeyField ColumnName="ExecType" ColumnSize="128">150</KeyField>
          <Field ColumnName="TradeReportID" ColumnSize="128">571</Field>
          <Field ColumnName="UniqueTradeID" ColumnSize="100">5996</Field>
    </History>
    ..........
Extension to standard FIX 4.4 dictionaryadditional_ice.xmlDefines custom tags for ICE Trade Capture API messages
ICE FIX Session detailsFIXEdge.properties

Is used to specify FIX Session details

  • Host  = **** as supplied by ICE ****
  • Port  = **** as supplied by ICE ****
  • Encryption required : no in Test, in Production - SSL encryption is required
  • FIX Version:  4.4
  • Role:  Initiator 
  • SenderCompID  = **** as supplied by ICE ****
  • SenderSubID  = 1
  • TargetCompID = **** as supplied by ICE ****
  • Heartbeat Interval = 60 (recommended; value of '0' will lead to connection drops)
  • Reconnect Interval = 15000 (recommended)
  • Username = **** as supplied by ICE ****
  • Password = **** as supplied by ICE ****
  • Logon = optional custom logon message used for high-precision timestamps, see example below:

    Custom ICE Trade Capture Logon

    8=FIX.4.4_9=102_35=A_49=Sender_56=ICE_34=1_50=1_52=20170526-12:55:43.679_98=0_108=10_141=Y_9007=1_10=141_

Scripts publishing data into database 

ICESecDef.js

Java script used to push ICE Security Definition (MsgType = 'd') messages to database.
Is a part of business rules for messages processing which are defined in BL_Сonfig.xml 
ICETrdCapt.jsJava script used to push ICE Trade Capture Report (MsgType = 'AE') messages to database.
Is a part of business rules for messages processing which are defined in BL_Сonfig.xml 
Database SQL scriptsSQL script

Used to create database tables

  • No labels