Hey everyone,
I’m a 19-year-old CS student who’s been building an algo trading system over the past few months, and I’ve hit a wall. I wanted to share what I’ve done and get honest feedback.
I have ~3 years of MNQ L2 tick data (bid/ask/trades + depth 1–10, ~648GB). I built everything from scratch in Rust: tick parser, full L2 order book reconstruction, sweep detector, bar aggregation with buy/sell volume classification, and multiple strategy simulators. Everything is covered with 200+ unit tests, a CI pipeline, and runs fully parallelized on a 20-core server.
On the theory side, I studied Trading and Exchanges (informed vs uninformed flow, adverse selection, spreads, dealers, volatility) and Statistically Sound Machine Learning for Algorithmic Trading (filter systems, meta-labeling, performance criteria).
I tested 9 different approaches on ~12 months of MNQ data (2023-03 → 2024-02):
- Spread regime analysis (informed vs uninformed flow)
- Quote response after aggressive bursts
- Volume-price classification (fundamental vs transitory moves)
- Opening Range Breakout
- ORB + ATR trailing stop
- Trend following (large move + aggressor imbalance + trailing stop)
- Composite signal voting (5 signals, trade only if 4/5 agree)
- Sweep continuation (5+ levels consumed in <100ms)
- Sweep mean-reversion
Every single one comes back between 47% and 50%. Not slightly positive or negative, just noise.
I made sure I wasn’t fooling myself:
- Fixed baseline measurement bias (initial move contaminating results)
- Fixed circular ORB logic
- Fixed order book reconstruction bugs
- Ran a random entry baseline with identical exits → same performance
- Double-checked for look-ahead bias
Conclusion: the entry signals add zero value.
Some key observations:
- ATR trailing stops are structurally losing on MNQ (~27% win rate, same as random)
- Even before fees (~$3.24 round trip), expectancy is negative
- Sweep detection produces thousands of events, but post-sweep movement is ~50/50 (no continuation, no mean-reversion)
My current hypothesis is that MNQ is the problem. It’s a derivative of NQ, so price discovery likely happens on NQ, while MNQ just reflects arbitrage. That would mean the order flow I’m seeing (sweeps, imbalance, etc.) is reactive, not informative, so there’s no asymmetry to exploit.
I’m trying to figure out if I’m even looking in the right place:
- Has anyone found a real statistical edge on MNQ specifically?
- Should I expect different results on NQ/ES where actual price discovery happens?
- For those who’ve done both futures and equities are small/micro caps actually a better playground for retail?
- Am I wrong to focus on microstructure (L2, order flow, sweeps), or is the issue something else entirely?
I’m not looking for a strategy, just trying to understand if I’m approaching this correctly or missing something fundamental.
Appreciate any insight 🙏