VertiStratInsights Main website ↗

How to use us-stock-picks: a multi-screen ranking of US stocks with paper-portfolio output

Monday, October 19, 2026

A small Python package that turns a US market scan workbook into a conviction-ranked shortlist, a quant CSV/JSON and an equal-weight paper portfolio. On 23 October 2026 I ranked a freshly built scan of the 300 most liquid US stocks, with prices to the 21 October 2026 session. Research and education only; not investment advice.

Open-Source Tools · How-To · Markets research

How to use us-stock-picks: a multi-screen ranking of US stocks with paper-portfolio output

Skip to article content
Text Size

Revised · v1.0.0 · what changed

300US stocks in the fresh scan (top by turnover; committed run had 5,814)
256passed the liquidity gate (was 1,623)
181ranked after screens (was 721)
21 Oct 2026last trading session in the data (committed outputs: 24 Jul 2026)

Code: github.com/herrrickshaw/us-stock-picks

Watch the walkthrough

Watch on YouTube: youtu.be/-xmjl_d2xLg

Why it is useful

  • Self-directed researchers and students who want to see how Darvas breakout, Piotroski, Coffee Can, Magic Formula and momentum screens can be combined into one score get a readable, auditable implementation.
  • It replaces juggling separate screens: one run gives a sector-capped shortlist, a full ranked CSV and a paper-portfolio file with transparent screen hits for each name.
  • Evidence from the run: a fresh scan of the 300 most liquid US stocks was ranked end to end in under three seconds: 256 passed the liquidity gate, 181 were ranked (24 CORE, 31 QUALITY, 50 MOMENTUM, 76 WATCH).
  • It also shows how fragile a rank is: an earlier attempt with fundamentals missing for 162 of the 300 names produced a different top 15 (12 CORE names, not 24). Missing data silently becomes 'screen not passed', so check coverage before reading the list.

What it is for

us-stock-picks (package us_stock_picks) reads the newest us_full_scan_*.xlsx workbook, applies a liquidity gate (price at least $5, turnover at least $2 million a day), scores ten screens with fixed weights, assigns each stock to a sleeve (CORE, QUALITY, MOMENTUM, WATCH), caps names per sector, and writes HTML, CSV and JSON outputs.

The scan workbook comes from a separate pipeline that is not in this repo. For this run I built one with the Darvas, golden-cross, five fundamental screens and machine-learning stages of the author's sibling BazaarTalks scanner, fed with cached prices (to the 21 October 2026 session) for the 300 most liquid US non-ETF stocks and live fundamentals from Yahoo Finance. A small adapter added turnover, a liquidity tier and an above-EMA50 flag, and I named the file with the session date so the as-of label is right.

Not available in my workbook: the Quality score and grade, the 'Actionable' flag, so those two screens never fire. The full 7,500-stock universe was not scanned.

Who it is for

  • Students learning multi-factor screening
  • Researchers who want a transparent, reproducible ranking recipe
  • Developers building a screening report from tabular scan data
Not for.
  • Investment advice: this is not investment advice, and nothing here is a recommendation to buy or sell
  • Live trading signals: the committed outputs are dated 24 July 2026
  • Running as-is without an upstream scan workbook or a long --refresh data pull

What you need

RequirementWhyHow to get it
Python 3 with pandas, numpy, openpyxlListed in requirements.txt (pandas>=2.0, openpyxl>=3.1, numpy>=1.24)pip install -r requirements.txt
A us_full_scan_*.xlsx workbook with All_Stocks and All_Fundamentals sheetsThe engine ranks an existing scan; none is committed. Needed columns include Symbol, LTP, Turnover_USD, Liquidity_Tier, Darvas_Signal, Piotroski_Score, CoffeeCan, MagicFormula, BullCartelProduce one with a scan pipeline, or use --refresh (slow, network) per the README

Get the code and an AI assistant

You do not have to be a programmer. Get the repository, give it to an AI assistant, and ask in plain language. Any of these routes works:

ToolWhat you needBest for
GitHubFree account to fork or star; git to clone, or the green Code button, then Download ZIP, or open in CodespacesGetting the code and keeping up with updates
Claude CodeClaude subscription or API key; run claude inside the cloned folderLetting the AI read and run the whole repo
Gemini CLIGoogle account; run gemini inside the cloned folderThe same hands-on workflow with Gemini
Claude.ai, Gemini or ChatGPT in the browserA chat account; upload README.md and the files you care about (or paste the output of git ls-files)Understanding the project and asking questions without installing anything
Other tools (Copilot Chat, Cursor, Codex CLI)Open the cloned folder in the tool and point it at README.md firstEditing and extending the code
git clone https://github.com/herrrickshaw/us-stock-picks.git
cd us-stock-picks
claude      # or: gemini

Install

  1. Clone the repository
    git clone https://github.com/herrrickshaw/us-stock-picks.git
    cd us-stock-picks
  2. Create an environment and install dependencies
    python3 -m venv .venv && source .venv/bin/activate
    pip install -r requirements.txt

Quick start: commands and what you should see

See all options

python -m us_stock_picks --help

Usage text listing --scan, --top, --max-per-sector, --portfolio-size, --min-price, --min-turnover, --refresh and --open.

Rank a scan workbook

python run_us_picks.py --scan path/to/us_full_scan_YYYYMMDD_HHMM.xlsx --top 15 --max-per-sector 3 --out outputs

Prints a summary (as of, universe, liquid, ranked, sleeves) and the shortlist; writes HTML, CSV, JSON and paper-portfolio files. On 23 Oct 2026: as of 2026-10-21, universe 300, liquid 256, ranked 181. Note: python -m us_stock_picks works only if the repo root is on the path.

Inspect the committed outputs without any data pull

python3 -c "import json;print(json.load(open('outputs/us_picks_latest.json'))['summary'])"

A dictionary with as_of, universe_n, liquid_n, ranked_n and sleeve_counts.

Sample outputs

Real output from a run on the date shown in the sources line; trimmed to fit.

Run summary from the 23 Oct 2026 re-run (as of 2026-10-21)

python run_us_picks.py --scan us_full_scan_20261021_0000.xlsx
as of:     2026-10-21 00:00
universe:  300
liquid:    256
ranked:    181
sleeves:   {'WATCH': 76, 'MOMENTUM': 50, 'QUALITY': 31, 'CORE': 24}

Old committed run (24 Jul 2026): universe 5,814, liquid 1,623, ranked 721, CORE 103 / QUALITY 82 / MOMENTUM 330 / WATCH 206. The universes differ by design (300 versus 5,814), so the counts are not comparable.

Shortlist format sample (illustrative mechanical output, not advice)

outputs/us_investor_picks_latest.csv
rank  ticker (exchange)  sleeve  score  screens
1     GD   (NYSE)        CORE    62.3   4
2     TT   (NYSE)        CORE    61.0   4
3     TEAM (NASDAQ)      CORE    60.7   5
4     ADSK (NASDAQ)      CORE    60.7   5
5     INTU (NASDAQ)      CORE    60.3   4
6     LLY  (NYSE)        CORE    55.7   4

Mechanical screen output on a 300-stock universe, shown only to illustrate the file format. Not investment advice and not a recommendation. Quality and Actionable screens were unavailable.

Screens passed per ranked stock (quant file, 100 rows)

value_counts on screens_passed
2 screens: 20
3 screens: 55
4 screens: 22
5 screens: 3

No stock passed six or more screens, versus six for the top names in the committed July file, which had the Quality and Actionable screens.

Config: conviction weights (us_stock_picks/config.py)

breakout 18 | piotroski_strong 16 | coffee_can 14 | magic_formula 10 | bull_cartel 10
golden_cross 10 | quality_ab 8 | actionable 6 | ml_bullish 5 | above_ema50 3
CORE needs score >= 48 and >= 2 screens

Weights are the author's choices and are not backtested in this repo.

Ways to use it

MethodHow it works
Command linepython -m us_stock_picks with your own scan workbook; tune filters with --min-turnover, --top and --max-per-sector.
Read the CSVsOpen the ranked CSV in a spreadsheet to see which screens each name passed.
Edit the weightsChange WEIGHTS in config.py and compare how the ranking moves.
Through an AI assistantOpen the clone in Claude Code or Gemini CLI, or upload README.md and a CSV to a chat assistant.

Sample prompts for your AI assistant

Copy, paste and edit the parts in [brackets].

  • Explain how conviction_score is computed in us_stock_picks/engine.py and config.py, with a worked example for one row of the ranked CSV.
  • Using outputs/us_quant_ranked_latest.csv, show how many names pass each screen and which pairs of screens overlap most.
  • Which names in the shortlist have a BEARISH ML_Direction but a high conviction score? What does that disagreement suggest about the weights?
  • Suggest a backtest design to test whether the CORE sleeve beats an index, listing the biases to avoid.
  • Draft a plain-English disclaimer and data-freshness note for sharing this output with a study group.

Limits and honest caveats

  • Not investment advice. This is mechanical screen output for research and education; screens fail in regime changes.
  • Data date: prices run to the 21 October 2026 session (the US panel has no 22 October bar) and fundamentals are Yahoo Finance values fetched on 23 October 2026. The cached price panel has missing sessions on many recent days, so Darvas boxes and moving averages on it are approximate.
  • The scan covered only the 300 most liquid US non-ETF stocks, built by an adapter, not the author's 5,800-stock scan. Quality and Actionable screens were missing, so ranks are not comparable with the committed July outputs.
  • Missing data silently counts as 'screen not passed': an earlier run with fundamentals missing for 162 names gave a different top 15. Per the README, the 'as of' date comes from the workbook filename, so I named it with the session date.
  • Extreme or contradictory fields pass through uncleaned, and conviction weights are the author's choices, not validated by any backtest in this repo.

Sources: the us-stock-picks README, requirements.txt, us_stock_picks/config.py and code, run on 23 October 2026 in a scratch clone and throwaway virtual environment on a scan workbook built from cached US prices (last session 21 October 2026) and Yahoo Finance fundamentals. Only derived aggregates and format samples shown.

Revision history.
  • v1.0.0 — 23 October 2026 — first published.

About this article: Researched, written and edited by Umashankar Triplicane Dwarakanathan, with AI research assistance; every figure is meant to trace to the primary source cited. See the Editorial Policy for how sourcing, AI use and corrections work.

Umashankar Triplicane Dwarakanathan
Contact Us
Umashankar Triplicane Dwarakanathan
Investment Promotion & Energy-Sector Leader · Chennai, Tamil Nadu, India
LinkedIn → GitHub → Email +91 78273 81696
How this site works

Data-led analysis of India's trade, currency and industrial policy. Every article is built from primary official sources, and every figure links back to the release, table or filing it came from.

Sources. DGCI&S TradeStat (imports/exports, HSN-wise) · PIB (government press releases, January 2017 to today, refreshed daily) · RBI (circulars, balance of payments) · MoSPI (CPI/WPI, IIP) · PARIVESH (environmental clearances) · CCIL (bond yields) · BIS (policy rates) · SEBI, NSE/BSE and SEC filings for company data.

Interpretation. Figures carry their vintage and retrieval date; estimates and press-reported numbers are labelled as such; where sources disagree, both are shown. Corrections are made visibly, never silently. Articles are written with AI assistance from the cited sources — AI-generated text can misstate figures even when working from real material, so verify any number that matters to a decision against the linked primary source.

footer

Browse all articles by topic

Every piece on this blog, grouped. Or read the full index.

Agriculture & FertilisersAI ToolsChemicalsClimate & CarbonEnergy & FuelsGas & LNGImport SubstitutionIndustrial PolicyMarkets & FinanceMobility & EVPrices & InflationTextilesTrade & Tariffs

Each topic is a live archive page that updates itself as pieces are labelled. It replaces a hand-kept list that had fallen 18 articles behind.