Session3:
Multiple market phases and order types in
12 March 2012
The aim of this session is to learn about the concept of a trading platform, focusing on the ASX system. It describes the cycle of market phases and different order types in reference to the ASX but the concepts can be applied to other exchanges.
The Australian Securities Exchange (
In November 2010, ASX launched its next
generation trading system, ASX Trade, providing the fastest integrated equities
and derivatives trading platform in the world. ASX Trade is powered by NASDAQ
OMX’s Genium INET platform. Latency is now 100 times
faster than it was two years ago, having been improved from 30 milliseconds in
2008 to 300 microseconds today. The improved latency has been coupled with
increased capacity, rising from 20,000 orders per second to 100,000 orders per
second now.
Due to different trading platforms being used, there are significant
differences between trading data at different periods in time, particularly
before and after 2 October 2006 when the trading platform changed from SEATS to
ITS.
Capital markets normally apply phases
during the trading hour for the purpose of facilitating fair and efficient
market. The
Table 1: Trading phases in ASX (Sydney Times)
Time |
SEATS Market Phases |
2:25 am - 7:00 am |
Close |
7:00 am - |
Pre-Open |
10:00 am (in 5 blocks of companies with
random +/- 15 secs) |
Opening |
|
Normal Trading |
|
End of Trading |
|
Pre-CSPA |
4:10 pm (With randomness) - 4.12 pm |
Closing Single Price Auction |
4:12 pm - 6:50 pm |
Adjustments |
6:50 pm – 6:59 pm |
Purge Orders |
6:59 pm - 7:00 pm |
System Maintenance |
7:00 pm - 7:am |
Close or System Unavailable |
The morning auction is split into groups to allow traders time to effectively manage their orders during the opening of trade. The opening rotation is split into five groups as follows:
· Group 1 10:00:00 am +/- 15 secs A-B e.g. ANZ, BHP
· Group 2 10:02:15 am +/- 15 secs C-F e.g. CPU, DJS, FXJ
· Group 3 10:04:30 am +/- 15 secs G-M e.g. GPT, IPL
· Group 4 10:06:45 am +/- 15 secs N-R e.g. QAN, RIO
· Group 5 10:09:00 am +/- 15 secs S-Z e.g. TLS, WOW
In the pre-open phase, brokers can enter orders but trades will not be generated. Immediately prior to the stock being placed in continuous trading mode it goes through an instantaneous phase called the opening, where the ASX computes opening prices according to a specific algorithm (see next section). Once stocks are open in normal trading mode they will normally trade continuously until 4:00 pm when they all close together. Between 4:00 pm and 4:10 pm (Pre-CSPA phase) , the market is placed in Pre-open mode i.e. no matching occurs but brokers can enter, change and cancel orders in preparation for the market closing. The Closing Single Price Auction takes place between 4:10* pm and 4:12 pm and the algorithm used is similar to the one used in the opening phase.
For more details about the other phases, see ASX Web Site (http://www.asx.com.au/products/ASX-Trading%20hours-Market-phases.htm.)
In call markets, a matching algorithm is
exercised when the market is called. A unique set of market opening
procedures is used on
For details about the currently used algorithm, see: http://www.asx.com.au/products/calculate-open-close-prices.htm. The algorithm requires prices to be specified in fixed increments or “price steps”. The rules regarding price steps are listed in http://www.asx.com.au/resources/price.htm.
Click on the link above for a description and examples. This algorithm is easier to implement as it is well specified.
Participants on the
Orders are typically of two generic types: limit or market orders. A limit order is an order to buy or sell at a specified price. A market order is an order to buy at the best limit ask price or sell at the best limit bid price at the time the order is placed. Therefore, unlike limit order, a market order will not be queued in the orderbook since it is matched as soon as it is entered into the trading engine.
The trading engine allows brokers to place one of a variety of types of limit orders, thereby providing them with some degree of flexibility. The type of limit order placed is confidential and is not shown to other brokers. Specific types of orders are differentiated by qualifiers (described in next activity).
Trades can be broadly classified as on-market or off-market. On market trades may result from either the overlapping of two limit orders or a crossing order on trading engine. Off-market trades do not play a role in the orderbook and can be ignored.
Trades can also be categorised according to whether they are buyer or seller initiated trades.
· Buyer initiated trades occur when a market buy order executes against a limit sell order. This type of trades incur a buyer extra cost for a value = spread*volume.
· Seller initiated trades occurs when a market sell order executes against a limit buy order. This type of trades incur a seller extra cost for a value = spread*volume.
So far, all orders submitted in the input files were limit orders because they are queued up in the orderbook according to price/time criteria. A limit order remains in the orderbook until it becomes at the front and an order from the opposite side of the orderbook has matched its price. A limit order can also be canceled or amended explicitly by the owner broker as described in Session 1.
In order to accommodate other types of
orders, an additional column with a header “Qualifiers” is provided in the
Here is a description of some of
the qualifiers and their history.
Next, we will describe a separate example for three order types (market order, fill-and-kill, all-or-nothing).
Consider the following orders input file:
#Instrument,Date,Time,Record
Type,Price,Volume,Value,Qualifiers,Trans ID,Bid ID,Ask ID,Bid/Ask
Market
in preopening phase
HIJ,1-Apr-05,7:33:26,ENTER,421,400,168400,,5044,889024888125048,,B
HIJ,1-Apr-05,7:33:41,ENTER,422,20000,844000,,5045,657291406094408,,B
HIJ,1-Apr-05,7:34:03,ENTER,422,1000,422000,,5046,242062359407230,,B
HIJ,1-Apr-05,7:45:35,ENTER,422,5000,2110000,,5047,1127193705767590,B
HIJ,1-Apr-05,7:46:03,ENTER,420,5000,2100000,,5048,,253803710837903,B
HIJ,1-Apr-05,7:46:24,ENTER,425,6000,2550000,,5049,,1265162355224700,A
HIJ,1-Apr-05,7:46:41,ENTER,426,800,340800,,5050,,160695464670030,A
HIJ,1-Apr-05,7:48:34,ENTER,425,8000,3400000,,5051,,1207277960876310,A
HIJ,1-Apr-05,7:48:34,ENTER,423,1000,423000,,5052,,
1207277960879500,A
Opening algorithm followed by continuous
phase starts here
The current orderbook for this file is:
Ask[5050], 426.0,
vol:800.0, [160695464670030]
Ask[5051], 425.0,
vol:8000.0, [1207277960876310]
Ask[5049], 425.0,
vol:6000.0, [1207277960876310]
Ask[5052], 423.0,
vol:1000.0, [1207277960879500]
<--spread=1.0-->
Bid[5045], 422.0,
vol:2000.0, [657291406094408]
Bid[5046], 422.0,
vol:10000.0, [242062359407230]
Bid[5047], 422.0,
vol:5000.0, [1127193705767590]
Bid[5044], 421.0,
vol:400.0, [889024888125048]
Bid[5048], 420.0,
vol:5000.0, [253803710837903]
Let’s now demonstrate the submission of the following orders:
HIJ,1-Apr-05,7:51:26,ENTER,800,,,J,5053,1507277560876710,,B
HIJ,1-Apr-05,7:52:26,ENTER,7000,,,J,5054,1607277560898710,,B
The generated trades after executing the two cases are shown in the output file as follows:
Market in
preopening phase
HIJ,1-Apr-05,7:33:26,ENTER,421,400,168400,5044,889024888125048,,B
HIJ,1-Apr-05,7:33:41,ENTER,422,2000,844000,5045,657291406094408,,B
HIJ,1-Apr-05,7:34:03,ENTER,422,1000,422000,5046,242062359407230,,B
HIJ,1-Apr-05,7:45:35,ENTER,422,5000,2110000,5047,1127193705767590,B
HIJ,1-Apr-05,7:46:03,ENTER,420,5000,2100000,5048,,253803710837903,B
HIJ,1-Apr-05,7:46:24,ENTER,425,6000,2550000,5049,,1265162355224700,A
HIJ,1-Apr-05,7:46:41,ENTER,426,800,340800,5050,,160695464670030,A
HIJ,1-Apr-05,7:48:34,ENTER,425,8000,3400000,5051,,1207277960876310,A
HIJ,1-Apr-05,7:48:34,ENTER,423,1000,423000,5052,,
1207277960879500,A
Opening algorithm followed by continuous
phase starts here
HIJ,1-Apr-05,10:01:03,TRADE,426,800,340800,5053,1507277560876710, 1207277960876310
HIJ,1-Apr-05,10:02:03,TRADE,423,200,84600,5054,1607277560898710, 1207277960879500
HIJ,1-Apr-05,10:03:03,TRADE,425,6000,2550000,5055,1607277560898710, 1207277960876310
HIJ,1-Apr-05,10:04:03,TRADE,425,800,340000,5056,1607277560898710, 1207277960876310
Consider the following input file:
#Instrument,Date,Time,Record
Type,Price,Volume,Value,Qualifiers,Trans ID,Bid ID,Ask ID,Bid/Ask
Market in preopening phase
HIJ,1-Apr-05,7:33:26,ENTER,421,400,168400,,5044,889024888125048,,B
HIJ,1-Apr-05,7:33:41,ENTER,422,2000,844000,,5045,657291406094408,,B
HIJ,1-Apr-05,7:34:03,ENTER,422,1000,422000,,5046,242062359407230,,B
HIJ,1-Apr-05,7:45:35,ENTER,422,5000,2110000,,5047,1127193705767590,B
HIJ,1-Apr-05,7:46:03,ENTER,420,5000,2100000,,5048,,253803710837903,B
HIJ,1-Apr-05,7:46:24,ENTER,425,6000,2550000,,5049,,1265162355224700,A
HIJ,1-Apr-05,7:46:41,ENTER,426,800,340800,,5050,,160695464670030,A
HIJ,1-Apr-05,7:48:34,ENTER,425,8000,3400000,,5051,,1207277960876310,A
HIJ,1-Apr-05,7:48:34,ENTER,423,1000,423000,,5052,,
1207277960879500,A
Opening algorithm followed by continuous
phase starts here
This generates
the following orderbook:
Ask[5050], 0426.0, vol:800.0,
[160695464670030]
Ask[5051], 0425.0, vol:8000.0, [1207277960876310]
Ask[5049], 0425.0, vol:6000.0,
[1265162355224700]
Ask[5052], 0423.0, vol:1000.0,
[1207277960879500]
<--spread=1.0-->
Bid[5045], 0422.0, vol:2000.0,
[657291406094408]
Bid[5046], 0422.0, vol:1000.0,
[242062359407230]
Bid[5047 ], 422.0, vol:5000.0,
[1127193705767590]
Bid[5044], 421.0, vol:400.0,
[889024888125048]
Bid[5048], 420.0, vol:5000.0,
[253803710837903]
Let’s now demonstrate the submission of a fill-and-kill order by trader “960”for a volume of 24000. Such order can be demonstrated by submitting the following transaction:
HIJ,1-Apr-05,7:49:26,ENTER,422,24000,10128000,E,5056,1807877568812310,,A
In this case, this fill-and-kill order attempt to fill as much as it can from the best bid orders. In this example, there are 3 orders at the best bid price of a total volume of 8,000 that are consumed by the fill-and-kill order. The remaining volume of the fill-and-kill order of 17,000 is dismissed and not placed in the orderbook. The content of the order book after processing this fill-and-kill order is as follows (not that fill-and-kill order which is not completely filled increases the spread by 1 price step):
Ask[5050], 0426.0, vol:800.0,
[160695464670030]
Ask[5051], 0425.0, vol:8000.0, [1207277960876310]
Ask[5049], 0425.0, vol:6000.0, [1265162355224700]
Ask[5052], 0423.0, vol:1000.0, [1207277960879500]
<--spread=2.0-->
Bid[5044], 421.0, vol:400.0,
[889024888125048]
Bid[5048], 420.0, vol:5000.0, [253803710837903]
The generated trades after executing the two cases are shown in the output file as follows:
Market in preopening phase
HIJ,1-Apr-05,7:33:26,ENTER,421,400,168400,5044,889024888125048,,B
HIJ,1-Apr-05,7:33:41,ENTER,422,2000,844000,5045,657291406094408,,B
HIJ,1-Apr-05,7:34:03,ENTER,422,1000,422000,5046,242062359407230,,B
HIJ,1-Apr-05,7:45:35,ENTER,422,5000,2110000,5047,1127193705767590,B
HIJ,1-Apr-05,7:46:03,ENTER,420,5000,2100000,5048,,253803710837903,B
HIJ,1-Apr-05,7:46:24,ENTER,425,6000,2550000,5049,,1265162355224700,A
HIJ,1-Apr-05,7:46:41,ENTER,426,800,340800,5050,,160695464670030,A
HIJ,1-Apr-05,7:48:34,ENTER,425,8000,3400000,5051,,1207277960876310,A
HIJ,1-Apr-05,7:48:34,ENTER,423,1000,423000,5052,,
1207277960879500,A
Opening
algorithm followed by continuous phase starts here
HIJ,1-Apr-05,10:21:26,ENTER,422,E,5056,1807877568812310,,A
HIJ,1-Apr-05,10:22:03,TRADE,422,2000,844000,5057,657291406094408, 1807877568812310
HIJ,1-Apr-05,10:23:03,TRADE,422,10000,422000,5058,242062359407230, 1807877568812310
HIJ,1-Apr-05,10:24:03,TRADE,422,50000,2110000,5059,11271937055767590, 1807877568812310
Consider the following orders input file:
#Instrument,Date,Time,Record
Type,Price,Volume,Value,Qualifiers,Trans ID,Bid ID,Ask ID,Bid/Ask
Market
in preopening phase
HIJ,1-Apr-05,7:33:26,ENTER,421,400,168400,,5044,889024888125048,,B
HIJ,1-Apr-05,7:33:41,ENTER,422,2000,844000,,5045,657291406094408,,B
HIJ,1-Apr-05,7:34:03,ENTER,422,10000,422000,,5046,242062359407230,,B
HIJ,1-Apr-05,7:45:35,ENTER,422,5000,2110000,,5047,1127193705767590,B
HIJ,1-Apr-05,7:46:03,ENTER,420,5000,2100000,,5048,,253803710837903,B
HIJ,1-Apr-05,7:46:24,ENTER,425,6000,2550000,,5049,,1265162355224700,A
HIJ,1-Apr-05,7:46:41,ENTER,426,800,340800,,5050,,160695464670030,A
HIJ,1-Apr-05,7:48:34,ENTER,425,8000,3400000,,5051,,1207277960879000,A
HIJ,1-Apr-05,7:48:34,ENTER,423,1000,423000,,5052,,
1207277960879500,A
Opening algorithm followed by continuous
phase starts here
It generates the following orderbook:
Ask[5050], 426.0, vol:800.0,
[160695464670030]
Ask[5051], 425.0, vol:8000.0, [1207277960879000]
Ask[5049], 425.0, vol:6000.0, [1265162355224700]
Ask[5052], 423.0, vol:1000.0, [1207277960879500]
<--spread=1.0-->
Bid[5047], 422.0, vol:5000.0, [1127193705767590]
Bid[5046], 422.0, vol:10000.0, [242062359407230]
Bid[5045], 422.0, vol:2000.0, [657291406094408]
Bid[5044], 421.0, vol:400.0, [889024888125048]
Bid[5048], 420.0, vol:5000.0, [253803710837903]
Let’s now demonstrate the effect of submitting 4 All-or-nothing orders using these transactions:
HIJ,1-Apr-05,7:51:26,ENTER,422,24000,10128000,A,5056,
657291406094408,,A
HIJ,1-Apr-05,7:52:26,ENTER,422,16000,6752000,A,5060,7507277560898710,,A
HIJ,1-Apr-05,7:53:26,ENTER,425,16000,6800000,A,5061,857291406094408,,B
HIJ,1-Apr-05,7:54:26,ENTER,422,15000,6330000,A,5057,9507277560898710,,B
The generated
trades after executing the two cases are shown in output file as follows:
Market in
preopening phase
HIJ,1-Apr-05,7:33:26,ENTER,421,400,168400,5044,889024888125048,,B
HIJ,1-Apr-05,7:33:41,ENTER,422,2000,844000,5045,657291406094408,,B
HIJ,1-Apr-05,7:34:03,ENTER,422,1000,422000,5046,242062359407230,,B
HIJ,1-Apr-05,7:45:35,ENTER,422,5000,2110000,5047,1127193705767590,B
HIJ,1-Apr-05,7:46:03,ENTER,420,5000,2100000,5048,,253803710837903,B
HIJ,1-Apr-05,7:46:24,ENTER,425,6000,2550000,5049,,1265162355224700,A
HIJ,1-Apr-05,7:46:41,ENTER,426,800,340800,5050,,160695464670030,A
HIJ,1-Apr-05,7:48:34,ENTER,425,8000,3400000,5051,,1207277960879000,A
HIJ,1-Apr-05,7:48:34,ENTER,423,1000,423000,5052,,
1207277960879500,A
Opening algorithm followed by continuous
phase starts here
HIJ,1-Apr-05,10:01:26,ENTER,422,A,24000,A,5056,
657291406094408,,A
HIJ,1-Apr-05,10:02:26,ENTER,422,A,16000,A,5060,7507277560898710,,A
HIJ,1-Apr-05,10:22:03,TRADE,422,2000,844000,5061,657291406094408, 7507277560898710
HIJ,1-Apr-05,10:23:03,TRADE,422,10000,422000,5062,242062359407230, 7507277560898710
HIJ,1-Apr-05,10:24:03,TRADE,422,50000,2110000,5063,11271937055767590, 7507277560898710
HIJ,1-Apr-05,10:24:26,ENTER,425,16000,A,5061,
857291406094408,,B
HIJ,1-Apr-05,10:25:26,ENTER,422,15000,A,5062,9507277560898710,,B
HIJ,1-Apr-05,10:24:03,TRADE,423,1000,2110000,5063,9507277560898710, 1207277960879500
HIJ,1-Apr-05,10:25:03,TRADE,425,6000,2110000,5064,9507277560898710, 1265162355224700
HIJ,1-Apr-05,10:26:03,TRADE,425,8000,2110000,5065,9507277560898710, 1207277960879000