A pre-market momentum day trading strategy for US stocks that is flat before the opening bell.
Pre-market is thin, so the filters do more work than the entry. This one only looks at names
trading near their own high of the session with buying that has not stalled.
1. The rule
# BUY — pre-market only (04:00-09:30 ET)
if HhmmSs >= 40000 and HhmmSs < 93000:
if BuyVol > 0 and SellVol > 0 and Ask1 > Bid1:
if ChangePct > 0 and Price >= 1.0 and TradeAmount > TradeAmountN(1):
if Price / HighestPrice(300) - 1 > -0.005 and RisingStreak(2):
Buy()# SELL — flat before the open, no exceptions
if HhmmSs >= 92800:
Sell()
elif ProfitPct >= 1.5 or ProfitPct <= -0.8 or HoldTime >= 900:
Sell()
2. What each line is doing
Line
What it asks
Why it is there
HhmmSs >= 40000 and < 93000
Are we in the pre-market session?
04:00–09:30 ET. Outside it this strategy has no opinion.
BuyVol > 0 and SellVol > 0
Has anything actually traded?
Pre-market quotes update on names with no trades at all.
Ask1 > Bid1
Is the order book sane?
Discards crossed or missing quotes, which are common before the open.
Price >= 1.0
Is it above a dollar?
Below that the spread is a larger share of the move than the move is.
TradeAmount > TradeAmountN(1)
Is this print bigger than the last one?
Buying that is still accelerating, not fading.
Price / HighestPrice(300) - 1 > -0.005
Within 0.5% of the 300-tick high?
Near the session high, not recovering from a slide.
RisingStreak(2)
Two consecutive up ticks?
A cheap confirmation that the last print was not a one-off.
The exit forces flat at 09:28, before the bell. That is not a preference. Pre-market liquidity
disappears at the open and the book you tested against stops existing, so holding across it is a
different trade from the one you backtested.
3. When this works and when it does not
It works on the handful of names with a real pre-market reason to move — an earnings release, a
guidance change, news that hit before 09:30. Those names have prints every few seconds and a
book worth reading.
It does not work on the long tail. Most pre-market symbols trade a few hundred shares an hour,
and the filters above will reject nearly all of them, which is the point. If your backtest shows
this strategy taking dozens of trades a session, the filters are not doing their job and you are
trading names whose spread is wider than your target.
It also depends entirely on your data. Pre-market coverage is the single biggest difference
between brokers: on a free Alpaca plan there is no pre-market data at all, and several feeds
report the previous close as the current price until the first print arrives. Check what your
connection actually delivers before 09:30 before you trust any of this.
4. Before you trade it
Run it on your own recordings first — see
how to backtest a day trading strategy on US stocks. Two things to look at in the
report: how many trades it takes per session, and what the average holding time is. A pre-market
strategy that averages twelve minutes in a name is not really a pre-market strategy.
Then price the round trip. Spreads before the open are several times wider than they are at
midday, so a 1.5% target is not the same edge it looks like — see
what day trading a US stock really costs for the measured numbers. Every factor used
above is defined in the day trading indicators and factors reference.
5. What the round trip asks of it
Pre-market momentum: the exit block drawn to scale, and the break-even win rate before and after measured trading costs
The 1.5% target against a 0.8% stop needs a 35% win rate on paper and 67% once the measured
round trip is included. And pre-market is the *expensive* end of that measurement, not the cheap
end — the 0.75% figure is a regular-hours median, and spreads before 09:30 are wider still.
That is the real argument for the filters above. This strategy is not trying to be right more
often; it is trying to only be in names where the cost is nothing like the median. See
what day trading a US stock really costs.
Educational template for research and backtesting. Not investment advice and not a signal service.
Originally published by TraderWe on August 13, 2026. You may quote and link to this page. Republishing the full text without a link back to the original is not permitted.
Love that the exit is unconditional before the bell. I've been the person holding a premarket runner into the open and it is NOT a strategy, it's a prayer!! One thing the piece glosses over though: it says the filters carry the weight, but it never really says what happens when the spread is wide and you're paying up to get filled anyway, near session high plus a fat spread is where my premarket entries usually go bad. Gonna paper this with a tighter cap on how far the ask can sit above the bid before I let it fire.
The 09:28 flat is the part people will skip and then wonder why their fills got weird! Love it. Only thing I'd poke at is TradeAmount > TradeAmountN(1) pre-market — at 4am one decent print can make the average look like nothing, so the bar is basically on the floor. Do you gate a minimum notional too, or does Price >= 1.0 do enough of that work for you?