PVOL Algorithm
The Percent of Volume (PVOL) Algorithm executes large orders without excessive impact on market price. PVOL is similar to TWAP. The main difference from TWAP is that instead of sending equal chunks of order quantity at each interval, PVOL chunks are proportional to the volume traded on the market during each interval.
Order duration and slice intervals are controlled via similar custom attributes as TWAP and VWAP orders: Entry/Stop times, Duration, and Percent parameters.
At the end of each interval, PVOL calculates the total volume of trades that happened on the market VOL(Ti).
Quantity(Child Orderi) = VOL(Ti)*ParticipationVolume
When the order end time is passed, PVOL is cancelled.

Standard PVOL order parameters
| FIX Tag | Field name | Type | Req'd | Modifiable | Comments |
|---|---|---|---|---|---|
| 1 | Account | String | N | N | Trading Order account. All child orders will have the same trading account. |
| 55 | Symbol | String | Y | N | This tag is required. Human-readable instrument name as it is defined in Deltix Security Metadata. |
| 54 | Side | Char | Y | N | Order side ("1"=BUY or "2"=SELL) |
| 50 | SenderSubID | String | Y | N | Trader ID |
| 44 | Price | Price | N | Y | Limit Price. If provided, then child orders will use this limit price. |
| 38 | OrderQty | Qty | Y | Y | Order quantity |
| 76 | BrokerID | String | Y | N | "PVOL" (Deployment key of algo strategy) |
| 40 | OrdType | Char | Y | N | "X" (Denotes custom algo order) |
| 59 | TimeInForce | Char | N | Y | Time in Force of the child orders. All child orders are canceled at the end of order duration period regardless of time in force. ('0' = Day, '1' = Good Till Cancel) |
Custom PVOL order parameters
| FIX Tag | Field name | Type | Req'd | Modifiable | Comments |
|---|---|---|---|---|---|
| 6002 | OrderDuration | String | N | 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 order start time. This parameter is required when StopTime is not specified. The maximum value is 29:59:59. Use StartTime and StopTime parameters for longer duration. |
| 6021 | StartTime | Timestamp | N | N | Defines order execution start time in UTC timestamp format: YYYYMMDD-HH:MM:SS.sss. If omitted, PVOL will start executing order immediately. |
| 6022 | StopTime | Timestamp | N | N | Defines order exit time in UTC timestamp format: YYYYMMDD-HH:MM:SS.sss. Required when Order Duration is not specified. |
| 6023 | Percent | Float | Y | N | Percentage of order duration time assigned to each clip. For example, the value "5" (5%) will split total order duration into 20 equal time intervals. |
| 6024 | ParticipationVolume | Float | Y | Y | Participation of strategy orders in total volume. Example: "2.5" means 2.5% of market volume. |
| 6027 | IntervalVariance | Float | N | Y | Percentage in the range from 0 to 50% that randomizes the fixed time interval between child orders. For instance, when 10% interval variance is specified, each next child order will be issued after an interval within 10% of the fixed time interval specified by Duration and Percent attributes. |
| 6029 | PriceTimeout | String | N | Y | Price timeout period in HH:MM:SS or HH:MM:SS.sss format. When specified, each clip order will be initially placed at the passive (top of the order book) price and then changed to the limit price if this child order has not been filled after this price timeout. |
| 7002 | EligibleExchanges | String | N | Y | This parameter is applicable when PVOL is configured to send child orders to SOR. Eligible Exchanges attribute is used to limit final exchange destination of the order and will be simply forwarded by PVOL with its child orders |
Example
We send an order: BUY 100 BTC/USD @ 11000.
- Duration is 10 minutes
- Percent is 5%
- Participation volume is 75%
PVOL splits 10 minutes into 5% parts (30 seconds).
At each interval, PVOL sends a child order for 75% of trading volume observed during the elapsed interval.
Depending on market conditions, PVOL may fill immediately, over several intervals, partially fill, or not fill at all. For example, if the trading volume is low, the participation volume parameter is set to a small number, and the minimum order size is large, the order will not fill. At the end of the order duration, PVOL is cancelled.
Configuration example
The following stanza shows how a PVOL algorithm can be configured in ember.conf:
algorithm {
PVOL: ${template.algorithm.default} {
factory = "deltix.ember.algorithm.pack.pvol.PVOLAlgorithmFactory"
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 = "SOR"
}
}
}
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. When omitted, child orders will be issued without destination and routed according to the rules of configured Ember Order Router |
| 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.
Child Order Routing
PVOL determines where to send child orders based on the defaultOrderDestination parameter in the configuration:
If defaultOrderDestination is set:
All child orders are sent to the specified destination.If defaultOrderDestination is not set:
Child orders are sent without an explicit destination and are routed based on the rules of the configured Ember Order Router. For example, the Default Order Router (used by Ember by default) will route child orders to the destination defined in the security metadata for the instrument, under the Broker ID field.
If you need to control child order destination via parent order attribute, configure the Simple Order Router.
This router sends orders to the destination specified by the Exchange ID attribute.
When using the Simple Order Router and no defaultOrderDestination is set, PVOL child orders will be sent to the exchange defined in the parent order’s Exchange ID.