A 10-indicator composite scoring system (0β100) for US stocks. Available as a desktop app (PyQt5) and a free online web app (Streamlit).
π https://techscoreus-ztfzltktgnuxnvcjv5pk4n.streamlit.app/
The Streamlit web version runs entirely in your browser. Zero install, zero cost.
| Desktop (PyQt5) | Web (Streamlit) | |
|---|---|---|
| Install required? | Yes β Python + pip | No β just open the link |
| Where it runs | Your local machine | Streamlit Community Cloud |
| Stock pools | S&P 500, NASDAQ-100, Dow 30, single ticker | Same |
| 10 indicators + scoring | β | β |
| Real-time quote refresh | β | β (planned) |
| CSV export | Auto-save to local folder | Download button in browser |
| Double-click β Yahoo Finance | β | Clickable ticker links |
| Company name lookup | β (slow for large pools) | Omitted (avoids cloud timeout) |
| Works in restricted regions? | Requires proxy / VPN | Yes β cloud server fetches data directly |
- 10 Technical Indicators β RSI, MACD, KDJ, Bollinger %B, MA Cross, Volume Ratio, ATR%, OBV Trend, Williams %R, CCI
- Multiple Stock Pools β S&P 500, NASDAQ-100, Dow Jones 30, or single ticker lookup
- Composite Scoring β Weighted average of 10 sub-scores, normalized to 0β100
- Real-time Quotes β Refresh current price & daily change % via Yahoo Finance (desktop)
- Auto-save CSV β Results auto-saved with timestamps; reload anytime
- Color-coded Table β High scores highlighted in red, low scores in green; sortable columns
- Score Distribution Chart β Visual histogram of score ranges (web version)
- Double-click to Web β Opens Yahoo Finance page for any stock (desktop)
- Auto-load on Startup β Automatically loads the most recent CSV when reopened (desktop)
pip install yfinance pandas numpy PyQt5
python techscore_us.py
- Click Update & Score β Select stock pool (start with "Test 10 stocks") β OK
- Wait for download & scoring to complete (auto-saves CSV)
- Click Refresh Quotes to get latest prices
- Double-click any row to open its Yahoo Finance page
- Click column headers to sort (e.g., sort by Score descending)
Just open https://techscoreus-ztfzltktgnuxnvcjv5pk4n.streamlit.app/ in your browser.
- In the left sidebar, select Stock Pool or enter a Single Ticker
- Adjust the History (calendar days) slider (recommend β₯ 150)
- Click π Run Scoring and wait for the progress bar to finish
- View results in the color-coded table; filter by score range
- Click β¬οΈ Download CSV to save results locally
pip install streamlit yfinance pandas numpy lxml html5lib
streamlit run streamlit_app.py
Opens automatically at http://localhost:8501.
- Fork this repo
- Go to share.streamlit.io β Sign in with GitHub
- New app β Select your fork β Branch: main β Main file path: streamlit_app.py
- Click Deploy β Wait 2β3 minutes β Your app is live
π‘ The Streamlit web version does NOT require a proxy or VPN β the cloud server fetches data from Yahoo Finance directly. If you are in a network-restricted region, the web version is the easiest option.
The desktop version uses yfinance which accesses query1.finance.yahoo.com. This may be blocked or unstable in certain countries or regions due to network restrictions.
If your VPN or proxy client (e.g., Clash, V2rayN, Shadowsocks, Surge, WireGuard, etc.) is running, switch to Global Mode and run directly:
python techscore_us.py
Find your proxy client's local HTTP port, then:
Linux / macOS:
export HTTPS_PROXY=http://127.0.0.1:7890
export HTTP_PROXY=http://127.0.0.1:7890
python techscore_us.py
Windows CMD:
set HTTPS_PROXY=http://127.0.0.1:7890
set HTTP_PROXY=http://127.0.0.1:7890
python techscore_us.py
Windows PowerShell:
$env:HTTPS_PROXY="http://127.0.0.1:7890"
$env:HTTP_PROXY="http://127.0.0.1:7890"
python techscore_us.py
| Proxy Client | Common Port |
|---|---|
| Clash | 7890 |
| V2rayN | 10809 |
| Shadowsocks | 1080 |
| Surge | 6152 |
Tip: If your browser can open finance.yahoo.com but the script times out, it usually means your proxy only covers browser traffic. Setting the environment variables above will route Python's traffic through the proxy as well.
| Indicator | Weight | What It Measures |
|---|---|---|
| MACD(12,26,9) | 15% | Trend momentum & direction |
| RSI(14) | 12% | Overbought / oversold |
| KDJ(9,3,3) | 12% | Stochastic momentum |
| MA Cross(5/20) | 12% | Short vs medium trend |
| Bollinger %B(20) | 10% | Price position within bands |
| Volume Ratio(20d) | 10% | Current vs average volume |
| OBV Trend(5d) | 10% | Volume-weighted price direction |
| ATR%(14) | 7% | Volatility as % of price |
| Williams %R(14) | 6% | Momentum oscillator |
| CCI(14) | 6% | Price deviation from mean |
Higher score = more oversold / bullish signals.
This is a contrarian / mean-reversion scoring model. A score of 80+ means the stock is showing multiple oversold signals β it does not guarantee a rebound.
| Score | Interpretation | Table Color |
|---|---|---|
| 75β100 | Strongly oversold / bullish signals | Red background |
| 60β74 | Moderately oversold | Orange background |
| 45β59 | Neutral | No highlight |
| 0β44 | Overbought / bearish signals | Green background |
techscore-us/
βββ LICENSE # GPLv3
βββ README.md
βββ requirements.txt # Streamlit Cloud dependencies
βββ techscore_us.py # Desktop app (PyQt5)
βββ streamlit_app.py # Web app (Streamlit)
βββ main_us.png # Screenshot: main window
βββ techexplain_us.png # Screenshot: indicator guide
βββ TechScore_Data_US/ # Auto-created at runtime by desktop version (git-ignored)
βββ pool_cache.json # Stock pool cache (7-day TTL)
βββ Predictions/
βββ TechScore_US_2025-XX-XX_XXXX.csv
| Stock Pool | Tickers | Download Time* | Scoring Time |
|---|---|---|---|
| Test 10 | 10 | ~10 sec | < 1 sec |
| Dow 30 | 30 | ~15 sec | < 1 sec |
| NASDAQ-100 | ~100 | ~30 sec | ~2 sec |
| S&P 500 | ~500 | ~1β3 min | ~5 sec |
*Download times depend on network speed and Yahoo Finance rate limits. Uses batch yf.download() for efficiency. Streamlit Cloud may be slightly slower due to shared resources.
- Python 3.8+
- OS: Windows / macOS / Linux
- Libraries: yfinance>=0.2.31, pandas>=1.5, numpy>=1.23, PyQt5>=5.15
- Python 3.8+
- Libraries (see requirements.txt): streamlit>=1.32.0, yfinance>=0.2.36, pandas>=2.0, numpy>=1.24, lxml, html5lib
- Or just use the hosted app β no local install needed
This software is for research and educational purposes only.
- It does not constitute any investment advice or recommendation.
- All investment decisions and associated risks are solely the responsibility of the user.
- Past technical indicator patterns do not guarantee future price movements.
This project is licensed under the GNU General Public License v3.0.
- OpenStockTechScore β A-share market version with local data providers
Contributions are welcome! Please feel free to:
- Open an Issue for bugs or feature requests
- Submit a Pull Request with improvements
- β Star this repo if you find it useful

