The Gateway to Algorithmic and Automated Trading

Implementation shortfall algorithm for illiquid stocks

Published in Automated Trader Magazine Issue 11 Q4 2008

Scott Bradley, Head of Electronic Client Solutions Sales EMEA and Chris Andrew, Head of Product Development for EMEA, Electronic Client Solutions at J.P. Morgan outline the use of an implementation shortfall algorithm designed for illiquid stocks to acquire a position in Victrex.

The Asset: Victrex PLC Ordinary Shares. The bid/offer spread in Victrex is volatile; the bulk of activity is in the 0.5-1.0p range, but excursions to 8p and beyond are not unheard of.

The Challenge: To buy 27,000 Victrex shares during the morning of September 17th 2008, at an average price of 735.5p.

The Algo: An implementation shortfall algorithm developed for illiquid securities that can scan both primary markets and dark pools for liquidity. Apart from limit price, maximum percentage of volume and start/stop times, the algorithm also allows the trader a choice of three urgency settings:

• High - will pay for large size if available

• Low - looks for best prices, but will not actively target size

• Medium - targets both advantageous price and (to some extent) size

Unusually for an algorithm of this type, it will post liquidity to the order book where necessary. The rationale is that the stocks for which this algorithm is intended have volatile and occasionally very wide dealing spreads that it is desirable to capture if possible.

However, while volatile, these spreads are nevertheless statistically stationary, so the algorithm is continually looking to exploit their mean reverting nature. By the same token, the algorithm is also most effective where the price (as well as the spread) of the security traded has a tendency to mean revert. (It is not intended for securities that trend strongly.)

The Trader: The trader works for an asset management firm that runs assorted mid cap funds across a variety of European markets.

Fig 1: The challenge - a two minute candlestick chart illustrating the sporadic trading nature of Victrex. The histogram at the bottom shows the ten day average LSE trade count for each two minute period.
click for a larger view

7.30am: After a very strong rally in the last five minutes of the preceding day's trading session, the trader anticipates that Victrex will probably gap up on the open, but then pull back and close the gap.

He sets the algorithm parameters as follows:

• Limit price - 735.5p

• Urgency - medium

• Maximum percentage of volume - 10%

• Start/stop times - open/close of LSE trading session

Victrex can display considerable volatility around the open and close, but this is often accompanied by an extended period of mean reverting price behaviour from mid morning to mid afternoon. In addition, Victrex closed the previous LSE trading session at 756.5p - more than 20p above the limit price for the order. The trader therefore thinks it unlikely that his order will trade much early in the session.

8.01am: Victrex gaps on the opening, with the first LSE trade printing at 767.5p.

8.15am: After the first 15 minutes of the session, Victrex has only displayed intermittent activity on the LSE, with the last print at 773p.

8.46am: The stock has pulled back sharply on light trade and has now closed the overnight gap to trade at 753p.

9.44am: Victrex has continued to decline and has now traded (very briefly) on the LSE at the trader's limit order. The trader elects to temporarily increase his limit price to 738.5p in the expectation of acquiring stock below his average price target later in the session.

9.50am: The consolidated bid/offer spread is now 5.5p

9.52am: The spread has fluctuated between 5.5p and 7.5p over the past two minutes.

9.55am: (Quantity filled - 298) The spread briefly closes to 2p. First trade - 298 shares on the bid at 738p on Chi-X. The spread immediately pops out again to 6p.

10.02am: (Quantity filled - 1470) The algorithm has continued to acquire stock in the 736.5-738.5p range. The spread has tightened appreciably and has mostly traded at 0.5p over the past two minutes. The average price per share paid so far is 737.65p.

Fig 2: Distribution of bid/offer spread size during the lifecycle of the trade (click for a larger view)
Fig 3: Volume accumulation histogram for the trade, with cumulative average price paid (right hand axis)
Fig 3: Volume accumulation histogram for the trade, with cumulative average price paid (right hand axis)
Fig 4: Timeline of a trade - illustrating how the algorithm’s willingness to post liquidity (if it perceives an opportunity) often allows it to save paying the spread.
Fig 4: Timeline of a trade - illustrating how the algorithm's willingness to post liquidity (if it perceives an opportunity) often allows it to save paying the spread. (click for a larger view)

10.04am: (Quantity filled - 1570) The price has now drifted back and is fluctuating in the 735-735.5p range. The trader moves the algorithm's limit price back to 735.5p.

10.07am: (Quantity filled - 3436) The spread has stabilised at 0.5p and the price has eased slightly to 735p. The trader decides to move the algorithm's urgency parameter to maximum, in order to take advantage of the conditions and reduce the average price paid.

10.09am: (Quantity filled - 14,239) The spread still steady at 0.5p. In the past five minutes, the increased urgency setting has seen the algorithm accumulate a significant amount of stock from assorted dark pools in the 735-735.5p range. The average price per share paid so far is 735.31p.

10.13am: (Quantity filled - 22,280) Victrex has continued to soften, mostly trading at 734.5-735p and the algorithm has capitalised on this to rapidly build the position. The average price per share paid so far is 735.09p. With the bulk of the order now complete, the trader resets the urgency parameter to medium.

10.17am: (Quantity filled - 24,407) The algorithm has been steadily picking up stock in blocks of between 100 and 500 over the past four minutes.

10:18am: (Quantity filled - 24,407) The volume on the ask spikes and the bid/offer spread jumps to 8p.

10.19am: (Quantity filled - 24,407) The spread has continued to trade in the 6-8p range with the ask in the 741-742.5p range. The algorithm declines to pay the spread.

10.20am: (Quantity filled - 27,000) The trade completes. After picking up one small block, the algorithm takes the opportunity to acquire its single largest block (2400 shares) of the session at 735p. The average price per share paid for the completed trade is 735.07p (see Figure 3).