ICE provides many market types available for subscription. The full list is available in the Supported Market Types on ICE API document. Please use an KnownMarketTypes value in the first column, ID, as a value for the first constructor's argument of MarketSubscription.
When you don't know which market type ID to use, you can check it on the [All Futures, Options, OTC Products & Physicals] site. There are many products available, so you can review and select what you need. After this, you can click Product Codes to view the mapping and find the market type name. With this information, you can easily determine which market type ID should be used using the Market Type Name column in the Supported Market Types on ICE API document.
The ICE iMpact multicast groups are currently defined by a set of products (such as Europe Futures Oil) and by depth of book (Full Order Depth, Top 5 Price Level). The Handler provides the flexibility to subscribe to the multicast groups best suited to customers' individual needs.
Subscribing is a way to start receiving Multicast Price Feed market data. To subscribe to certain multicast groups as well as to select which type of books must be maintained by the Handler, an instance of MarketSubscriptions collection must be created and filled with items.
Once a blank collection instance is created, subscriptions for a particular market type can be added. This can be achieved by pushing items of type MarketSubscription into the collection. Each added item identifies the market type to which the subscription applies and the kinds of books the Handler is supposed to build and update while maintaining the subscription.
Depending on the security type, the following order book depths are available:
| Security Type | Order Book Depth |
|---|---|
| Futures | TOP5PL or FOD |
| UdsFuturesMarkets | TOP5PL or FOD |
| Options | TOB or TOP10PL |
| UdsOptionsMarkets | TOB or TOP10PL |
ICE offers two types of prices: implied and non-implied. You can use MarketSubType enum to specify the desired market subtype. Depending on your choice and if the implied multicast group is available, you will use one multicast group for implied prices and another for non-implied prices.
It is possible to specify one or more market IDs for each market subscription using MarketSubscription::marketIds. This set will be used as a first-level filter, and all product definitions which do not match this list will be ignored.
The second-level filter is a special boolean parameter, isInterested, which is available in the following callbacks:
This parameter can be used to determine whether a subscription for a given product definition should be maintained. By default, this value is set to true. If the given product definition is not of interest to you, just set it to false, and it will be removed from the market subscription, and the Handler won't process any messages with this market ID.
The Handler can maintain as many first- and second-level filters as needed. There are no limitations to these kinds of settings in the Handler implementation.
If you need to filter one set of product definitions depending on information from another set of product definitions, like you want to maintain only those Futures product definitions that are related to UdsFuturesMarkets you are interested in, you can use the following approach:
Afterwards, the constructed collection must be passed to Handler::start member, which causes the Handler to receive and process data for the markets specified in the subscription. Since that moment, Handler will notify about all the events through appropriate listeners. In particular, it will notify subscribers of the receipt of the product definitions. Later, about changes in states of markets, new orders added or removed to or from market books, and, surely, about errors, if any occurred during processing data from Multicast Price Feed channels.
Below is an example of creating a subscription for the IPE Brent Futures market of the ICE Futures Brent multicast group: