Multi-factor swing & intraday signal engine.
Signals: ADX · RSI · MACD · RVOL · ATR · Bollinger Squeeze · EMA structure
pip install yfinance pandas tabulate colorama flask flask-cors
# Default watchlist (FLEX, AMD, JBL, COCO, MPC)
python momentum_screener.py
# Custom tickers
python momentum_screener.py FLEX AMD NVDA MSFT GOOGL
# Preset watchlists
python momentum_screener.py --preset ai
python momentum_screener.py --preset momentum
python momentum_screener.py --preset energy
python momentum_screener.py --preset mag7
python momentum_screener.py --preset penny_vol
python momentum_screener.py --preset penny_bio
python momentum_screener.py --preset penny_tech
# Auto-refresh every 5 minutes
python momentum_screener.py --watch
python momentum_screener.py --preset ai --watch
API SERVER MODE (connects to HTML frontend)
# Start on default port 5000
python momentum_screener.py --serve
# Start on custom port (use if 5000 is taken — common on Mac)
python momentum_screener.py --serve --port 8080
Method
URL
Description
GET
/api/quote?ticker=FLEX
Single ticker — fetch + analyze
GET
/api/regime
SPY / QQQ / VIX regime data
GET
/api/scan?tickers=FLEX,AMD,JBL
Bulk scan, returns ranked JSON
GET
/api/scan?preset=watchlist
Scan a named preset
curl " http://localhost:5000/api/quote?ticker=FLEX"
curl " http://localhost:5000/api/scan?preset=watchlist"
curl " http://localhost:5000/api/regime"
Option A — localhost (recommended, no CORS issues)
# In the folder containing momentum-screener.html
python -m http.server 8080
# Then open: http://localhost:8080/momentum-screener.html
Option B — connect to Python backend
Start the server: python momentum_screener.py --serve
Open momentum-screener.html in any editor
Change line 1 of the <script> block:
const USE_PYTHON_API = true ; // was false
If using a custom port, also update:
const PYTHON_API_BASE = 'http://localhost:8080/api' ;
Window
Time (ET)
Action
✅ Best
9:30 – 10:30 AM
Enter breakouts. Highest volume.
⚠ Avoid
11:30 AM – 2:00 PM
Midday chop. No new entries.
✅ Good
3:00 – 4:00 PM
Power hour. Trail stops or exit.
Signal
Bullish Condition
ADX
> 25 (trend exists) · > 35 (strong)
RSI
55–70 (momentum building, not exhausted)
RVOL
> 1.5x average · > 2x institutional
MACD
Positive histogram
vs 20 EMA
Price above, within 8% (not extended)
BB Squeeze
Bands at multi-week low → explosion setup
Only trade pennies when ALL of the following are true:
Regime is RISK ON (SPY + QQQ both green, VIX < 20)
RVOL > 2x (real volume, not noise)
ADX > 25 (trend has structure)
Size down 50%+ vs normal position
No overnight holds — exit same day
Stop loss is mandatory — use ATR-based stop shown on card
Score
Meaning
65–95
High conviction — enter on open or power hour
45–64
Moderate — wait for RVOL confirmation
10–44
Low — observe only, skip
momentum_screener.py ← Python CLI + API server
momentum-screener.html ← Browser frontend
README.md ← This file
Not financial advice. Always use stop-losses. Past performance does not predict future results.