A scalping strategy for US stocks where the spread filter, not the entry, is the strategy. Momentum
filter, spread guard, time stop. Copy it, then tighten each condition against your own recordings.
1. The rule
# BUY
if ChangePct > 5 and Strength > 120 and (Ask1 - Bid1) / Price < 0.003:
Buy()# SELL
if ProfitPct >= 0.8 or ProfitPct <= -0.5 or HoldTime >= 300:
Sell()
2. Why the spread line is the whole strategy
ChangePct > 5 is a selection filter rather than a timing one — it picks names that are already
moving today, which is where scalping has something to work with. Strength > 120 asks that
buyers have been paying up.
But the line that decides whether any of this can work is the third one. A scalp targeting 0.8%
pays the spread twice. At a 0.3% spread the round trip has eaten three quarters of the target
before the trade does anything at all.
3. What the round trip asks of it
Scalping: the exit block drawn to scale, and the break-even win rate before and after measured trading costs
Read that second bar carefully, because it is the most important number on this page. Against our
measured cost for a $5,000 order in a $5–20 stock — about 0.75% round trip — a 0.8% target needs a
96% win rate to break even. That is not a strategy, it is a rounding error.
This is not a flaw in the figure. It is the reason the spread condition exists. That measured
0.75% is a *median across the population*, and the spread filter's job is to keep you in the part
of the distribution well below it. If your fills are averaging anywhere near the median, scalping
a 0.8% target does not work, and no entry condition will rescue it.
So the honest reading of this strategy is: it is a bet that you can select names where your real
round trip is a quarter of the median. Measure your own fills before you believe you can — see
what day trading a US stock really costs for how, and
the quoted price is only good for about $1,200 to $5,200 for why your size matters as
much as the quote.
4. When it fails
It fails at the open, when spreads on the exact names that pass ChangePct > 5 are at their
widest. The condition rejects most of those entries, which is correct behaviour, but it leaves the
strategy with very few trades in the first half hour — the window where the moves are.
5. What to change first
The target and the spread cap move together. If you widen the cap to 0.005 you must raise
ProfitPct >= 0.8 to at least 1.5, or you are keeping the same target while paying nearly twice
as much to enter. Change them as a pair and the comparison stays honest.
Then compare the whole thing against the baseline your trading strategy has to beat.
Scalping has to clear a much higher bar than a slower strategy, and it is worth knowing by how
much before you commit to it. Test on your own data:
how to backtest a day trading strategy on US stocks.
Educational template for research and backtesting. Not investment advice and not a signal service.
Originally published by TraderWe on August 8, 2026. You may quote and link to this page. Republishing the full text without a link back to the original is not permitted.
The 0.8 / -0.5 asymmetry is the part I'd want people to look at before they copy anything. That needs a fairly high hit rate to work out, so log your fill rate on the winners specifically. My experience is the 0.8 target gets missed more often than the stop does. Also, what's your Strength input actually measuring? Volume ratio, relative to a moving average? Hard to tighten a condition when I don't know its scale.
the 300s time stop is my favourite bit here, honestly. i run something similar on crypto overnight and the number of trades that just sit there doing nothing until they quietly go red is way higher than i expected before i started timing them out.
Spread guard at 0.3% and a profit target of 0.8% means in the worst allowed case you're paying nearly 40% of your target just to cross, before commissions. Round trip that and the maths gets grim. I'd push the guard to something like 0.1% and see how many names survive the filter — probably fewer than you'd like, which is the actual lesson. Also the spread you measure at signal time is not the spread you get filled at on a 5%+ mover.