CME MSGW, CGW and BrokerTec Common Settings
Notes
Useful Links
- iLink 3 - Simple Binary Encoding
- iLink 3 Binary Order Entry - Session Layer
- iLink 3 Binary Order Entry - Business Layer
- iLink 3 New Order Single
Order Entry Service Gateway
iLink 3 allows customers to optimize business message construction by pre-registering administrative information.
See Order Entry Business Layer
See more about Party Details configuration and handling here.
Client Order ID
The maximum length of the CME Client Order ID (ClOrdID) is 20 characters. The connector sends the request's sequenceId as the Client Order ID, which does not change over the order lifecycle — the same value is sent in all requests (submit/replace/cancel). The OrderRequestID tag is always set to the current request's sequenceId.
Cancel On Disconnect (COD)
Cancel On Disconnect (COD) monitors the iLink system for involuntary lost connections between iLink users and the CME Globex platform.
If a lost connection is detected, COD cancels all resting futures and options orders for the disconnected registered iLink user.
This does not include GTC (Good Till Cancel) and GTD (Good Till Date) orders.
Order Status Response
The connector requests status for active orders upon (re)connect.
But OrderStatusResponse does not report Average Price.
Therefore Limit Price is reported as Average Price for completely or partially filled orders.
Sender Location ID
ISO identifier of the physical location of the individual or team head trader identified by the tag 5392 (SenderID) in the message.
The first two bytes as per ISO 3166-1, identify the country (e.g., JP = Japan, CN = China).
The next three bytes indicate a comma-delimited state or province code (e.g., CA = California, QC = Quebec).
For valid values, refer to ftp.cmegroup.com/fix/coo.
Market Regulation requires only the submission of the two first characters of tag 9537-Location for all countries with the exception of Canada. For Canada, the 5 bytes including the province code must be submitted.
Customer Order Capacity
Capacity of customer placing the order.
Used by futures exchanges to indicate the CTICode (customer type indicator) as required by the US CFTC (Commodity Futures Trading Commission).
Not applicable for fixed income markets.
CTI_1- Applies to orders entered or trades executed by an individual member for their own account, for an account they controls, or for an account in which they have an ownership or financial interest. However, transactions initiated and executed by a member for the proprietary account of a member firm must be designated as CTI 2 transactions.CTI_2- Applies to orders entered or trades executed for the proprietary accounts of a member firm, including Rule 106. H., I., N., R. and S. firms.CTI_3- Applies to orders entered by a member or a nonmember terminal operator for the account of another individual member or an account controlled by such individual memberCTI_4- Applies to all orders and transactions not included in CTI categories 1, 2, or 3. These typically are orders entered by or on behalf of nonmember entities.
Clearing Account Type
Designates the account type to use for the order when submitted to clearing.
Allowed values: CUSTOMER, FIRM.
Not applicable for fixed income markets.
Order Handling
Defines source of original order.
Required for CME Group Futures and Options only.
| Value | Description |
|---|---|
DESK | Desk |
ELECTRONIC | Electronic (Default) |
VENDOR_PROVIDED_PLATFORM | Vendor-provided Platform billed by Executing Broker |
SPONSORED_ACCESS | Sponsored Access via Exchange API or FIX provided by Executing Broker |
ALGO_ENGINE | Premium Algorithmic Trading Provider billed by Executing Broker |
OTHER | Other, including Other-provided Screen |
Messaging Controls
To protect all market participants from the negative effects of excessive messaging,
CME Group has implemented the messaging controls for iLink Order Entry.
The connector prevents sending excessive messaging via defining appropriate rate limits:
cancelRateLimit = {
maxRequestCount = 1000
rateLimitInterval = 3s
}
appRateLimit = {
maxRequestCount = 500
rateLimitInterval = 3s
}
Traders Mapping
A mapping can be configured to send a specific SenderID/LocationID for a given TraderID.
If senderId is missing or empty then traderId is used instead.
If locationId is missing or empty then default value (senderLocationId) is used.
useTrader = true
senderId = "ANDY"
senderLocationId = "ML,US"
traders = [
{traderId = "nick", senderId = "NICK", locationId = "BY"},
{traderId = "eugene", senderId = "GENE"}, # locationId is default ("ML,US")
{traderId = "BRIAN"}, # senderId is "BRIAN" and locationId is default ("ML,US")
]
Market Segment Gateways
MSGW configuration is available on CME FTP site:
/MSGW/Production/Configuration/MSGW_Config.xml
Symbology
CME iLink3 requires a numeric Security ID.
By default, numeric IDs are expected in the cmeSymbol column.
Some instruments also require a price multiplier in the cmePriceMultiplier column.
Instruments for the production environment are available on the CME FTP site:
/SBEFix/Production/secdef.dat.gz
Schedule
| Parameter | Value |
|---|---|
| Time Zone | America/Chicago |
| Start Day | Sunday |
| Start Time | 16:00:00 |
| End Day | Friday |
| End Time | 16:00:00 |
| Daily Session? | No |
Configuration
Connector settings
| Parameter | Default Value | Description |
|---|---|---|
| attributeKey | cme | Prefix for broker symbol column: [attributeKey]Symbol - cmeSymbol. |
| ➡️ Logging Settings | ||
| log.logMaxFiles | 30 | Max number of log files to keep on disk. |
| log.logMaxFileSize | 100M | Max file size of single log file. |
| log.logBufferSize | 8M | Max buffer size. |
| ➡️ Session Settings | ||
| host | Primary Host | |
| port | Primary Port | |
| backupHost | Backup Host | |
| backupPort | Backup Port | |
| session | Session ID. | |
| firm | Firm ID. | |
| accessKey | AccessKeyID assigned to this session on this port. | |
| secretKey | SecretKeyID assigned to this session on this port. | |
| senderId | Default Operator ID. | |
| senderLocationId | US,MA | Default SenderLocationID - ISO identifier of the physical location of trader. |
| eventExchange | The exchange value to be returned in order events. | |
| useTrader | false | Use request's Trader ID (if provided) as SenderID. |
| resetSeqNums | false | Flag to reset CME session. |
| ➡️ Rate Limits Settings | ||
| cancelRateLimit.maxRequestCount | 1000 | Reject rate limit threshold for cancel requests. |
| cancelRateLimit.rateLimitInterval | 3s | Interval for cancel request rate limit. |
| appRateLimit.maxRequestCount | 1000 | Reject rate limit threshold for non-cancel application requests. |
| appRateLimit.rateLimitInterval | 3s | Interval for non-cancel application request rate limit. |
| ➡️ Order Cache Settings | ||
| cache.initialActiveCacheSize | 256 | Initial active order cache size. |
| cache.inactiveCacheSize | 8192 | Inactive order cache size. |
| ➡️ Order Entry Service Gateway | ||
| orderEntryService.host | Order Entry Service Gateway (OESGW) primary host. | |
| orderEntryService.backupHost | Order Entry Service Gateway (OESGW) backup host. | |
| orderEntryService.declaredPartyDetails[] | The array of Party Details definitions which should be registered upon session reset. | |
| orderEntryService.registeredPartyDetails[] | The array of pre-registered Party Details definitions which should be used as is. | |
| ➡️ Declared Party Details Settings_ | Properties of item in orderEntryService.declaredPartyDetails[] | |
| key | Unique identifier for given Party Details definition. | |
| requestType | PRE_REGISTERED | The type of Party Details definition. Allowed values: PRE_REGISTERED, ON_DEMAND. |
| account | Customer account. | |
| operator | This value represents the individual or team submitting the message and is subject to registration requirements and character limits as required by Rule 576. | |
| executingFirm | Executing firm. | |
| orderHandling | Defines source of original order. Allowed values: DESK, ELECTRONIC, VENDOR_PROVIDED_PLATFORM, SPONSORED_ACCESS, ALGO_ENGINE, OTHER | |
| clearingAccountType | Designates the account type to use for the order when submitted to clearing. Allowed values: FIRM, CUSTOMER. | |
| customerOrderCapacity | Capacity of customer placing the order. Allowed values: CTI_1, CTI_2, CTI_3, CTI_4 | |
| selfMatchPreventionInstruction | Used to act upon the outcome when a self-match is detected and an order is prevented from trading against another order with the same SelfMatchPreventionID. Allowed values: CANCEL_NEWEST, CANCEL_OLDEST | |
| selfMatchPreventionId | Identifies an order or trade that should not be matched to an opposite order or trade if both buy and sell orders for the same asset contain the same SelfMatchPreventionID and were submitted by the same firm. | |
| orderEntryService.registeredPartyDetails[] | The array of pre-registered Party Details definitions which should be used as is. | |
| ➡️ Pre-registered Party Details Settings | Properties of item in orderEntryService.registeredPartyDetails[] | |
| key | Unique identifier for given Party Details definition. | |
| requestId | Party Details Request ID. |
Supported order attributes
| Key | Description |
|---|---|
| 50, 5392 | SenderD(5392). Operator ID. This value represents the individual or team submitting the message and is subject to registration requirements and character limits as required by Rule 576. |
| 142, 9537 | LocationID(9537). ISO identifier of the physical location of the individual or team head trader identified by the tag 5392 (SenderID) in the message. |
| 9373 | LiquidityFlag(9373). Indicates if an order was submitted for market making obligation as required for MIFID. Allowed values: 0 (False), 1 (True). |
| 7210 | The party details definition key defined in orderEntryService.partyDetailsMap. |
Tools
Security Definition Extractor
Extracts Security Metadata from secdef.dat file into securities.csv. \
Usage: cme-secdef-extractor --secdef <path-to-secdef-dat> [--output-dir <output-directory>] [--pattern <symbol-regex>]
- Docker
- Windows
docker compose exec ember /opt/deltix/ember/lib/custom/tools/cme-secdef-extractor --secdef /var/lib/emberwork/secdef.dat
set EMBER_INSTALL=C:/ember
set EMBER_WORK=C:/ember-work
%EMBER_INSTALL%/lib/custom/tools/cme-secdef-extractor.bat --secdef %EMBER_WORK%/secdef.dat --output-dir %EMBER_WORK%/cme