Markets: A Rigorous Course

1.3 Call auctions and the equilibrium price

Advanced about 20 min

Motivation

The open and (since August 2026) the close are set by call auctions. They are also how trading restarts after a market-wide halt (1.5). The algorithm is simple and has a clean characterisation, which you will need when you study opening gaps and closing-auction imbalances.

1.3.1Cumulative demand and supply#

Setup

Orders are collected over a period and executed together at one price pp. Each buy order jj has a limit bjb_j (the most it will pay) and quantity qjq_j; a buy market order has bj=+∞b_j = +\infty. Each sell order kk has a limit aka_k (the least it will accept) and quantity rkr_k; a sell market order has ak=−∞a_k = -\infty. Let P\mathcal P be the finite set of distinct finite limit prices on either side. Define cumulative demand and supply:

D(p)=∑j: bj≥pqj,S(p)=∑k: ak≤prk.(1.1)D(p) = \sum_{j:\, b_j \ge p} q_j, \qquad S(p) = \sum_{k:\, a_k \le p} r_k. \tag{1.1}

DD is non-increasing and SS non-decreasing in pp. At a single clearing price pp, every buyer with bj≥pb_j \ge p is willing to trade and every seller with ak≤pa_k \le p is willing. The executable volume is

V(p)=min⁡{D(p),S(p)}.(1.2)V(p) = \min\{D(p), S(p)\}. \tag{1.2}

1.3.2The volume-maximising price#

The exchange rule (NSE, FAQs on Pre-open Session in Equity (CM) Segment, version of 1 Jul 2026, Q8, annexed to circular NSE/CMTR/74969) is: choose p∈Pp \in \mathcal P that maximises V(p)V(p); among ties, minimise the imbalance ∣D(p)−S(p)∣|D(p) - S(p)| (the unmatched quantity); among remaining ties, choose the price closest to a reference price (the previous close). If max⁡V=0\max V = 0 there is no equilibrium price; the stock opens on its first continuous-session trade.

Proposition 1.1the volume-maximising price is the crossing price

Assume V≢0V \not\equiv 0 on P\mathcal P. Let p∗=min⁡{p∈P:S(p)≥D(p)}p^* = \min\{p \in \mathcal P : S(p) \ge D(p)\} if this set is non-empty, and let p−p^- be the largest element of P\mathcal P below p∗p^* (if any). Then max⁡p∈PV(p)=max⁡{V(p−),V(p∗)}\max_{p \in \mathcal P} V(p) = \max\{V(p^-), V(p^*)\}. If S(p)<D(p)S(p) < D(p) for all p∈Pp \in \mathcal P, the maximum is at max⁡P\max \mathcal P. Restricting candidates to P\mathcal P loses nothing: no price outside P\mathcal P gives a larger VV.

Proof

Split P\mathcal P into L={p<p∗}L = \{p < p^*\} and U={p≥p∗}U = \{p \ge p^*\}. By definition of p∗p^* as the smallest price with S≥DS \ge D, every p∈Lp \in L has S(p)<D(p)S(p) < D(p), so V(p)=S(p)V(p) = S(p) there. SS is non-decreasing, so max⁡LV=S(p−)=V(p−)\max_L V = S(p^-) = V(p^-).

On UU we need S(p)≥D(p)S(p) \ge D(p) for all p≥p∗p \ge p^*, not just at p∗p^*. This holds because S(p)≥S(p∗)≥D(p∗)≥D(p)S(p) \ge S(p^*) \ge D(p^*) \ge D(p) for p≥p∗p \ge p^*, using the monotonicity of both functions. So V(p)=D(p)V(p) = D(p) on UU, and DD is non-increasing, so max⁡UV=D(p∗)=V(p∗)\max_U V = D(p^*) = V(p^*). Combining the two halves gives the first claim. If S<DS < D everywhere on P\mathcal P, then V=SV = S everywhere, and SS is non-decreasing, so the maximum is at the top price.

For prices outside P\mathcal P: DD and SS are left- and right-continuous step functions respectively, whose only jumps are at points of P\mathcal P. For pp strictly between consecutive points pi<pi+1p_i < p_{i+1} of P\mathcal P, D(p)=D(pi+1)D(p) = D(p_{i+1}) and S(p)=S(pi)S(p) = S(p_i). Hence V(p)=min⁡{D(pi+1),S(pi)}≤min⁡{D(pi),S(pi)}=V(pi)V(p) = \min\{D(p_{i+1}), S(p_i)\} \le \min\{D(p_i), S(p_i)\} = V(p_i), since D(pi+1)≤D(pi)D(p_{i+1}) \le D(p_i). Prices below min⁡P\min \mathcal P have the same DD as min⁡P\min\mathcal P (every finite buy limit is at least min⁡P\min\mathcal P) but SS equal only to market sells, so VV is no larger than V(min⁡P)V(\min \mathcal P); prices above max⁡P\max \mathcal P are symmetric.∎

The proposition says the auction finds the crossing of the demand and supply curves, as in a first-year economics diagram, with the discreteness handled by comparing the two prices adjacent to the crossing. The tie-breaks then pick, among volume-maximising prices, the one that leaves the least on the table and stays closest to the last known value.

Two further properties

  • Individual rationality. Every executed buyer has bj≥pb_j \ge p and every executed seller has ak≤pa_k \le p. No one trades at a price worse than their limit.
  • Allocation of the long side. At the chosen pp, the short side of the market fills completely; the long side is rationed. Market orders fill first, then limit orders by price and time priority. The unfilled residue of the long side becomes the imbalance, which carries into the continuous session as resting limit orders. (How unmatched pre-open market orders are priced when they carry over is set in the NSE pre-open FAQ; check it rather than assume.)

1.3.3Worked example: a pre-open book#

Worked example

A stock closed yesterday at ₹100.50. At the end of pre-open order entry the book is:

Buy limit (₹) Qty Sell limit (₹) Qty
market 100 98 200
102 300 99 300
101 200 100 300
100 400 101 400
99 500 102 600

Cumulative schedules:

pp 98 99 100 101 102
D(p)D(p) 1500 1500 1000 600 400
S(p)S(p) 200 500 800 1200 1800
V(p)V(p) 200 500 800 600 400

p∗=101p^* = 101 is the first price with S≥DS \ge D; p−=100p^- = 100. V(100)=800>V(101)=600V(100) = 800 > V(101) = 600, so the open is ₹100 with 800 shares traded. Sellers fill completely (800 = S(100)S(100)). On the buy side, 1,000 shares were willing; the market order (100) and the limits at 102 (300) and 101 (200) fill fully, and 200 of the 400 at ₹100 fill by time priority. The imbalance of 200 shares at ₹100 rests as the best bid when continuous trading starts. The stock opens 0.5% below yesterday's close.

This example is the fixture in the tests of Exercise m01_mechanics (in the app: Exercises → m01_mechanics). Implement auction_schedule and equilibrium_price there. The test checks your answer against a brute-force search over a fine price grid on 200 random books, which is a numerical check of Proposition 1.1.

Practitioner notes

  • During pre-open, exchanges display an indicative equilibrium price and the imbalance. Desks watch these to forecast the open. Because entry now ends at a random time and market orders are allowed only in the first five minutes, late indications are more reliable than early ones.
  • Thin stocks often have no crossing in pre-open, so the "open" in your data is just the first continuous trade.
  • The closing auction concentrates liquidity at one instant. Index funds rebalance there, so on index-rebalance days the closing imbalance can be large. Business Today (5 Aug 2026) reported sharp closing swings in the first days of CAS. Large imbalances are a signal to study, not a free trade: the price that clears them already includes the information.

Create a free account

Reading is open to everyone. An account keeps your progress, answers, notes and code drafts, and gives you the study plan, the journals and the simulator. Running code needs an account approved for it.