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.
Standard ICEBERG order parameters
Tag | Field name | Type | Req'd | Comments |
---|---|---|---|---|
1 | Account | String | N | Trading Order account. All child orders will have the same trading account. |
55 | Symbol | String | Y | This tag is required. Human-readable instrument name as it is defined in Deltix Security Metadata. |
54 | Side | Char | Y | '1'=Buy '2'=Sell '5'=Sell Short '6'=Sell Short Exempt |
50 | SenderSubID | String | Y | Trader ID |
44 | Price | Price | Y | Order price |
38 | OrderQty | Qty | Y | Order quantity |
111 | MaxFloor | Qty | N | Limits 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. |
76 | ExecBroker | String | Y | "ICEBERG" (Deployment key of algo strategy) |
40 | OrdType | Char | Y | "X" (Denotes custom algo order) |
Custom ICEBERG order parameters
Tag | Field name | FIX Type | Req'd | Comments |
---|---|---|---|---|
6002 | OrderDuration | UTCTimeOnly | N | Order 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. |
7002 | EligibleExchanges | String | N | If 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). |
6028 | QuantityVariance | Float | N | The 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. |
6030 | MinTimeInterval | UTCTimeOnly | N | Minimum 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. |
6031 | MaxTimeInterval | UTCTimeOnly | N | Maximum 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. |
6032 | PriceIncrement | Float | N | Price 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 Name | Description |
---|---|
initialActiveOrdersCacheSize | Optional, int. Initial active orders cache size. |
initialClientsCapacity | Optional, int. Initial client capacity. |
maxInactiveOrdersCacheSize | Optional, int. Maximum inactive orders cache size. |
orderCacheCapacity | Optional, int. Order cache capacity. |
defaultOrderDestination | Optional, string, null by default. Destination of orders issued by the algorithm |
applyRequestTags | Optional, 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.