LaunchTower is an independent, self-funded market-data desk. We run a transparent, reproducible momentum + quality factor screen on a universe of ~95 liquid US mega-cap equities, and publish the full factor table, the research report, and the exact code used to generate it — so anyone can verify, reproduce, or build on our work.
Disclaimer: This is a research screen built from public market data. It is not personalized investment advice and is not a recommendation to buy or sell any security. Past momentum does not guarantee future returns. Run at your own risk.
| Path | Description |
|---|---|
launchtower_factor_screen_v2.py |
The complete, self-contained factor screen (v2, 2026-09-15). Runs end-to-end: downloads data, computes factors, prints top/bottom 10, writes a dated CSV. |
reports/2026-09-15.md |
Latest research report (dated 2026-09-15, data as of 2026-09-11 close). |
data/factor_scores_2026-09-15.csv |
Full 95-ticker factor table from the 2026-09-15 screen. |
The composite score is a z-scored blend of four components, computed over a trailing 12-month (252 trading day) window:
| Component | Weight | Definition |
|---|---|---|
| Momentum (12-1) | 50% | Return from t-252 to t-22 (skips the last month to avoid short-term reversal) |
| Quality (Sharpe) | 30% | Annualized mean daily return / annualized daily vol, trailing 252 days (gross Sharpe, rf = 0) |
| Low Volatility | 10% | Inverse z-score of annualized realized vol, trailing 252 days |
| Low Drawdown | 10% | Inverse z-score of max drawdown from peak, trailing 252 days |
All components are z-scored across the universe before weighting. A higher composite score indicates stronger momentum and better risk-adjusted performance.
Data source: Yahoo Finance (via yfinance), auto-adjusted (split and
dividend adjusted) daily closes, trailing ~3 years.
Universe: 96 liquid US mega-cap names across tech, semis, industrials, energy, and consumer. Names with fewer than 252 trading days of history are dropped automatically (OTIV is the known exclusion).
# 1. Install dependencies
pip install yfinance pandas numpy
# 2. Run the screen
python launchtower_factor_screen_v2.pyThe script will:
- Download ~3 years of adjusted daily closes for the full universe.
- Compute the four components per ticker over the trailing 252-day window.
- Z-score each component cross-sectionally.
- Build the composite score and rank the universe.
- Print the top 10 and bottom 10 tickers.
- Write a dated CSV (
factor_scores_YYYY-MM-DD.csv) to the current directory.
Top 10 — Strongest Momentum + Quality
| Rank | Ticker | Name | 12M Ret | 12-1 Mom | Sharpe | MaxDD 1Y | Score |
|---|---|---|---|---|---|---|---|
| 1 | MU | Micron | +548.8% | +506.2% | 2.71 | -39.1% | +2.512 |
| 2 | LITE | Lumentum | +462.2% | +465.5% | 2.27 | -42.8% | +2.160 |
| 3 | WDC | Western Digital | +365.9% | +373.0% | 2.33 | -41.8% | +1.837 |
| 4 | STX | Seagate | +325.3% | +349.9% | 2.31 | -31.8% | +1.698 |
| 5 | INTC | Intel | +318.3% | +310.2% | 2.19 | -41.9% | +1.526 |
| 6 | AMAT | Applied Materials | +169.8% | +223.6% | 1.97 | -39.6% | +1.166 |
| 7 | TER | Teradyne | +229.2% | +249.0% | 1.95 | -34.0% | +1.160 |
| 8 | MRVL | Marvell | +255.3% | +226.7% | 2.00 | -48.4% | +1.142 |
| 9 | COHR | Coherent | +195.0% | +243.6% | 1.71 | -48.0% | +1.114 |
| 10 | AMD | AMD | +231.6% | +210.2% | 2.03 | -27.8% | +0.992 |
Bottom 10 — Weakest Momentum + Quality
| Rank | Ticker | Name | 12M Ret | 12-1 Mom | Sharpe | MaxDD 1Y | Score |
|---|---|---|---|---|---|---|---|
| 86 | GRAB | Grab | -44.9% | -34.7% | -1.36 | -53.3% | -0.667 |
| 87 | INTU | Intuit | -50.8% | -48.8% | -1.21 | -63.4% | -0.681 |
| 88 | HUBS | HubSpot | -54.6% | -57.7% | -0.72 | -67.4% | -0.688 |
| 89 | MSTR | MicroStrategy | -59.8% | -70.9% | -0.75 | -77.1% | -0.734 |
| 90 | NKE | Nike | -48.9% | -44.3% | -1.67 | -49.3% | -0.803 |
| 91 | RBLX | Roblox | -65.8% | -73.3% | -1.25 | -74.9% | -0.823 |
| 92 | SMR | NuScale | -75.5% | -72.7% | -0.86 | -85.8% | -0.831 |
| 93 | TTD | Trade Desk | -68.3% | -70.2% | -1.76 | -75.9% | -0.883 |
| 94 | TME | Tencent Music | -68.0% | -66.1% | -2.19 | -69.3% | -0.968 |
| 95 | MNSO | Mens Sana | -63.3% | -51.8% | -2.58 | -63.3% | -0.990 |
Interpretation: The top of the table is dominated by the memory / storage / optical complex — Micron, Lumentum, Western Digital, Seagate, Intel, Teradyne, Marvell, and Coherent. This is a meaningful rotation from the prior screen (2026-09-14), where the top was led by semiconductor equipment (AMAT, LRCX, KLAC) and energy (MPC). The new leaders are the components of the AI data-center buildout: HBM memory (MU), optical transceivers (LITE, COHR), and nearline storage (WDC, STX).
The bottom of the table is led by consumer software, gaming, and China-exposed names that have underperformed over the trailing 12 months. All 10 carry negative 12-month returns and negative Sharpe ratios.
data/factor_scores_2026-09-15.csv contains one row per ticker with the
following columns:
| Column | Description |
|---|---|
rank |
Rank by composite score (1 = strongest) |
ticker |
Ticker symbol |
price |
Last adjusted close (USD) |
ret_12m |
12-month total return (decimal) |
mom_12_1 |
12-1 momentum (decimal) |
vol_12m |
Annualized realized volatility (decimal) |
sharpe |
Annualized gross Sharpe ratio |
maxdd_12m |
Maximum drawdown from peak (negative decimal) |
momentum_z |
Z-score of mom_12_1 across the universe |
sharpe_z |
Z-score of sharpe across the universe |
lowvol_z |
Z-score of -vol_12m across the universe |
lowdd_z |
Z-score of -maxdd_12m across the universe |
composite |
Final composite score (higher = stronger) |
The screen is fully deterministic given the same input data. To reproduce the 2026-09-15 report:
- Run
python launchtower_factor_screen_v2.pyon or after 2026-09-15. - The output CSV will contain the same 95 tickers with the same factor values (prices may differ slightly if Yahoo Finance revises history).
- The top/bottom 10 tables in
reports/2026-09-15.mdare generated from the same composite score.
Note: Yahoo Finance data is point-in-time and subject to revision. Minor differences in the last few days of history are normal.
The screen is re-run monthly (first trading day of each month). Each run produces:
- A new dated CSV in
data/ - A new dated report in
reports/ - The same code (versioned in this repository)
MIT — see LICENSE.
LaunchTower is a self-funded research desk. We publish our methodology, our data, and our code in the open so that anyone can verify our work, reproduce our results, or build on our research.
This is not investment advice. All data is sourced from public sources and provided as-is without warranty.