Accumulate Distribute

The Accumulate/Distribute algo can help you to achieve the best price for a large volume order without being noticed in the market, and can be set up for high frequency trading. By slicing your order into smaller randomly-sized order increments that are released at random time intervals within a user-defined time period, the algo allows the trading of large blocks of stock and other instruments without being detected in the market. The algo allows limit, market, and relative order types. When you put in a Relative Order, you must specify what it is relative to, and here you have a lot of choices. Of course, if it is relative to a fixed value then it is really a Limit Order, but you can make it relative to things like the prevailing bid, the ask, the last price, the VWAP or moving VWAP, the moving average or exponential moving average, your last trade price or the number of shares you have bought so far. There are many possibilities.

You must also input an offset to the data point that your order is relative to. Say you want to match the prevailing bid, then you put in BID and an offset of zero. If you want to be aggressive, you could put in the BID +0.01 (one cent). In this case you may also want to make sure that you do not lift the offer if the market is one cent wide, so you may further specify that in no case would you bid more than two cents under the ask.

You may specify additional restrictions, for example, that you want your bid to be no higher than the last trade price for the stock and no higher than one cent under your last buy price, and also no higher than the VWAP, or the exponential moving average for the last 25 minutes.

The possibilities are endless. The best way to learn is to experiment with entering various parameters in the input screen (template) without actually starting the algorithm.

The next question in specifying how you want the Accumulate/Distribute algorithm to operate is to decide whether or not you want to wait for the current order to be filled before the next order is submitted. If you do not, then additional orders will be transmitted at the randomized user-specified time intervals and they will accumulate into one or more sizable orders at the exchange. If you do check the box instructing the algorithm to wait for the fill before submitting the next order, which is recommended, then the more difficult the buying conditions that you put in, the more likely it will be that the algo will fall behind the schedule of buying 500 shares at every time interval.

Products Availability Routing TWS
Bonds US Products Smart Attribute
Forex Non-US Products Directed Order Type
Futures IBKR ATS Time in Force
FOPs Algo
View Supported Exchanges|Open Users' Guide

So the next question becomes: If you have fallen behind, do you want to catch up with the original schedule if the conditions allow? Selecting "Yes" means that the algorithm will not wait the full time interval between every order, but that the next order will be submitted immediately after an order is filled until you are caught up.

Specify whether the order will work only during regular trading hours or at other times too, and finally define whether or not you want to jump at a large offer. For example, if you are trying to buy a million shares and somebody comes along and -- either seriously or just to probe the market or push the stock around -- puts in a large offer you cannot let such an opportunity go by without taking advantage of it. So you want to jump at a large offer, but on the other hand you need to decide how much of your hand to show. Using the Accumulate Distribute algorithm, you can instruct the algorithm to take any large offer in excess of X shares (e.g., in this case maybe 200,000) that satisfies your conditions as to price, but take not more than you need to complete your purchase.

Accumulate Distribute Algo Short Video

For more short videos, see our IB Short Videos, Courses & Tours section.


ordertype example
Accumulate 1,000,000 shares of IBKR stock in 500 share increments every 30 seconds with the following conditions:
  • Randomize the price and time so our 500 share order every 30 seconds is not immediately detected.
  • Use a Relative order that is relative to the prevailing bid + 0.01, but not higher than the greater value of either the Ask -0.02 or the price of your last trade.
  • Wait for the current order to fill before submitting the next order.
  • Catch up in time if the algo falls behind.
  • Allow the order to work outside of regular trading hours.
  • Take the offer if the offer size is 200,000 or higher and this will not put the order size above the specified amount.