Strasmore Research
Learn Matt ConnorBy Matt Connor

Midpoint Peg Orders Explained: Half-Cent Fills

A midpoint peg order floats at the middle of the national best bid and offer. See how half-cent price improvement works and when it is worth almost nothing.

A midpoint peg order is an order that floats at the middle of the national best bid and offer instead of resting at a fixed price of its own. It is the mechanism behind a confirmation that reads $10.005 on a market quoted 10.00 bid and 10.01 offered: half a cent of price improvement per share, which is exactly half the spread. The trade-off is real. The order holds no place in the displayed queue, and it fills only when a contra order crosses to meet it.

What is a midpoint peg order?

A peg order does not carry a price you type in. It carries a rule: track this reference, and re-price whenever the reference moves. For a midpoint peg the reference is the national best bid and offer, or NBBO, the highest bid and lowest offer available across all US exchanges at that instant. The midpoint is the number halfway between them. Quote a stock 10.00 by 10.01 and the midpoint is 10.005. Move the quote to 10.02 by 10.03 and the peg follows to 10.025, with no cancel and no replace.

Two things fall out of that design. The first: a midpoint peg is hidden whenever the spread is an odd number of cents. Regulation NMS Rule 612, the sub-penny rule, bars quoting a stock over $1 in increments finer than a penny. It does not bar trading at one. A half-cent price can be executed but never displayed, so the order rests dark.

The second: the value of a midpoint fill is fixed at half the spread. Buying at the midpoint rather than lifting the offer saves half a spread per share, and selling at the midpoint rather than hitting the bid saves the same. That single fact decides whether the order type is worth anything on a given name.

How much is a midpoint fill worth?

Half of a very small number is a very small number. The panel below takes six household names over one pinned hour, 10:00 to 11:00 a.m. ET on Wednesday, June 17, 2026, and averages the quoted spread across every NBBO update. The second bar on each name is that spread halved.

QueryAverage NBBO spread and the midpoint saving, 10:00 to 11:00 a.m. ET, June 17 2026
The exact SQL behind every number
SELECT
    ticker                                                            AS symbol,
    round(avg(toFloat64(ask_price) - toFloat64(bid_price)) * 100, 2)  AS spread_cents,
    round(avg(toFloat64(ask_price) - toFloat64(bid_price)) * 50, 2)   AS half_spread_cents
FROM global_markets.cache_stocks_quotes
WHERE ticker IN ('SPY', 'KO', 'AAPL', 'MSFT', 'NVDA', 'BLK')
  AND sip_timestamp >= '2026-06-17 14:00:00'
  AND sip_timestamp <  '2026-06-17 15:00:00'
  AND bid_price > 0
  AND ask_price > bid_price
GROUP BY ticker
ORDER BY spread_cents ASC
Run this yourself

The tightest market of the six was KO, averaging 1.55 cents wide, where a midpoint fill was worth 0.78 cents a share. The widest was BLK at 170.76 cents, worth 85.38 cents a share. Same order type, same hour, two very different amounts of money. That gap is why a midpoint peg is a serious tool in a wide market and close to a rounding error in a penny-wide one.

Does the spread hold still through the day?

It does not, and the midpoint saving moves with it. The next panel follows one of those names, BLK, through eight hours of the same session in half-hour buckets on the New York clock. Nothing in the query knows when regular trading opens or closes.

QueryBLK quoted spread and quote activity by half-hour ET bucket, June 17 2026
The exact SQL behind every number
SELECT
    formatDateTime(
        toStartOfInterval(toTimeZone(sip_timestamp, 'America/New_York'), INTERVAL 30 MINUTE),
        '%H:%i')                                                      AS et_time,
    round(avg(toFloat64(ask_price) - toFloat64(bid_price)) * 100, 2)  AS spread_cents,
    count()                                                           AS quote_count
FROM global_markets.cache_stocks_quotes
WHERE ticker = 'BLK'
  AND sip_timestamp >= '2026-06-17 13:00:00'
  AND sip_timestamp <  '2026-06-17 21:00:00'
  AND bid_price > 0
  AND ask_price > bid_price
GROUP BY et_time
ORDER BY et_time ASC
Run this yourself

The two ends of this window fall outside regular trading hours, before 09:30 and after 16:00, where the quote is a different animal. The 09:00 bucket averaged 2000.39 cents wide. The 16:30 bucket averaged 319.6 cents. Through the middle of the session the same name quotes far tighter, on far more updates. A midpoint peg near the open tracks a wider and faster reference than the same order at midday, which cuts both ways: more improvement per fill, and a reference that can travel while the order waits.

Where do half-cent prints come from?

A price ending in half a cent cannot be quoted, so a print at one is a strong hint that a trade crossed at a midpoint. The panel below takes the same six names over the same hour and checks, for every reported trade, whether the price sat on a whole cent or somewhere finer.

QueryShare of trades printed off the penny grid, 10:00 to 11:00 a.m. ET, June 17 2026
The exact SQL behind every number
SELECT
    ticker                                                                                   AS symbol,
    round(countIf(toUInt64(round(toFloat64(price) * 10000)) % 100 != 0) / count() * 100, 1)  AS sub_penny_pct,
    round(countIf(toUInt64(round(toFloat64(price) * 10000)) % 100 =  50) / count() * 100, 1) AS half_cent_pct
FROM global_markets.stocks_trades
WHERE ticker IN ('SPY', 'KO', 'AAPL', 'MSFT', 'NVDA', 'BLK')
  AND sip_timestamp >= '2026-06-17 14:00:00'
  AND sip_timestamp <  '2026-06-17 15:00:00'
  AND price > 0
GROUP BY ticker
ORDER BY sub_penny_pct DESC
Run this yourself

KO led the group: 70.5% of its trades that hour printed finer than a whole cent, and 7% printed at an exact half cent. At the other end, SPY printed 28.3% off the penny grid. Not every sub-penny print is a midpoint fill. A tenth-of-a-cent improvement and a volume-weighted average price fill land off the grid too. The half-cent column is the cleaner marker, since a half cent is precisely the middle of a one-cent market.

Splitting the same trades by where they were reported sharpens the picture. A trade matched away from an exchange, inside a dark pool or at a wholesaler, is reported through a FINRA trade reporting facility rather than by the venue that matched it.

QuerySub-penny print share by reporting route, off exchange against lit exchange
The exact SQL behind every number
WITH
    (
        SELECT groupArray(toString(id))
        FROM global_markets.stocks_exchanges
        WHERE lower(asset_class) = 'stocks'
          AND (lower(type) = 'trf' OR positionCaseInsensitive(name, 'FINRA') > 0)
    ) AS trf_venue_ids
SELECT
    ticker AS symbol,
    round(countIf(has(trf_venue_ids, toString(exchange))
                  AND toUInt64(round(toFloat64(price) * 10000)) % 100 != 0)
          / countIf(has(trf_venue_ids, toString(exchange))) * 100, 1)      AS off_exchange_sub_penny_pct,
    round(countIf(NOT has(trf_venue_ids, toString(exchange))
                  AND toUInt64(round(toFloat64(price) * 10000)) % 100 != 0)
          / countIf(NOT has(trf_venue_ids, toString(exchange))) * 100, 1)  AS on_exchange_sub_penny_pct
FROM global_markets.stocks_trades
WHERE ticker IN ('SPY', 'KO', 'AAPL', 'MSFT', 'NVDA', 'BLK')
  AND sip_timestamp >= '2026-06-17 14:00:00'
  AND sip_timestamp <  '2026-06-17 15:00:00'
  AND price > 0
GROUP BY ticker
HAVING countIf(has(trf_venue_ids, toString(exchange))) > 0
   AND countIf(NOT has(trf_venue_ids, toString(exchange))) > 0
ORDER BY off_exchange_sub_penny_pct DESC
Run this yourself

On KO, 86.1% of prints reported away from an exchange landed on a fraction of a cent, against 11.7% of prints matched on a lit exchange. Both routes run midpoint mechanics. Off exchange, a wholesaler prices a retail market order inside the quote, and a dark pool crosses two midpoint orders. On exchange, the same idea appears as a hidden midpoint order type and as retail price improvement programs.

Midpoint peg, limit order, iceberg: what differs?

A limit order names a fixed price and joins the displayed queue there. Its strength is priority: within a price level, resting orders are generally worked in the sequence they arrived, so a limit order at the bid holds a place in line. Its weakness is that the price is static, and the quote can walk away from it.

A midpoint peg inverts both properties. There is no public queue to join at the midpoint, since nothing is displayed there. The price is never stale, since it is recalculated from the NBBO on every update.

An iceberg order sits between them. It rests at a displayed price and shows only a slice of its size, refreshing the visible portion as it fills. An iceberg is a display tactic wrapped around a fixed price. A midpoint peg is a pricing rule with no display at all.

Snap-to-midpoint variants are a fourth shape. A snap order reads the midpoint once, at arrival or when a trigger fires, and converts to a fixed limit at that price. On a still quote a snap and a peg fill in the same place. On a moving quote they separate. Broker labels vary, and one platform's midpoint peg is another's midpoint match, but the mechanism underneath is the same.

When is a midpoint peg the wrong tool?

Four situations where the order type gives back more than it earns.

  • The spread is already a penny. Half a penny per share is fifty cents on a 100-share order, and waiting for a contra order can cost more than that in drift.
  • Getting filled matters more than the fill price. A midpoint order waits until something crosses to it, which in a thin name can run long.
  • The order is small and already routed to a wholesaler. Retail market orders in the most liquid names often receive sub-penny improvement without anyone asking for it.
  • Visibility is the point. A displayed limit order advertises interest and can draw out a contra side. A hidden midpoint order advertises nothing.

FAQ

What is a midpoint peg order in plain English?

It is an order priced at the middle of the current best bid and best offer rather than at a price you choose. When the quote moves, the order re-prices itself to the new midpoint without being cancelled and replaced.

Is a midpoint peg the same as a dark pool order?

They overlap without being identical. A midpoint peg is hidden whenever the midpoint lands on a half cent, since sub-penny prices cannot be displayed, and midpoint matching is how dark pools cross most of their volume. Exchanges also run hidden midpoint order types, so a midpoint order is not automatically an off-exchange one.

Why does my trade confirmation show a half-cent price?

A half cent is the exact middle of a one-cent-wide market. A fill at 10.005 against a 10.00 by 10.01 quote is a trade that crossed at the midpoint, either in a dark venue or through a price improvement mechanism at an exchange or a wholesaler.

Does a midpoint peg order always get filled?

No. It rests until a contra order is willing to trade at the midpoint. In a wide, thin market that can take a long time, or never happen at all, while a displayed limit order would at least hold a queue position at a price the market can see.

How these panels were built

The pinned session is Wednesday, June 17, 2026. Spreads come from consolidated NBBO updates with a bid above zero and an offer above the bid, averaged over updates rather than weighted by time. A print counts as sub-penny when its price is not a whole number of cents, and as a half-cent print when it ends in exactly half a cent.


Every panel ships with the SQL that produced it, so the spread arithmetic is open to inspection. To measure the spread and the midpoint saving on a name over a window you choose, ask the question in plain English on the Strasmore terminal.