Spark's auction information comes directly from ASX.
We can't calculate it in realtime because the algorithm requires information that is not public, e.g. the actual volume of hidden orders.
The removal of the staggered opening has made some issues more apparent, although they have always been present in ASX Trade:
OSPA happens at a random time between 09:59:00 and 09:59:15.
OPEN happens at a random time between 09:59:45 and 10:00:00.
The auction at OSPA happens instantaneously, but it takes ASX some time to broadcast the events.
Normal trading days appear to take about 5 seconds.
During this time some stocks are processed before others, and there may be a gap between order changes and trades being sent.
There is no event to indicate that all of the events from the auction have been sent.
If an order change occurs within 500ms of OSPA, then ASX may not send the updated auction information at all, presumably because it will be cleared at the start of OSPA.
This means that ASX auction information can be incorrect at the moment of OSPA.
When a broker has both bids and asks for the same stock, and those orders match in the auction, the resulting trade is marked "Unintentional Crossing Prevention" (UCP) and it is not disseminated to the market.
This means that the volume executed at auction can be less than the auction information and even the total volume of orders matched during the auction.
New orders cannot be placed during OSPA but ASX may generate "Replenishments" of system managed orders that appear as new orders.