ICE Trade Connector
Features
fix-iceConnector KeyNotes
ICE API
ICE Trade Connector is implemented and tested with ICE FIX API v.4.11.
Connection
Internet connections to ICE services must be routed through an SSL proxy such as stunnel.
[ICE]
client = yes
accept = 10443
connect = 63.247.113.154:443
options = NO_SSLv2
options = NO_SSLv3
verify = 0
Trader Logon
Trader must be successfully logged into the FIX OS session before orders can be sent to the ICE Trading System.
A Trader cannot be active in more than one FIX OS session at a time. The Trader Logon must be sent at least 2 seconds after receiving the FIX OS Logon Response.
Limitation on Order Identifier
User is limited to 999,999,999,999 orders per system. ICE requires Client Order identifiers to contain only digits and be no longer than 12 characters.
Cancel On Disconnect
If a FIX session disconnects from the FIX Server via a TCP/IP disconnection or a FIX session logout request, then all open, non-GTC/GTD orders for that FIX session will be canceled.
Order Status Request
ICE does not support Order Status Request. Instead, Execution Reports for all cancelled-on-disconnect and active orders are sent after the next Trader Logon.
Microsecond Timestamp
High precision timestamp usage should be configured with timeStampPreference = Increased connector configuration parameter.
MiFID Regulated Markets
MiFID regulated markets require using microsecond or better timestamp precision and MiFID tags with order submission or replacement.
Default MiFID tags can be configured with mifidSettings configuration object. These tags are sent during Trader Logon.
Defaults can be overridden in the following ways:
- On per contract basis by MiFIDID with
iceMifidIdSMD column key. - On per order basis by 9700-9707 attributes.
Note: 9007 (MiFIDID) specified at any step overrides other MiFID parameters. Attribute-level overrides take highest precedence.
Negative Price for Brent Futures
Brent Futures instruments can have negative price.
To avoid Ember negative price rejection add the following section to the ember.conf:
engine {
validation {
settings {
pricesMustBePositive = false
}
}
}
Symbology
ICE uses numeric codes to identify contracts. Codes for a specific market type can be retrieved via a Security Definition request.
Schedule
Open 24 hours (excluding maintenance window)
Maintenance Windows
Weekday 18:05–18:55 ET Weekend Friday 18:05 – Sunday 17:00 ET
Configuration
Connector settings
| Parameter | Default Value | Description |
|---|---|---|
| username | Username | |
| password | Password | |
| traderUsername | Trader username | |
| traderPassword | Trader password | |
| onBehalfOfCompId | Default assigned value used to identify firm originating message | |
| onBehalfOfSubId | Default assigned value used to identify specific message originator | |
| onBehalfOfLocationId | Default assigned value used to identify specific message originator's location | |
| useTrader | false | Use Trader ID (if provided in order requests) as a part for onBehalfOfSubId (Tag 116). Tag population mode is defined by traderIdFillMode setting. |
| traderIdFillMode | RIGHT | OnBehalfOfSubID(116) fill mode. Valid values are: RIGHT, BOTH. RIGHT = use Trader ID as a RIGHT part for onBehalfOfSubId (Tag 116). BOTH = use Trader ID as a LEFT AND RIGHT parts for onBehalfOfSubId (Tag 116). |
| selfMatchPreventionId | Default identifier used to prevent self trading | |
| selfMatchPreventionInstruction | Default cancel instruction when self match prevention is triggered. Valid values are: CancelRestingOrder = 'R', CancelTakingOrder = 'T', CancelBothOrders = 'B'. | |
| clientId | Client ID | |
| clearingFirm | Default <ClearingFirmID> value of the Clearing Firm | |
| clearingAccount | Default <ClearingAccount> setup with the Clearing Firm | |
| accountCode | Default AccountCode. Valid values are: House = 'H', Customer = 'C'. | |
| ctiCode | Default CTICode. Valid values are: BrokerTradingForOwnAccount = '1', BrokerTradingForHouseAccount = '2', BrokerTradingForAccountOfAnotherBroker = '3', BrokerTradingForAnyOtherCustomersAccountThatDoesnotHaveDirectTradingAccess = '4'. | |
| customerAccountRefId | Default CustomerAccountRefId | |
| custOrderHandlingInst | Default code that apply special information that the Broker / Dealer needs to report, as specified by the customer. Valid values are: VendorProvidedPlatform = "C", Other = "D", SponsoredAccess = "G", PremiumAlgorithmicTradingProvider = "H", Desk = "W", Electronic = "Y". | |
| timeStampPreference | Indicates Time Stamp Precision Preference for SendingTime (Tag 52), TransactTime (Tag 60), and RFQTransactTime (Tag 9213) on responses. Valid values are: Standard = '0', Increased = '1'. | |
| appVendor | Default ApplicationVendor (Tag 9452) value. Should not exceed 30 characters limit. ApplicationVendor (Tag 9452) is not sent for an empty or null value. | |
| ➡️ MiFID Settings | ||
| mifidSettings.directElectronicAccess | Default value for DirectElectronicAccess (Tag 9700). Valid values are: False = '0', True = '1'. | |
| mifidSettings.tradingCapacity | Default value for TradingCapacity (Tag 9701). Valid values are: DEAL = '0', MTCH = '1', AOTC = '2'. | |
| mifidSettings.liquidityProvision | Default value for LiquidityProvision (Tag 9702). Valid values are: False = '0', True = '1'. | |
| mifidSettings.commodityDerivIndicator | Default value for CommodityDerivIndicator (Tag 9703). Valid values are: False = '0', True = '1'. | |
| mifidSettings.investmentDecision | Default value for InvestmentDecision (Tag 9704). Numeric value. Must be > 0. Maximum value of 9,223,372,036,854,775,807. | |
| mifidSettings.executionDecision | Default value for ExecutionDecision (Tag 9705). Numeric value. Must be > 0. Maximum value of 9,223,372,036,854,775,807. | |
| mifidSettings.clientIdCode | Default value for ClientIDCode (Tag 9706). Numeric value. Must be > 0. Maximum value of 9,223,372,036,854,775,807. | |
| mifidSettings.mifidId | Default value for MiFIDID (Tag 9707). Numeric value. Must be > 0. Maximum value of 9,223,372,036,854,775,807. | |
| ➡️ Security Loader Settings | ||
| requestSecurityDefinitions | false | Request Security Definitions from ICE to extract market IDs for ICE products |
| securityDefinitions | List of options for Security Definitions request. securityTypes is the list of Futures, Options or MultiLeg values. marketTypes is the list of Market Type names (e.g. 'Digital Asset Futures') or the Market Type IDs (e.g. '178') |
Supported order attributes
| Key | Description |
|---|---|
| 115 | OnBehalfOfCompID(115). Assigned value used to identify firm originating message. |
| 116 | OnBehalfOfSubID(116). Assigned value used to identify specific message originator. |
| 144 | OnBehalfOfLocationID(144). Assigned value used to identify specific message originator's location (i.e., group, desk, trader, location, etc.). |
| 18 | ExecInst(18). Instructions for order handling on exchange trading floor. Supported values: G = All or None (AON). |
| 1031 | CustOrderHandlingInst(1031). Codes that apply special information that the Broker / Dealer needs to report, as specified by the customer. Supported values: Supported value(s): C = Vendor-provided Platform billed by Executing Broker, D = Other, including Other-provided Screen, G = Sponsored Access via Exchange API or FIX provided by Executing Broker, H = Premium Algorithmic Trading Provider billed by Executing Broker, W = Desk, Y = Electronic (Preferred default value as per FIA usage guidelines. Not set as a default if not sent.). |
| 423 | PriceType(423). Code to represent the price type. Supported values: 10 = Fixed cabinet trade price (requires Price (Tag 44) = '0'). Supported values for CDS and IRS Futures: 100 = Fixed Rate, 101 = NPV, 102 = Rate Differential, 103 = NPV Differential. |
| 77 | PositionEffect(77). Indicates whether the resulting position after a trade should be an opening position or closing position. Supported values: O = Open, C = Close. |
| 440 | ClearingAccount(440). <ClearingAccount> setup with the Clearing Firm. |
| 439 | ClearingFirm(439). <ClearingFirmID> value of the Clearing Firm. |
| 1028 | ManualOrderIndicator(1028). Allowed values: Y, N |
| 8723 | CustomerAccountRefId(9207). |
| 9821 | SelfMatchPreventionID(9821). Identifier used to prevent self trading. |
| 9822 | SelfMatchPreventionInstruction(9822). Indicates cancel instruction when self match prevention is triggered. Supported values: 'R' = Cancel Resting Order, 'T' = Cancel Taking Order, 'B' = Cancel Both Orders. |
| 9195 | AccountCode(9195). |
| 9208 | CTICode(9208). Required if trading ICE Futures US with an ITM. Supported values: 1 = Broker/trader trading for own account, 2 = Broker/trader trading for house or prop account, 3 = Broker/trader trading for the account of another broker/trader, 4 = Broker/trader trading for any other customer's account that does not have direct trading access. |
| 9207 | CustomerAccountRefId(9207). Required when trading with a LMA. |
| 9700 | DirectElectronicAccess(9700). Only required for MiFID regulated markets when MiFIDID (Tag 9707) is not provided. Supported values: 0 = False, 1 = True. |
| 9701 | TradingCapacity(9701). Only required for MiFID regulated markets when MiFIDID (Tag 9707) is not provided. Supported values: 0 = DEAL (own account), 1 = MTCH (matched principal), 2 = AOTC (any other capacity). |
| 9702 | LiquidityProvision(9702). Only required for MiFID regulated markets when MiFIDID (Tag 9707) is not provided. Supported values: 0 = False, 1 = True. |
| 9703 | CommodityDerivIndicator(9703). Only required for MiFID regulated markets when MiFIDID (Tag 9707) is not provided. Supported values: 0 = False, 1 = True. |
| 9704 | InvestmentDecision(9704). Only required for MiFID regulated markets when MiFIDID (Tag 9707) is not provided and TradingCapacity (Tag 9701) = '0'. Industry reserved Short Codes '1' (AGGR), '2' (PNAL) and '3' (NORE) are NOT applicable so should not be sent. Numeric value. Must be > 0. Maximum value of 9,223,372,036,854,775,807. |
| 9705 | ExecutionDecision(9705). Only required for MiFID regulated markets when MiFIDID (Tag 9707) is not provided. Industry reserved Short Code '3' (NORE) is supported. Industry reserved Short Codes '1' (AGGR) and '2' (PNAL) are NOT applicable so should not be sent. Numeric value. Must be > 0. Maximum value of 9,223,372,036,854,775,807. |
| 9706 | ClientIDCode(9706). Only required for MiFID regulated markets when MiFIDID (Tag 9707) is not provided and TradingCapacity (Tag 9701) = '1' or '2'. Industry reserved Short Codes '1' (AGGR) and '2' (PNAL) are supported. Industry reserved Short Code 3 (NORE) is NOT applicable and should not be sent. Numeric value. Must be > 0. Maximum value of 9,223,372,036,854,775,807. |
| 9707 | MiFIDID(9707). Only required for MiFID regulated markets when Tags 9700-9706 are not provided. Please note that this field will be the only MiFID-related field processed if sent. Numeric value. Must be > 0. Maximum value of 9,223,372,036,854,775,807. |
Config sample
connectors {
ICE: ${template.connector.fix.ice} {
settings {
host = "<HOST>"
port = <PORT>
senderCompId = "<SENDER_COMP_ID>"
senderSubId = "<SENDER_SUB_ID>"
targetCompId = ICE
username = "<USERNAME>"
password = "<PASSWORD>"
onBehalfOfCompId = "<FIRM>|<FIRM>"
onBehalfOfSubId = "<NAME>|<NAME>"
onBehalfOfLocationId = "DAU|<DESK_NAME>"
clientId = "<CLIENT_ID>"
mifidSettings = {
mifidId = "<NUMERIC_ID>"
}
# SecurityDefinition request settings (optional)
requestSecurityDefinitions = false
securityDefinitions = [
{
marketTypes = ["Digital Asset Daily Futures", "Digital Asset Futures"]
securityTypes = [Futures, MultiLeg]
}
]
}
}
}
Tools
Audit Log Generator
Audit Log Generator converts log files with RAW FIX messages into CSV files.
Usage: ice-audit-log --connector=ICE [--work-dir <ember-work-dir|$EMBER_WORK>] [--output-dir <output-dir|$EMBER_WORK/audit>] [--start-date <start-date|TODAY>] [--end-date <end-date|TODAY>] --files=<fileName1>[,<fileName2>...]
- Docker
- Windows
docker compose exec ember /opt/deltix/ember/lib/custom/tools/ice-audit-log --connector=ICE --work-dir /var/lib/emberwork/eurex
set EMBER_INSTALL=C:/ember
set EMBER_WORK=C:/ember-work
%EMBER_INSTALL%/lib/custom/tools/ice-audit-log.bat --connector=ICE
Security Definition Loader
A Security Definition request can be sent at ICE TC startup by setting requestSecurityDefinitions = true, with filter options specified in the securityDefinitions list. Raw Security Definition responses are stored in the workDir directory in files named SecurityDefinition-<marketType>. These files can be converted to CSV using the Security Definition Extractor tool.
Security Definition Extractor converts files with RAW Security Definition Responses into CSV files.
Each SecurityDefinition-<marketType> file in the directory is converted to a SecurityDefinition-<marketType>.csv file.
These CSV files can be imported into TimeBase Securities with TimeBase Administrator.
Usage: ice-secdef-extractor --input-dir <input-dir> [--output-dir <output-dir>]
- Docker
- Windows
docker compose exec ember /opt/deltix/ember/lib/custom/tools/ice-secdef-extractor --input-dir /var/lib/emberwork/ice
set EMBER_INSTALL=C:/ember
set EMBER_WORK=C:/ember-work
%EMBER_INSTALL%/lib/custom/tools/ice-secdef-extractor.bat --input-dir %EMBER_WORK%/ice
legs column in the CSV file contains information about legs which are used in the MultiLeg security.
Legs are divided by '|' separator: "Leg1 | Leg2 | ...".
Each leg has the following fields divided by ':' separator: "Symbol : SecurityType : Side : Quantity".
CSV file output sample:
keyword,symbol,InstrumentMessage.instrumentType,GenericInstrument.name,GenericInstrument.iceSymbol,GenericInstrument.currencyCode,GenericInstrument.tick,GenericInstrument.multiplier,Future.expirationDate,incrementPrice,incrementQty,lotSize,denominator,tradingStatus,numOfDecimalPrice,numOfDecimalQty,productType,canonicSymbol,legs
Future,BTM FMM0020!,FUTURE,Bakkt BTC (USD) Monthly Future - ICUS - Jun20 (Digital Asset Futures),6075094,USD,2.50,1.0,06/18/2020,2.50,1.0,1.0,1,17,2,0,Futures,BTMM20,
Future,BTM FMN0020!,FUTURE,Bakkt BTC (USD) Monthly Future - ICUS - Jul20 (Digital Asset Futures),6076031,USD,2.50,1.0,07/16/2020,2.50,1.0,1.0,1,17,2,0,Futures,BTMN20,
Synthetic,BTM FMN0020-BTM FMM0020,EXCHANGE_TRADED_SYNTHETIC,Bakkt BTC (USD) Monthly Future Spr - ICUS - Jun20/Jul20 (Digital Asset Futures),6094416,,,1.0,06/18/2020,2.50,1.0,,1,17,2.0,0,,,6076031:FUT:1:1|6075094:FUT:2:1