Skip to main content

ICEBERG Algorithm

The ICEBERG algorithm splits and executes large aggressive orders without excessive impact on the market price by limiting quantity of active child orders to the parent order display size. The algorithm issues child orders with the parent order limit price until the total parent order quantity is filled or until the time exceeds the specified order duration. The cumulative quantity of the active child order is defined by the DisplayQty input parameter.

ICEBERG Algorithm

Standard ICEBERG order parameters

TagField nameTypeReq'dComments
1AccountStringNTrading Order account. All child orders will have the same trading account.
55SymbolStringYThis tag is required. Human-readable instrument name as it is defined in Deltix Security Metadata.
54SideCharY'1'=Buy
'2'=Sell
'5'=Sell Short
'6'=Sell Short Exempt
50SenderSubIDStringYTrader ID
44PricePriceYOrder price
38OrderQtyQtyYOrder quantity
111MaxFloorQtyNLimits how much of the total order quantity can be displayed on exchange floor at any given time. When this attribute is provided, the order executes synthetically in smaller clips (not using an exchange supported iceberg). Must be greater than or equal to zero. When unspecified or equal to zero, the algo works the full order quantity.
76ExecBrokerStringY"ICEBERG" (Deployment key of algo strategy)
40OrdTypeCharY"X" (Denotes custom algo order)

Custom ICEBERG order parameters

TagField nameFIX TypeReq'dComments
6002OrderDurationUTCTimeOnlyNOrder duration in HH:MM:SS or HH:MM:SS.sss format. For example, 05:03:30 would be 5 hours, 3 minutes and 30 seconds from the time the order was initially entered (entry time captured during initialization).
Order duration sets the expiration time of the order. The entry time would be statically assigned, so if the user chooses later to modify the parameter to 03:00:00, the new calculated expiration time of the order would be from the initial entry time plus 3 hours.
7002EligibleExchangesStringNIf specified, restricts exchanges where order should be executed. Comma-separated list of exchange codes "COINBASE,BINANCE,GEMINI". Each exchange name must match Deltix exchange code. This tag is used for children orders (for example when sending children to SOR).
6028QuantityVarianceFloatNThe percentage in the range from 0 to 100 randomizes the quantity of child orders. For instance, when 50% quantity variance is specified, each next child order will be issued with the quantity within 50% of the quantity specified by MaxFloor attribute. For this example, if MaxFloor is set to 10 then child orders will range from 5 to 15.
6030MinTimeIntervalUTCTimeOnlyNMinimum interval between child orders in HH:MM:SS or HH:MM:SS.sss format. For example, 00:01:30 would be 1 minute and 30 seconds.
When specified, the next child order will be issued after specified interval from the moment the previous child order is completely filled.
6031MaxTimeIntervalUTCTimeOnlyNMaximum interval between child orders in HH:MM:SS or HH:MM:SS.sss format. For example, 00:01:30 would be 1 minute and 30 seconds.
When specified, interval between child orders will be chosen randomly in the min to max interval range.
6032PriceIncrementFloatNPrice increment that can be positive or negative that is used to calculate child order prices. The first child order will be issued at parent order limit price and each subsequent child order price will be incremented by specified amount.

Configuration example

The following stanza shows how the ICEBERG algorithm can be configured in ember.conf:

algorithm {
ICEBERG: ${template.algorithm.default} {
factory = "deltix.ember.algorithm.pack.iceberg.IcebergAlgorithmFactory"
subscription {
streams = ["COINBASE", "BINANCE", "KRAKEN"] # market data streams
symbols = [BTC/USD, LTC/USD, ETH/USD, LTC/BTC, BCH/USD, BCH/BTC, ETH/BTC]
}
settings {
defaultOrderDestination = "SIM"
}
}
}

Configuration

Here is the complete list of supported config settings:

Parameter NameDescription
initialActiveOrdersCacheSizeOptional, int. Initial active orders cache size.
initialClientsCapacityOptional, int. Initial client capacity.
maxInactiveOrdersCacheSizeOptional, int. Maximum inactive orders cache size.
orderCacheCapacityOptional, int. Order cache capacity.
defaultOrderDestinationOptional, string, null by default. Destination of orders issued by the algorithm
applyRequestTagsOptional, array of strings. [ 7002 ] by default. List of tags of parent order custom attributes that should be included with child orders if available. This list can contain individual keys or a range of keys from a min and up to a max. Min and max key in the range will be separated by '-'. For example: "applyRequestTags = [ 7002, 1-1000 ]", where the second value is a range of keys that includes all keys from 1 to 1000

Please refer to Ember's Configuration Reference for more information about algorithm deployment options.