Not a strategy — a liquidity filter to add to whatever you already have. Most retail day trading
strategies fail on execution rather than on logic, and this is the cheapest defence available.
1. The rule
# Add to the front of any BUY condition
if DayAmount > 10000000 and TotalBidSize > 0 and Ask1 - Bid1 <= Price * 0.002:
if Price > 0: # replace this line with your entry condition
Buy()2. Three checks, three different failures
| Check | Asks | Catches |
|---|
DayAmount > 10000000 | does this name trade at all today? | symbols nobody is transacting in |
TotalBidSize > 0 | is there anything on the other side right now? | a book that has momentarily emptied |
Ask1 - Bid1 <= Price * 0.002 | is the spread under 20 basis points? | a round trip larger than the edge |
A name can pass any one of these and fail badly on the others. High daily turnover with an empty
book at this exact moment is common in the first minutes of the session, which is precisely when
most strategies want to trade.
3. What the numbers should be, measured rather than copied
The 0.2% spread threshold should come from your own fill data, not from ours. Here is the context
for choosing it: across 264 recorded sessions and 35.2 million quotes, 32.2% of all quotes on this
population were already one cent wide, and a $5,000 market order in a $5–20 stock paid about 38
basis points one way (
what day trading a US stock really costs).
Set the cap in relation to what your strategy is trying to earn per trade. A 20bp cap is generous
if you are targeting 3% and far too loose if you are targeting 0.8%.4. What it does not protect you from
The size of your own order. These conditions describe the book as it is, with your order not in it.
A large order walks up the ladder and pays more than the spread cap suggests — we measured the
quoted price to be good for only about $1,200 to $5,200 before that starts happening
(
order book depth measured).
It also does not protect you from a name being unavailable to you in the first place. A backtest
fill on a symbol your scanner would never have shown you is not a fill —
82% of our backtest fills were trades we could not have taken live.
5. What to change first
The spread cap, and think of it in basis points rather than as a decimal.
Price * 0.002 is 20bp,
which is generous for a liquid name and tight for a small cap.
Then compare with and without the gate on the same entry and the same sessions. If it removes
trades and the win rate does not move, it is filtering at random. If it removes trades and the
average result improves, it was doing its job.
Educational template for research and backtesting. Not investment advice and not a signal service.