> ## Content Index
> Fetch the complete content index at: https://aligrithm.com/llms.txt
> Use this file to discover other available public pages before exploring further.

# 5.57 The Price Impact of Nothing: Rejected Orders Predict Returns
- URL: https://aligrithm.com/the-price-impact-of-nothing-rejected-orders-predict-returns/
- Published: 2026-10-24T14:00:00.000Z
- Updated: 2026-10-24T13:59:59.000Z
- Description: Hyperliquid post-only imbalance, from the last 100 submissions, forecasts the 10-second BTC perp mid after a rejection. The slope is a shared signal.
- Author: ali askar
- Tags: 5. Microstructure Alpha

The Hyperliquid BTC-USD perpetual is a price-time book with a one-dollar tick, and the spread sits on that tick almost all the time. A post-only buy sent at or above the ask would take liquidity, so the matching engine refuses it with the error BadAloPxRejected and drops it before it can rest. Albers, Cucuringu, Howison, and Shestopaloff rebuild every refusal of that kind from a private node for September 2025\. The count is about 60,310 a minute. The public book has no trace of the order. The mid over the next few seconds still tends to move with the side that was refused.

## A refused buy scores plus one

The refusal has a side. They code a signed indicator: plus one when the rejected order was a buy, minus one when it was a sell. The return they hang on that indicator is the mid change over the next 10 seconds, in basis points. They call it the post-submission price return, which keeps the cause out of the name.

$$ \\mathbf{1}\_t^{\\text{rej}} = \\mathbf{1}\_{\\{\\text{rejected buy}\\}\_t} - \\mathbf{1}\_{\\{\\text{rejected sell}\\}\_t} $$

The indicator records the side of one bounced ticket. A buy that would have crossed scores plus one. A sell that would have crossed scores minus one.

$$ R\_t = \\beta\_0 + \\beta\_1 \\, \\mathbf{1}\_t^{\\text{rej}} + \\epsilon\_t $$

R is the 10-second mid return in basis points. The slope is the change in the fitted return when the indicator rises by one. The fitted return at plus one, minus the fitted return at minus one, equals twice the slope.

Their univariate fit has intercept minus 0.1178 and slope 0.4242\. A refused buy lines up with minus 0.1178 plus 0.4242, which is 0.3064 bp over the next 10 seconds. A refused sell lines up with minus 0.1178 minus 0.4242, which is minus 0.5420 bp. The gap between those two fitted returns is 0.8484 bp. R-squared on the 10-second return is 0.022.

The same indicator agrees with the direction of the next mid change on 72.3 percent of refusals: a refused buy, then an up move, or a refused sell, then a down move. The median wait from the refusal to that change is about 2 seconds. When they switch the dependent variable from the 10-second return to that sign, R-squared rises to 0.0465\. Those are two clocks. The 72.3 percent is the next change. The slope of 0.4242 is the 10-second return.

The standard error they print on 0.4242 is 0.0003, so the t-statistic on the page is 0.4242 divided by 0.0003, which is 1,414\. The page does not say those errors were adjusted for overlap. At 60,310 refusals a minute, a 10-second window contains about 10,050 refusals. Rows inside one window share a return. An ordinary error treats them as separate draws. The slope can stay. Treat the stars as unadjusted until the error is reprinted with that overlap removed.

The flow is intentional. They describe one strategy that produces a lot of this traffic. The regressions use every post-only event, unfiltered by wallet, size, or batch. That strategy posts batches of post-only orders beyond the current best, on the side it expects the mid to move, often every 50 milliseconds. The aim is queue position. If the mid steps while the batch is in flight, one order can be first at the new best price. Arrive before the step and the order is still on the wrong side of the book, so the engine bounces it. When the price does move in flight, some of the batch still bounces and some is accepted. Everything accepted except the new top of book is cancelled at once. A few tens of wallets, with median refusal rates in the thousands per minute and peaks near 20,000, account for more than half of the refusals. The side of the bounce is the side of that bet. When the bet has any hit rate, the bounce lines up with the later mid. The bounce left the book unchanged.

![](https://storage.ghost.io/c/27/cb/27cb0fc8-2c77-4434-af9e-d5d32a916994/content/images/2026/10/article_466-visual-0.png)

Scale, from the counts they print. Refusals are 60,310 a minute, accepted orders 9,487, cancellations 31,675, and the three sum to 101,472 messages. Refusals are 60,310 divided by 101,472, which is 59.44 percent of messages. The table prints 59.43 percent, the figure that makes the three shares sum to 100\. The counts divide to 59.44 percent, so the printed share is off by 0.01 point and may have been rounded to force the column total. Of submissions alone, refusals are 60,310 divided by 69,797, which is 86.4 percent. They round that to about 86 percent. Conditional on refusal, the average notional is 54,693 dollars. Times 60,310, that is 3,298,534,830 dollars a minute, the 3.3 billion they quote. The old article ["An Open L4 Order Book: What Hyperliquid Data Unlocks"](https://aligrithm.com/an-open-l4-order-book-what-hyperliquid-data-unlocks/) is the public node dump of this same error code, counted on a December file as a share of status records. This cut is September, and the denominator is submissions. Same bounce, different month, different ratio.

## The last hundred post-only submissions hold the signal

One ticket is a draw from a stream. They build an imbalance on the refused volume in the 100 post-only submissions before the current one. The window is counted in submissions, not seconds, so a quiet stretch and a burst both contribute 100 tickets. They say windows of 10 and of 1,000 change the story little.

$$ \\mathrm{imb}\_t^{\\text{rej}} = \\frac{V\_{t,\\text{buy}}^{\\text{rej}} - V\_{t,\\text{sell}}^{\\text{rej}}}{V\_{t,\\text{buy}}^{\\text{rej}} + V\_{t,\\text{sell}}^{\\text{rej}}} $$

Numerator: refused buy volume minus refused sell volume in that preceding window. Denominator: the sum. The ratio sits between minus one and plus one, and the unit cancels as long as both sides use it. The current ticket is the signed indicator. It is not inside this window. The paper states the zero-denominator rule only for the accepted-order version of this ratio, so a window with no refusals is left unspecified. On this book that window is rare: 86 percent of submissions bounce.

Take 40 BTC of refused buys and 10 BTC of refused sells in the preceding hundred. The imbalance is 40 minus 10, over 40 plus 10, which is 30 over 50, so 0.60\. The sizes are picked so the fraction is obvious. Any common unit gives the same ratio.

$$ R\_t = \\beta\_0 + \\beta\_1 \\, \\mathbf{1}\_t^{\\text{rej}} + \\beta\_2 \\, \\mathrm{imb}\_t^{\\text{rej}} + \\epsilon\_t $$

The 10-second mid return is now an intercept, a slope on the current ticket, and a slope on the trailing refused-volume imbalance. Their fit is intercept minus 0.1237, ticket slope 0.1354, imbalance slope 0.5415\. R-squared moves from 0.022 to 0.033.

A refused buy with the trailing imbalance at plus one, every recent refusal a buy, fits minus 0.1237 plus 0.1354 plus 0.5415, which is 0.5532 bp. A refused buy with the trailing window balanced, imbalance zero, fits minus 0.1237 plus 0.1354, which is 0.0117 bp. The ticket slope fell from 0.4242 to 0.1354 once the window was in the regression. The window is carrying the association. The latest bounce is mostly a member of the window.

## Accepted posts in that window are the weaker flow

The control is the post-only orders in the same preceding hundred that the engine accepted at or inside the best price. Orders accepted behind the touch are left out. The ratio has the same shape.

$$ \\mathrm{imb}\_t^{\\text{open}} = \\frac{V\_{t,\\text{buy}}^{\\text{open}} - V\_{t,\\text{sell}}^{\\text{open}}}{V\_{t,\\text{buy}}^{\\text{open}} + V\_{t,\\text{sell}}^{\\text{open}}} $$

Accepted buy volume at the touch, minus accepted sell volume at the touch, over the sum, inside those 100 submissions. If both volumes are zero, they set the imbalance to zero so the ratio stays defined. That zero pulls the feature toward silence in a burst where every ticket bounced.

Take 12 BTC accepted on the buy side and 8 BTC accepted on the sell side inside the same hundred. The imbalance is 12 minus 8, over 12 plus 8, which is 4 over 20, so 0.20\. A window with no touch-accepts scores 0.

## The visible book still leads

Look at the middle bar. That is rejected-order imbalance. Set it against the right-hand bar, the post-only orders the engine accepted at the touch. The left bar is ordinary top-of-book imbalance, best-bid size against best-ask size.

![Bar chart of slopes on the 10-second mid return: top-of-book imbalance 0.6224, rejected-order imbalance 0.1674, accepted post-only imbalance 0.0705](https://storage.ghost.io/c/27/cb/27cb0fc8-2c77-4434-af9e-d5d32a916994/content/images/2026/10/article_466-imbalance_coefficients.png)

Top-of-book imbalance comes in at 0.62, rejected-order imbalance at 0.17, and accepted post-only imbalance at 0.07\. The other cells are an intercept of minus 0.14, a slope of 0.03 on the spread after it is turned into a daily z-score, and an R-squared of 0.045.

$$ \\mathrm{imb}\_t = \\frac{B\_t - A\_t}{B\_t + A\_t} $$

B is size at the best bid, A is size at the best ask: size resting at the touch. The other two ratios are flows of attempts. A book with 15 BTC on the bid and 9 BTC on the ask scores 15 minus 9, over 15 plus 9, which is 0.25.

$$ R\_t = \\beta\_0 + \\beta\_1 \\, \\mathrm{imb}\_t + \\beta\_2 \\, \\text{Spread}\_t + \\beta\_3 \\, \\mathrm{imb}\_t^{\\text{rej}} + \\beta\_4 \\, \\mathrm{imb}\_t^{\\text{open}} + \\epsilon\_t $$

The 10-second mid return, in basis points, is an intercept plus a slope on each imbalance plus a slope on the spread. The spread enters only after its daily mean is subtracted and the result is divided by its daily standard deviation, so an average day contributes zero. The printed slopes, unrounded, are 0.6224 on the book, 0.0305 on the spread z-score, 0.1674 on refused flow, and 0.0705 on accepted post-only flow. The intercept is minus 0.1366.

Put all three imbalances at plus one and the spread z-score at zero. The fitted return is minus 0.1366 plus 0.6224 plus 0.1674 plus 0.0705, which is 0.7237 bp. They describe this corner as "at most a few tenths of a basis point." The sum of the coefficients they print is 0.72 bp. A few tenths matches the refused-flow term on its own: minus 0.1366 plus 0.1674 is 0.0308 bp. It does not match the joint corner, and it is tight for the book term alone, minus 0.1366 plus 0.6224, which is 0.4858 bp. Keep their slopes. The verbal summary is smaller than the arithmetic. Even the joint corner, 0.72 bp, sits under the minimum taker fee on this venue, 1.44 bp, and the top of the taker schedule is 2.7 bp. Their footnote puts the tick at about a tenth of a basis point, so 0.72 bp is about seven ticks and 1.44 bp is about fourteen.

The book slope is 0.6224 divided by the sum of the three imbalance slopes, 0.6224 plus 0.1674 plus 0.0705, which is 0.8603\. The ratio is 0.723\. That is the "nearly three-quarters" in the source. Keep it separate from the 72.3 percent direction hit above: one number is a share of slopes, the other is a hit rate. The refused-flow slope is 0.1674 divided by 0.0705, which is 2.37, so a bit more than twice the accepted-flow slope, as they say.

The refused-flow slope was 0.5415 before the book and the accepted flow entered. It is 0.1674 after. That is 0.1674 divided by 0.5415, or 0.309 of the bivariate slope. The old article ["The Worst-Kept Secret: Imbalance Is the MM's Optimal Response, Not Alpha"](https://aligrithm.com/the-worst-kept-secret-imbalance-is-the-mms-optimal-response-not-alpha/) treats posted imbalance as the maker's reply to a latent efficient price, on a large-tick book whose spread is stuck at one tick. This contract is that case. The refusals are attempts to post that never became the size in that ratio. Two replies to one signal, put in one regression, shrink each other. Albers and coauthors say the direct count of how often refusals line up with the book is forthcoming, so the shrinkage is the evidence on this page, and the alignment rate is not.

The spread on this contract is one tick almost all month. A daily z-score of a series that barely moves spikes on the rare wider print and sits near zero the rest of the time. Treat 0.0305 as a control term.

Shorter labels keep a similar fit. They print R-squared about 0.023 at 1 second, 0.023 at 2 seconds, and 0.019 at 5 seconds. They stop at 10 seconds. Permanence, in their words, is a name for that HFT horizon.

## Time the node before you lean a quote

I am against calling this slope price impact. The matching engine drops the order before it reaches a queue. The slope is the lineup between the bounce and the later mid. Both answer a signal that sits upstream of the book.

A pairwise regression will still print the slope and leave the cause unnamed. The old article ["Stop Using Pairwise Granger: PCMCI for Financial Causality"](https://aligrithm.com/stop-using-pairwise-granger-pcmci-for-financial-causality/) is the long version: a shared driver prints a slope between two series. Here the matching engine deleted the order, so the refusal cannot be a parent of the mid.

What you do with the file depends on a delay they did not print. They say the node feed arrives late enough that the refusal flow fails as a live signal on the sub-second horizons in the study. They give no milliseconds. The median time from a refusal to the next mid change is about 2 seconds. Timestamp your node against the public book. If the refusal shows up after that change, you are reading a move the mid already made.

A maker's schedule runs from a 0.3 bp rebate to a 0.9 bp fee, so the corner forecast above can lean a quote you were already going to post. Crossing pays the taker schedule to collect that same forecast. Require a second month, and a measured delay, before the partial slope moves a quote. The sample is BTC-USD, September 2025, one contract. They publish no costed book. Stopping there matches the fee.

If the node is timely, keep two running sums over the last 100 post-only submissions: refused buy volume against refused sell volume, and touch-accepted buy volume against the same on the sell. Turn each pair into an imbalance, and set the accepted one to zero when the window has no accepts. Put both next to top-of-book imbalance. Let the refusal term lean a quote only after you have seen it survive the book on a month this file does not contain. Do not send a taking order because the sign flipped.

On a venue that drops refusals, you cannot compute the term. The identification hole remains. An impact regression on the orders that did reach the book still mixes the order with the signal that sent it. Hyperliquid is where you can see the mixture, because the engine kept the failure. The old L4 article is how you get that file. This regression is what the file says once a slope is read as a lineup, and the deleted order is left out of the cause.

## KEY POINTS

- Count BadAloPxRejected post-only orders on the Hyperliquid BTC-USD book: about 60,310 a minute never reach a queue.
- Score a refused buy as plus one and a refused sell as minus one. The sign matches the next mid change on 72.3 percent of refusals.
- Build rejected-order imbalance on the previous 100 post-only submissions. Before the visible book enters, its slope on the 10-second mid return is 0.54 bp.
- After top-of-book imbalance is in the same regression, the refusal slope that remains is 0.17.
- Do not cross the spread to trade the sign. The minimum taker fee on this venue is 1.44 bp.

## References

- [An Open L4 Order Book: What Hyperliquid Data Unlocks](https://aligrithm.com/an-open-l4-order-book-what-hyperliquid-data-unlocks/)
- [The Worst-Kept Secret: Imbalance Is the MM's Optimal Response, Not Alpha](https://aligrithm.com/the-worst-kept-secret-imbalance-is-the-mms-optimal-response-not-alpha/)
- [Stop Using Pairwise Granger: PCMCI for Financial Causality](https://aligrithm.com/stop-using-pairwise-granger-pcmci-for-financial-causality/)
- [The Price Impact of Nothing: Rejected Orders as Predictors of Future Returns](https://papers.ssrn.com/sol3/papers.cfm?abstract%5Fid=6250378&ref=aligrithm.com)

---

**A note on AI.* The ideas, research, analysis, and conclusions in this article are my own. I use AI tools to help with editing and wordsmithing, because English is not my first language, and I am not shy about that. AI-generated ideas and AI-assisted writing are not the same thing: the first is empty slop from a generic prompt, the second is a tool for communicating years of real research more clearly. Judge the work by its substance, not by whether software helped polish the prose.*