Extended Guide: Opening Auctions, Stop Orders & Gap Dynamics

The mechanics behind that first price you see every morning.

12 min read

1. Introduction

I got interested in this after a stop-loss order filled at a price way below what I expected. I had set a stop at 20, the stock gapped down overnight, and I ended up selling at 19. My first reaction was that something went wrong, but after digging into how opening auctions actually work, I realized the system did exactly what it was designed to do. I just didn't understand the mechanics.

This guide covers:

  • How stop-loss (stop-market) and stop-limit orders behave in gap-down scenarios
  • Why your execution price is often very different from your stop price
  • How the opening auction finds a single clearing price
  • How DAY vs GTC orders behave across the close
  • How to think about ADR fair value vs actual opening print

2. Stop-Market vs Stop-Limit

Stop-Market (Stop-Loss)

  • Triggered when last traded price is at or below your stop.
  • Converts into a market order.
  • Execution: almost always (barring halts).
  • Price: not guaranteed.

Example (gap down):

  • Close: 20.50
  • Your stop: 20.00
  • Next day open (auction price): 19.00

Result: your stop triggers and you sell at ~19.00, not at 20.00.


Stop-Limit

  • Triggered the same way: when last price ≤ stop.
  • Converts into a limit order.
  • Execution: not guaranteed.
  • Price: guaranteed (you won't sell below your limit).

Same example:

  • Stop = 20.00
  • Limit = 20.00
  • Opening auction price = 19.00

Result: no fill at the open. Your order just sits at 20.00 in the continuous session.


3. Why Stops Slip During Gaps

This is the part that tripped me up. A sell stop-loss doesn't actually sit in the order book at your stop price. It's more like a sleeping instruction: "when the price hits X, wake up and become a market order." The problem is that if the stock gaps past your stop overnight, the first price it trades at could be way below X, and that's exactly where you'll sell.

So if your stop is 20 and the first traded price of the day is 19, you're selling at roughly 19. The market doesn't owe you a fill at 20. That price simply never existed in the session.


4. Order Book Persistence: DAY vs GTC

At the end of the regular session:

  • DAY orders: expire automatically at the close.
  • GTC orders: remain active into the next session (unless canceled).

Most of the tight liquidity around the top of book (best bid/ask) is:

  • Intraday algos
  • HFTs
  • Short-term traders

These orders are usually DAY → they vanish at the bell.

So:

  • The book you saw at 16:00 does not carry into the open.
  • Overnight, a new book is effectively built from:
    • Remaining GTC orders
    • New orders submitted pre-open
    • Cancellations/modifications

5. Opening Auction Deep Dive

5.1 Goal of the Auction

The opening auction tries to find a single price P* that:

  • Maximizes the number of shares traded (matched volume)
  • Respects all limit prices and market orders

We'll describe it with simple functions using plain-text formulas.


5.2 Definitions

For a candidate price P:

  • BuyCum(P) = total buy size at prices ≥ P, plus any market buy orders.
  • SellCum(P) = total sell size at prices ≤ P, plus any market sell orders.

Then the number of shares that can actually trade at P is:

Match(P) = min( BuyCum(P), SellCum(P) )

The opening price P* is the price that gives the largest Match(P).

If there are ties, exchanges apply tie-break rules (more on that in a sec).


5.3 Cumulative Buy / Sell Curves

Visually:

  • As P goes down, BuyCum(P) tends to go up (more buy orders qualify).
  • As P goes up, SellCum(P) tends to go up (more sell orders qualify).

Where the two are closest and both large, the auction can match the most volume.


5.4 Example: Computing Match(P)

We use this example book (ignoring market orders for simplicity):

BUY SIDE

  • 50,000 @ 19.00
  • 30,000 @ 19.10
  • 10,000 @ 20.00

SELL SIDE

  • 70,000 @ 19.00
  • 40,000 @ 19.50
  • 25,000 @ 20.00

Let the candidate prices be: 19.00, 19.10, 19.50, 20.00.

P = 19.00

Buys at or above 19.00:

  • 50k @ 19.00
  • 30k @ 19.10
  • 10k @ 20.00
BuyCum(19.00) = 50k + 30k + 10k = 90k

Sells at or below 19.00:

  • 70k @ 19.00
SellCum(19.00) = 70k

Match:

Match(19.00) = min(90k, 70k) = 70k

P = 19.10

Buys at or above 19.10:

  • 30k @ 19.10
  • 10k @ 20.00
BuyCum(19.10) = 40k

Sells at or below 19.10:

  • 70k @ 19.00
SellCum(19.10) = 70k

Match:

Match(19.10) = min(40k, 70k) = 40k

P = 19.50

Buys at or above 19.50:

  • 10k @ 20.00
BuyCum(19.50) = 10k

Sells at or below 19.50:

  • 70k @ 19.00
  • 40k @ 19.50
SellCum(19.50) = 70k + 40k = 110k

Match:

Match(19.50) = min(10k, 110k) = 10k

P = 20.00

Buys at or above 20.00:

  • 10k @ 20.00
BuyCum(20.00) = 10k

Sells at or below 20.00:

  • 70k @ 19.00
  • 40k @ 19.50
  • 25k @ 20.00
SellCum(20.00) = 70k + 40k + 25k = 135k

Match:

Match(20.00) = min(10k, 135k) = 10k

Summary Table

P       BuyCum   SellCum   Match(P)
-----------------------------------
19.00   90k      70k       70k   <-- max
19.10   40k      70k       40k
19.50   10k      110k      10k
20.00   10k      135k      10k

So the opening price P* is:

P* = 19.00   (because Match(P) is largest at 19.00)

At the open:

  • All trades that participate in the auction execute at 19.00.
  • Buyers with limits at 20.00 do not trade at 20. They get 19.00 (better price).
  • Sellers with limits at 19.00 or below get 19.00.

5.5 Tie-Break Rules (Conceptual)

If two prices had the same Match(P), typical rules:

  1. Choose the price with the smallest imbalance:
    Imbalance(P) = |BuyCum(P) - SellCum(P)|
  2. If still tied, choose the price closest to the previous close or reference price.
  3. If still tied, apply exchange-specific logic (e.g., NYSE DMM discretion, NASDAQ rules, etc.).

You usually don't need to worry about tie-break details unless you're doing very low-latency stuff, but it's good to know they exist.


6. How Stop Orders Fit Into the Auction

Stop-Market (Sell)

Once triggered pre-open (or at the open), a stop-market becomes:

A market sell order with no price constraint.

In the auction math, it just increases SellCum(P) at all prices P.

Effect:

  • You are guaranteed to be included in the matched volume at the opening price (unless the stock is halted or similar).

Stop-Limit (Sell)

Once triggered, a stop-limit becomes:

A limit sell at your limit price.

In the auction:

  • It only contributes to SellCum(P) for prices ≥ your limit.
  • If the final auction clearing price is below your limit, it does not trade.

Example:

  • Stop = 20, Limit = 20
  • Auction result P* = 19

Then:

  • SellCum(19) does not include your order.
  • You get no fill at the open.

7. Classic Stop-Limit Gap Failure Scenario

Setup:

  • Close: 20.50
  • Overnight bad news.
  • You set: stop-limit sell (stop = 20, limit = 20).

Pre-open book implies the auction will clear around 19.

Auction:

  • P* = 19
  • Your order only wants 20 or better.
  • 19 is worse than 20, so your order is skipped.

After the open:

  • Stock trades through 18.50, 18.00, etc.
  • You're still long, unhedged.

The lesson here is clear but annoying:

  • Stop-limit protects you from bad fill prices, but it can leave you stuck in a falling stock.
  • Stop-market gets you out no matter what, but the price might hurt.

There's no perfect solution. You're choosing between two types of risk.


8. Auction Imbalances (High-Level)

Many exchanges publish real-time or delayed pre-open stats:

  • Paired volume: shares that would trade at the current indicative price.
  • Imbalance: excess buy or sell volume that would remain unfilled.
  • Indicative match price: current candidate P* if the auction ran now.

Big patterns:

  • Huge sell imbalance → likely open down.
  • Huge buy imbalance → likely open up.

Traders watch these to:

  • Adjust limit orders.
  • Decide whether to participate in the cross.
  • Anticipate gaps.

9. ADR Pricing & Fair Value

For an ADR like BABA:

ADR_FV = ( Local_Share_Price * ADR_Ratio ) / FX_Rate

Where:

  • Local_Share_Price = price of the share in its home market (e.g., HKD).
  • ADR_Ratio = how many local shares per ADR (e.g., 8).
  • FX_Rate = local currency per 1 USD (e.g., HKD per USD).

Example:

  • Local (HK) price = 80 HKD
  • ADR ratio = 8
  • FX (HKD per USD) = 7.80
ADR_FV = (80 * 8) / 7.80
ADR_FV ≈ 82.05 USD

Interpretation:

  • If ADR closed at 90 and HK session implies ~82, you expect a gap down toward 82.
  • But the exact US opening price is still decided by the US opening auction, using all US order flow.

This is not a guaranteed arbitrage opportunity for a typical retail trader, because:

  • You can't trade both legs (HK + ADR + FX) simultaneously at size with low cost.
  • You can't lock in prices cross-market like a professional arb desk.

10. Practical Trading Takeaways

  1. Stop-loss (stop-market)
    Use when: you absolutely want out, execution is priority.
    Risk: you may get a much worse price in a gap.
  2. Stop-limit
    Use when: price matters more than guaranteed exit.
    Risk: in a big gap, you may not exit at all.
  3. Gaps through stops are normal
    Your stop is a trigger, not a guarantee.
    The market doesn't "owe" you a trade at intermediate levels that never actually printed.
  4. Opening auction price is king
    Everyone in the cross trades at one price P*.
    Buyers with higher limits and sellers with lower limits all transact at P*.
    GTC orders at 20 won't pull the price up to 20 if all supply/demand agrees around 19.
  5. ADR fair value helps forecast, not arbitrage
    ADR opens generally toward FV but not necessarily at it.
    Use it as a reference, not a guarantee.