How a pick gets made

no black box, no magic

Every weekday, after US close, we run a pipeline that ingests fresh data, scores every stock on 17 factors, combines those into a single composite, and publishes the top 10 longs plus bottom 5 avoids. Below is the full factor list, what each one measures, where the data comes from, and the weight applied.

The 17 factors

grouped into 7 buckets, weighted into one score
BucketFactorWhat it measuresSourceBucket weight
momentummom_12m12-month total returnYahoo prices25%
mom_6m6-month total returnYahoo prices
mom_3m3-month total returnYahoo prices
mom_1m1-month total returnYahoo prices
price_vs_50dma / 200dmadistance from moving averagesYahoo prices
valuevalue_peTTM P/E (lower = better)SEC EDGAR + price15%
value_pfcfprice / operating cash flowSEC EDGAR + price
qualityquality_roereturn on equitySEC EDGAR15%
quality_delong-term debt / equity (lower = better)SEC EDGAR
growthgrowth_rev_yoyrevenue YoY growth, last Q vs same Q prior yearSEC EDGAR15%
growth_eps_yoydiluted EPS YoY growthSEC EDGAR
sentimentsentiment_7daverage news sentiment last 7 days, scored by Claude HaikuFinnhub + Anthropic10%
insiderinsider_cluster_30dweighted purchase value times number of insiders, last 30 daysOpenInsider / SEC Form 410%
catalystcatalyst_recencyflag if catalyst news (earnings, FDA, M&A, etc.) in last 3 daysFinnhub + Claude classification10%

Volatility (vol_30d), RSI (rsi_14), and a few others are computed and stored, but currently held out of the composite based on the factor backtest finding they were neutral or contrarian in the 2025-2026 regime. They appear in the dossier for context.

From factor to score to pick

  1. Raw values: each factor is computed per stock from raw data (no normalization yet).
  2. Percentile rank: for each factor, every stock gets a 0-100 percentile within the active universe (516 stocks). Factors where "lower is better" (P/E, P/FCF, debt-to-equity, volatility) are inverted so higher percentile always means more bullish.
  3. Bucket score: average percentile within each bucket. A stock missing one factor in a bucket still gets a bucket score from the rest.
  4. Composite: weighted average of bucket scores. Requires at least 50% bucket coverage to qualify, otherwise the stock is skipped.
  5. Picks: top 10 by score become longs, bottom 5 become avoids. Targets and stops are set from 14-day ATR (target = entry + 2x ATR for longs, stop = entry - 1.5x ATR).
  6. Reasoning: Claude Haiku writes a 2-3 sentence rationale for each pick using the factor breakdown plus the last 7 days of catalyst news.

What we don't do