Versions Compared

Key

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

toc
Table of Contents

...

Preface

B2BITS' FIX ICE Private Order Feed Solution is pre-configured to work with ICE POF FIX interfaceICE Private Order Feed Solution is based on B2BITS' generic server FIXEdge, therefore it leverages all FIXEdge features including easy configuration, administration, and monitoring. 

...

  • All incoming traffic (Execution Report Messages, Allocation messages) is stored into the database by means of java script (ICEPofExecRpt.js, ICEPofAllocRpt.js).
  • Alternatively, data can be published to any other middleware supported by FIXEdge.

ICE Private Order Feed Solution Configuration

Please see the table below that represents the components included into the FIXEdge package intended for ICE Private Order Feed Solution:

Configuration FileDescription
BL_Config.xml

Is used to specify the following:

  • rules for processing incoming FIX messages (including those which call java scripts storing data to database)

    Code Block
    languagexml
    collapsetrue
    ..........
       <!-- ============== RULES FOR ICE POF HANDLER : START ======================== -->
        <Rule Description="Rule to notify java script creating Historic Request about established ICE POF FIX session">
          <Source>
            <FixSession SenderCompID=".*" TargetCompID=".*" /> 
          </Source>
          <Condition>
            <EqualField Field="35" Value="C" />
            <EqualField Field="50" Value="Q1"/>
      <!-- PLACE YOUR SENDER COMP ID HERE -->
      <MatchMessage Value=".*147=\[NOTE\] SENDER_COMP_ID:ICE Established.*"/>
          </Condition>
          <Action>
        <Script Language="JavaScript" FileName="../FIXEdge1/conf/ICEPofHistoryReq.js"/>  
          </Action>
         </Rule>
     <Rule Description="Save ICE POF Execution Reports">
          <Source Name="ICEPOF.*" />
       <Condition>
         <EqualField Field="35" Value="8" />
       </Condition>
       <Action>
         <Script Language="JavaScript" FileName="../FIXEdge1/conf/ICEPofExecRpt.js" />
       </Action>
     </Rule> 
       <!-- ============== RULES FOR ICE POF HANDLER : END ======================== --> 
    
       <!-- ============== RULES FOR ICE POF Allocation : START ======================== -->  
     <Rule Description="Save ICE POF Allocation Reports">
       <Source Name="ICEPOF.*" />
       <Condition>
      <EqualField Field="35" Value="J" />
       </Condition>
       <Action>
      <Script Language="JavaScript" FileName="../FIXEdge1/conf/ICEPofAllocRpt.js" />
       </Action>
     </Rule> 
       <!-- ============== RULES FOR ICE POF Allocation : END ======================== --> 
    ..........
  • description of DB tables to store data to (if applicable)

    Code Block
    languagexml
    collapsetrue
    ..........
        <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>
          <KeyField ColumnName="Symbol" ColumnSize="128">55</KeyField>
          <KeyField ColumnName="Side" ColumnSize="128">54</KeyField>
          <KeyField ColumnName="SourceFeed" ColumnSize="128">9009</KeyField>
          <KeyField ColumnName="ExecType" ColumnSize="128">150</KeyField>
          <KeyField ColumnName="TransactTime" ColumnSize="128">60</KeyField>
          <Field ColumnName="TransactTimeWasNULL" ColumnSize="128">00</Field>
          <Field ColumnName="PossDupFlag" ColumnSize="128">43</Field>
          <Field ColumnName="PossResend" ColumnSize="128">97</Field>
          <Field ColumnName="SendingTime" ColumnSize="128">52</Field>
          <Field ColumnName="OrderID" ColumnSize="128">37</Field>
          <Field ColumnName="ClOrdID" ColumnSize="128">11</Field>
          <Field ColumnName="OrigClOrdID" ColumnSize="128">41</Field>
          <Field ColumnName="ClientID" ColumnSize="128">109</Field>
          <Field ColumnName="TargetCompId" ColumnSize="128">56</Field>
          <Field ColumnName="ExecInst" ColumnSize="128">18</Field>
          <Field ColumnName="OnBehalfOfCompId" ColumnSize="128">115</Field>
          <Field ColumnName="OnBehalfOfSubId" ColumnSize="128">116</Field>
          <Field ColumnName="OnBehalfOfLocationId" ColumnSize="128">144</Field>
          <Field ColumnName="HistoryRequestId" ColumnSize="128">9415</Field>
          <Field ColumnName="OriginatorUserID" ColumnSize="128">9139</Field>
          <Field ColumnName="ExecTransType" ColumnSize="128">20</Field>
          <Field ColumnName="ExecRefID" ColumnSize="128">19</Field>
          <Field ColumnName="OrdStatus" ColumnSize="128">39</Field>
          <Field ColumnName="OrderState" ColumnSize="128">9175</Field>
          <Field ColumnName="OrdRejReason" ColumnSize="128">103</Field>
          <Field ColumnName="OrderQty" ColumnSize="128">38</Field>
          <Field ColumnName="SecurityType" ColumnSize="128">167</Field>
          <Field ColumnName="PutOrCall" ColumnSize="128">201</Field>
          <Field ColumnName="StrikePrice" ColumnSize="128">202</Field>
          <Field ColumnName="MaxShow" ColumnSize="128">210</Field>
          <Field ColumnName="OrdType" ColumnSize="128">40</Field>
          <Field ColumnName="Price" ColumnSize="128">44</Field>
          <Field ColumnName="ExecRestatementReason" ColumnSize="128">378</Field>
          <Field ColumnName="CustOrderHandlingInst" ColumnSize="128">1031</Field>
          <Field ColumnName="LiquidityIndicator" ColumnSize="128">9120</Field>
          <Field ColumnName="MemoField" ColumnSize="128">9121</Field>
          <Field ColumnName="TransactDetails" ColumnSize="128">9123</Field>
          <Field ColumnName="NumberOfCycles" ColumnSize="128">9022</Field>
          <Field ColumnName="SequenceWithinMillis" ColumnSize="128">9028</Field>
          <Field ColumnName="ClientAppType" ColumnSize="128">9413</Field>
          <Field ColumnName="CustClearingVenue" ColumnSize="128">9209</Field>
          <Field ColumnName="TrdType" ColumnSize="128">828</Field>
          <Field ColumnName="TimeInForce" ColumnSize="128">59</Field>
          <Field ColumnName="PositionEffect" ColumnSize="128">77</Field>
          <Field ColumnName="LeavesQty" ColumnSize="128">151</Field>
          <Field ColumnName="CumQty" ColumnSize="128">14</Field>
          <Field ColumnName="AvgPx" ColumnSize="128">6</Field>
          <Field ColumnName="LastQty" ColumnSize="128">32</Field>
          <Field ColumnName="LastPx" ColumnSize="128">31</Field>
          <Field ColumnName="LastParPx" ColumnSize="128">669</Field>
          <Field ColumnName="MultiLegReportingType" ColumnSize="128">442</Field>
          <Field ColumnName="SecondaryExecID" ColumnSize="128">527</Field>
          <Field ColumnName="CrossId" ColumnSize="128">548</Field>
          <Field ColumnName="CrossType" ColumnSize="128">549</Field>
          <Field ColumnName="ClearingFirm" ColumnSize="128">439</Field>
          <Field ColumnName="ClearingAccount" ColumnSize="128">440</Field>
          <Field ColumnName="StartDate" ColumnSize="128">916</Field>
          <Field ColumnName="EndDate" ColumnSize="128">917</Field>
          <Field ColumnName="AccountCode" ColumnSize="128">9195</Field>
          <Field ColumnName="CustomerAccountRefId" ColumnSize="128">9207</Field>
          <Field ColumnName="CrossExecutionType" ColumnSize="128">9405</Field>
          <Field ColumnName="DeliveryStartDate" ColumnSize="128">9520</Field>
          <Field ColumnName="DeliveryEndDate" ColumnSize="128">9521</Field>
          <Field ColumnName="LocationCode" ColumnSize="128">9522</Field>
          <Field ColumnName="MeterNumber" ColumnSize="128">9523</Field>
          <Field ColumnName="LeadTime" ColumnSize="128">9524</Field>
          <Field ColumnName="ReasonCode" ColumnSize="128">9525</Field>
          <Field ColumnName="DayRate" ColumnSize="128">9526</Field>
          <Field ColumnName="Text" ColumnSize="128">58</Field>      
          <Field ColumnName="PriceType" ColumnSize="128">423</Field>
          <Field ColumnName="StopPx" ColumnSize="128">99</Field>
          <Field ColumnName="ExpireDate" ColumnSize="128">432</Field>
          <Field ColumnName="ExpireTime" ColumnSize="128">126</Field>
          <Field ColumnName="LinkExecID" ColumnSize="128">9527</Field>
          <Field ColumnName="BrokerCompID" ColumnSize="128">9065</Field>
          <Field ColumnName="BrokerCompName" ColumnSize="128">9066</Field>
          <Field ColumnName="BrokerUserID" ColumnSize="128">9067</Field>
          <Field ColumnName="DeleteReason" ColumnSize="128">285</Field>
          <Field ColumnName="QuoteRespID" ColumnSize="128">693</Field>
          <Field ColumnName="WaiverIndicator" ColumnSize="128">8013</Field>
          <Field ColumnName="ImpliedIndicator" ColumnSize="128">9003</Field>
          <Field ColumnName="CTICode" ColumnSize="128">9208</Field>
          <Field ColumnName="DirectElectronicAccess" ColumnSize="128">9700</Field>
          <Field ColumnName="TradingCapacity" ColumnSize="128">9701</Field>
          <Field ColumnName="LiquidityProvision" ColumnSize="128">9702</Field>
          <Field ColumnName="CommodityDerivIndicator" ColumnSize="128">9703</Field>
          <Field ColumnName="InvestmentDecision" ColumnSize="128">9704</Field>
          <Field ColumnName="ExecutionDecision" ColumnSize="128">9705</Field>
          <Field ColumnName="ClientIDCode" ColumnSize="128">9706</Field>
          <Field ColumnName="MiFIDID" ColumnSize="128">9707</Field>
          <Field ColumnName="MemberName" ColumnSize="128">5364</Field>
          <Field ColumnName="CounterpartyTraderID" ColumnSize="128">6347</Field>
          <Field ColumnName="CounterpartyCompID" ColumnSize="128">6822</Field>
          <Field ColumnName="ContraFirm" ColumnSize="128">9068</Field>
          <Field ColumnName="ComplianceID" ColumnSize="128">376</Field>   
          <Field ColumnName="NumOfCombiDefinitions" ColumnSize="128">9500</Field>
          <Field ColumnName="TermsQualityComments" ColumnSize="128">9510</Field>   
          <Field ColumnName="NoLegExecutions" ColumnSize="128">9029</Field>   
        </History>
     <History Name="ICEPOFReportsCombiDefinitions"
                 StorageType="ODBC"
                 MaxNumberOfRecords="15000"
                 TableName="ICEPOFReportsCombiDefinitions"
                 ColumnSize="256"
                 ConnectionString="DSN=ICE_POF;UID=pof_admin;Pwd=temp_pass;">
       
          <KeyField ColumnName="ExecID" ColumnSize="128">17</KeyField>
          <KeyField ColumnName="Symbol" ColumnSize="128">55</KeyField>
          <KeyField ColumnName="Side" ColumnSize="128">54</KeyField>
          <KeyField ColumnName="SourceFeed" ColumnSize="128">9009</KeyField>
          <KeyField ColumnName="ExecType" ColumnSize="128">150</KeyField>
          <KeyField ColumnName="TransactTime" ColumnSize="128">60</KeyField>   
        <KeyField ColumnName="CombiDefinitionsEntry" ColumnSize="128">5999</KeyField> 
          <Field ColumnName="CombiPercentage" ColumnSize="128">9501</Field>
          <Field ColumnName="CombiPriceBasis" ColumnSize="128">9502</Field>
          <Field ColumnName="CombiPriceBasisPeriod" ColumnSize="128">9503</Field>
          <Field ColumnName="CombiPriceBasisSubLevel" ColumnSize="128">9504</Field>
          <Field ColumnName="CombiLegPrice" ColumnSize="128">9505</Field>
        </History>
     
        <History Name="Sent_Messages_ICE_POF"
                 StorageType="ODBC"
                 MaxNumberOfRecords="15000"
                 TableName="Sent_Messages_ICE_POF"
                 ColumnSize="256"
                 ConnectionString="DSN=ICE_POF;UID=pof_admin;Pwd=temp_pass;">
          <KeyField ColumnName="ExecID" ColumnSize="128">17</KeyField>
          <KeyField ColumnName="Symbol" ColumnSize="128">55</KeyField>
          <KeyField ColumnName="Side" ColumnSize="128">54</KeyField>
          <KeyField ColumnName="SourceFeed" ColumnSize="128">9009</KeyField>
          <KeyField ColumnName="ExecType" ColumnSize="128">150</KeyField>
          <KeyField ColumnName="TransactTime" ColumnSize="128">60</KeyField>   
        </History>
       <History Name="ICEPOFAllocation"
                 StorageType="ODBC"
                 MaxNumberOfRecords="15000"
                 TableName="ICEPOFAllocation"
                 ColumnSize="256"
                 ConnectionString="DSN=ICE_POF;UID=pof_admin;Pwd=temp_pass;">
          <KeyField ColumnName="AllocID" ColumnSize="256">70</KeyField>
          <KeyField ColumnName="TransactTime" ColumnSize="128">60</KeyField>
       <Field ColumnName="TransactTimeWasNULL" ColumnSize="128">00</Field>
       <Field ColumnName="PossDupFlag" ColumnSize="128">43</Field>
       <Field ColumnName="PossResend" ColumnSize="128">97</Field>
          <Field ColumnName="SendingTime" ColumnSize="128">52</Field>   
          <Field ColumnName="AllocTransType" ColumnSize="128">71</Field>
          <Field ColumnName="ClearingBusinessDate" ColumnSize="128">715</Field>
          <Field ColumnName="AllocReportType" ColumnSize="128">794</Field>
          <Field ColumnName="AllocStatus" ColumnSize="128">87</Field>
          <Field ColumnName="NoOrders" ColumnSize="128">73</Field>
          <Field ColumnName="ClOrdID" ColumnSize="128">11</Field>
          <Field ColumnName="NoExecs" ColumnSize="128">124</Field>
          <Field ColumnName="TrdType" ColumnSize="128">828</Field>
          <Field ColumnName="Symbol" ColumnSize="128">55</Field>
          <Field ColumnName="SecurityType" ColumnSize="128">167</Field>
          <Field ColumnName="MaturityMonthYear" ColumnSize="128">200</Field>
          <Field ColumnName="PutOrCall" ColumnSize="128">201</Field>
          <Field ColumnName="StrikePrice" ColumnSize="128">202</Field>
          <Field ColumnName="SecurityExchange" ColumnSize="128">207</Field>
          <Field ColumnName="Shares" ColumnSize="128">53</Field>
          <Field ColumnName="AvgPx" ColumnSize="128">6</Field>
          <Field ColumnName="TradeDate" ColumnSize="128">75</Field>
          <Field ColumnName="TradeInputSource" ColumnSize="128">578</Field>
          <Field ColumnName="Text" ColumnSize="128">58</Field>
          <Field ColumnName="LiquidityIndicator" ColumnSize="128">9120</Field>
          <Field ColumnName="NoAllocs" ColumnSize="128">78</Field>
        </History>
        <History Name="ICEPOFAllocationExecs"
                 StorageType="ODBC"
                 MaxNumberOfRecords="15000"
                 TableName="ICEPOFAllocationExecs"
                 ColumnSize="256"
                 ConnectionString="DSN=ICE_POF;UID=pof_admin;Pwd=temp_pass;">
          <KeyField ColumnName="AllocID" ColumnSize="256">70</KeyField>
          <KeyField ColumnName="TransactTime" ColumnSize="128">60</KeyField>
          <KeyField ColumnName="ExecEntry" ColumnSize="128">7771</KeyField>
          <Field ColumnName="LastShares" ColumnSize="128">32</Field>
          <Field ColumnName="ExecID" ColumnSize="128">17</Field>
          <Field ColumnName="LastPx" ColumnSize="128">31</Field>
          <Field ColumnName="TradeID" ColumnSize="128">1003</Field>
          <Field ColumnName="ClientAppType" ColumnSize="128">9413</Field>   
        </History>
        <History Name="ICEPOFAllocationAllocs"
                 StorageType="ODBC"
                 MaxNumberOfRecords="15000"
                 TableName="ICEPOFAllocationAllocs"
                 ColumnSize="256"
                 ConnectionString="DSN=ICE_POF;UID=pof_admin;Pwd=temp_pass;">
          <KeyField ColumnName="AllocID" ColumnSize="256">70</KeyField>
          <KeyField ColumnName="TransactTime" ColumnSize="128">60</KeyField>
          <KeyField ColumnName="AllocEntry" ColumnSize="128">7772</KeyField>
          <Field ColumnName="AllocShares" ColumnSize="128">80</Field>
          <Field ColumnName="AllocAccount" ColumnSize="128">79</Field>
          <Field ColumnName="AllocPrice" ColumnSize="128">366</Field>
          <Field ColumnName="SecondaryIndividualAllocID" ColumnSize="128">989</Field>
          <Field ColumnName="IndividualAllocType" ColumnSize="128">992</Field>
          <Field ColumnName="AllocCustomerCapacity" ColumnSize="128">993</Field>
          <Field ColumnName="AllocPositionEffect" ColumnSize="128">1047</Field>
          <Field ColumnName="AllocText" ColumnSize="128">161</Field>
          <Field ColumnName="SettlementAccountCode" ColumnSize="128">9194</Field>
          <Field ColumnName="AllocAcceptanceTime" ColumnSize="128">9060</Field>
          <Field ColumnName="NoAllocInfo" ColumnSize="128">9140</Field>
        </History>
     
        <History Name="ICEPOFAllocationAllocsInfo"
                 StorageType="ODBC"
                 MaxNumberOfRecords="15000"
                 TableName="ICEPOFAllocationAllocsInfo"
                 ColumnSize="256"
                 ConnectionString="DSN=ICE_POF;UID=pof_admin;Pwd=temp_pass;">
          <KeyField ColumnName="AllocID" ColumnSize="256">70</KeyField>
          <KeyField ColumnName="TransactTime" ColumnSize="128">60</KeyField>
          <KeyField ColumnName="AllocEntry" ColumnSize="128">7773</KeyField>
          <KeyField ColumnName="AllocInfoEntry" ColumnSize="128">7774</KeyField>
          <Field ColumnName="AllocSideInfo" ColumnSize="128">9141</Field>
          <Field ColumnName="ClientID" ColumnSize="128">109</Field>
          <Field ColumnName="BrokerCompID" ColumnSize="128">9065</Field>
          <Field ColumnName="OriginatorUserID" ColumnSize="128">9139</Field>
          <Field ColumnName="AccountCode" ColumnSize="128">9195</Field>
          <Field ColumnName="TMMnemonic" ColumnSize="128">9103</Field>
          <Field ColumnName="RIMnemonic" ColumnSize="128">9603</Field>
          <Field ColumnName="CMMnemonic" ColumnSize="128">9604</Field>
          <Field ColumnName="ClrHouseCode" ColumnSize="128">9609</Field>
          <Field ColumnName="CustomerAccountRefID" ColumnSize="128">9207</Field>
        </History>
      
        <History Name="Sent_Allocation_ICE_POF"
                 StorageType="ODBC"
                 MaxNumberOfRecords="15000"
                 TableName="Sent_Allocation_ICE_POF"
                 ColumnSize="256"
                 ConnectionString="DSN=ICE_POF;UID=pof_admin;Pwd=temp_pass;">
          <KeyField ColumnName="AllocID" ColumnSize="256">70</KeyField>
          <KeyField ColumnName="TransactTime" ColumnSize="128">60</KeyField>
        </History>
    ..........
    
    
additional_icepof.xmlDefines custom tags for ICE POF API messages
FIXEdge.properties

Is usedto specify FIX Session details

  • Host  = **** as supplied by ICE ****
  • Port  = **** as supplied by ICE ****
  • Username = **** as supplied by ICE ****
  • Password = **** as supplied by ICE ****
  • Encryption required : No
  • FIX Version:  4.2
  • Role:  Initiator 
  • SenderCompID  = **** as supplied by ICE ****
  • SenderSubID  = 1
  • Heartbeat Interval = 60 (recommended; value of '0' will lead to connection drops)
  • Reconnect Interval = 15000 (recommended)

    Logon = custom logon message, see example below:

Custom ICE POF Logon

Code Block
languagexml
8=FIX.4.2 | 9=65 | 35=A | 49=SenderCompID | 50=1 | 56=ICE | 34=1 | 52=99990909-17:17:17 | 98=0 | 108=30 | 9001=1 | 9006=0 | 9007=1 | 9008=0 | 10=140 | 

Note, value of SenderSubID (50) is not supplied by ICE. User can choose any value as long as it complies with datatype of this tag.
Values for the following tags are expected to be supplied by ICE and to be specified in custom Logon:

  • UserType (9001) - either '1' (Trading Firm) or '2' (Clearing Firm Company)

The following tags and their values must be specified in Custom ICE POF Logon to support the Allocation message:

  • StrategyPreference (9006) - StrategyPreference (Tag 9006) must be set to ‘1’ if PublishClearingAllocations (Tag 9008) = ‘1’. Set the value to 1.
  • PublishClearingAllocations (9008) - indicates whether or not the allocations from clearing should be published over the session.  Supported value(s): 0 = Do not send clearing allocation messages (Default if not sent). 1 = Send clearing allocation messages. Set the value to 1.
ICEPofHistoryReq.jsJava script for generation of Historic Request (MsgType = 'UHR'). By default, request asks for order events starting from today's midnight.

ICEPofExecRpt.js

Java script used to push ICE Execution report (MsgType = '8') messages to database.
Is a part of business rules for messages processing which are defined in BL_Сonfig.xml 
ICEPofAllocRpt.jsJava script used to push ICE Allocation message (MsgType = 'J') messages to database.
Is a part of business rules for messages processing which are defined in BL_Сonfig.xml 
SQL script

Used to create database tables