We've been running defense ETFs since day one. ITA. XAR. They're fine — they do exactly what they're supposed to do. When macro signals fire on defense, we buy the basket. When they cool off, we sell the basket. Simple, diversified, boring in the best possible way.

But here's the thing that's been nagging at us.

When defense is hot, ITA includes every name in the sector. That means Boeing. Boeing is down roughly 60% from its 2019 peak. The 737 MAX disasters. The 787 production problems. The recent manufacturing quality scandals. Boeing is a defense company that's been eating its own lunch for five years straight.

Meanwhile, Northrop Grumman is having one of its best runs in decades. B-21 Raider production ramping. Space segment growing. Revenue up, margins expanding. NOC is killing it.

When we buy ITA, we're buying both. We're paying Boeing's tab to get Northrop's gains. The ETF averages them together and we get… fine. Not great. Not what the thesis actually called for.

So we built the scanner.

The Problem With Averages

To understand why this matters, look at what happened during the Iran ceasefire chaos in early April. Defense signals were firing hard — GPR at crisis levels, RSS flooded with conflict articles, prediction markets pricing in escalation. Our ITA position captured some of that. But the actual dispersion within defense ETFs was enormous:

An ETF treats them all equally (by market cap). The scanner doesn't have to.

The 7-Factor Gauntlet

We spent a week designing the scoring system before writing a single line of scoring code. The rule was: tests first, then implementation. We ended up with 22 tests before the scorer existed. Here's the gauntlet:

# Factor Weight What It Checks
1 Momentum & Trend 25% SMA position (price above/below 20-day), Rate of Change (5 and 20-day ROC), RSI (oversold/overbought). Stocks need price above SMA, positive momentum, and RSI in the healthy zone.
2 Relative Strength vs ETF 20% How does this stock perform vs its sector ETF (ITA for defense)? If you can't beat the ETF, why take the single-stock risk? Must outperform the basket to earn full marks.
3 Volume Confirmation 15% Price without volume is a rumor. We measure 5-day average volume vs 20-day average. Breakouts need buying conviction behind them. Low volume moves get penalized.
4 Volatility Check 10% ATR as a percentage of price. Too volatile = unpredictable. Too calm = nothing's moving. We want controlled movement, not casino swings.
5 Liquidity Floor 15% $10M daily dollar volume minimum. Hard disqualifier. If a stock doesn't trade $10M/day, we can't move in and out cleanly. Zero liquidity score = no signal, full stop. No exceptions.
6 Fundamentals 15% Reserved for future expansion. PE ratio, revenue growth, debt ratios. Not yet implemented — requires earnings data we don't have a clean free source for yet. Currently scores neutral (50).
7 News / Sentiment Bonus +/− bonus Catches what pure numbers miss. Recent positive news adds bonus points; negative press subtracts. A stock can have great momentum but be one headlines-driven selloff from blowing up our thesis.

A stock needs to score 65 or higher out of 100 to earn a signal. That's not a low bar — it's a gauntlet. A stock can have great momentum but fail volume confirmation and miss the threshold. A stock can have massive volume but be trading below its SMA with negative ROC and get cut. Every factor matters.

The Key Design Decisions

Rule #1: The Scanner Follows. It Never Leads.

The stock scanner only activates for sectors where macro signals have fired recently. If defense hasn't generated a macro-level signal in the last N days, the scanner doesn't run on defense names. This isn't a stock picker — it's a precision instrument for acting on a thesis the macro engine already validated.

Rule #2: Individual Stocks Are Capped at 65% Confidence.

A macro signal on ITA can carry up to 85% confidence. An individual stock signal from the scanner caps at 65%. Always. Individual names carry company-specific risk that sector-level signals don't — earnings surprises, CEO departures, contract cancellations. The cap is a humility tax. ETF-level conviction is earned. Single-stock conviction has to be borrowed conservatively.

Rule #3: Zero Liquidity = Hard Disqualification. No Exceptions.

If a stock doesn't hit the $10M daily volume floor, it gets a zero on the liquidity factor and cannot reach 65 even with perfect scores everywhere else. We made this non-negotiable. A signal on an illiquid name is a liability, not an opportunity. The math enforces what judgment might let slide.

Rule #4: TDD From Day One.

We wrote 22 tests before the first line of scoring code. That meant the scoring system was designed by writing failing tests that described what "correct" looked like. When the implementation went wrong — and it did, several times — the tests caught it before it could touch production signals. Lesson from building Tauntaun: the more complex the system, the more disciplined the testing has to be.

The First Universe: 7 Defense Stocks

We started with defense because it's where Tauntaun's macro thesis is strongest right now. Seven names in the initial universe:

Defense Universe — Initial Scan Pool
RTX — Raytheon Technologies · Tomahawk, Patriot, Stinger
LMT — Lockheed Martin · F-35, Javelin, HIMARS
NOC — Northrop Grumman · B-21, satellite systems
GD — General Dynamics · Abrams, Stryker, Gulfstream
BA — Boeing · Apache, Chinook… and everything else
LHX — L3Harris Technologies · Comms, ISR, night vision
HII — Huntington Ingalls · Aircraft carriers, nuclear submarines

Boeing is deliberately included. The scanner might clear it if the numbers are right. We're not making a qualitative judgment that Boeing is bad — we're letting the 7-factor gauntlet decide. If Boeing's momentum is strong, volume is confirming, and it's beating ITA on relative strength, the scanner should be willing to say so. The thesis follows the data, not the narrative.

RTX Was the First Pick

In dry-run testing, RTX cleared the gauntlet first. It makes sense why: Raytheon's products are the most directly cited in every geopolitical crisis scenario we track. When GPR spikes on conflict risk, Tomahawks and Patriots aren't just sector plays — they're the literal equipment being discussed. RTX has strong momentum, healthy volume, beats ITA on relative strength consistently when defense heats up, and trades well above the liquidity floor.

The system didn't know any of that. It measured seven factors and RTX scored above 65. That's the whole point.

What's Next

Defense is the test case. If the scanner proves out — if individual stock signals generate better risk-adjusted returns than just buying the ETF — we expand the universe.

Energy: When USO fires, which names actually benefit? XOM vs CVX vs PSX vs MPC? Not the same thesis at all.

Tech: When AI infrastructure signals fire, NVDA is obvious — but what about AVGO, ANET, DELL? The scanner should be able to distinguish.

Cybersecurity: CIBR is our current vehicle. But CrowdStrike, Palo Alto, and Fortinet have wildly different risk profiles even in the same sector signal environment.

The goal isn't to become a stock picker. The goal is to become a better macro trader — one that can act on a sector thesis with precision instead of buying the whole bucket and paying for the laggards.

The Honest Assessment

This is still early. The fundamentals factor is a placeholder (returns neutral 50) because we don't have clean, free earnings data yet. The news/sentiment bonus is rudimentary — it's not the same quality as our main RSS scanner. The universe is small.

But the architecture is right. Tests first. Hard rules. No override switches. The scanner follows the thesis — never leads it. Individual conviction is capped below sector conviction, always.

Tauntaun started with one signal source. Now there are ten. Each one added because a specific gap in the previous system made itself obvious. The stock scanner exists because ITA and Boeing exist in the same ETF and that's a solvable problem.

We built the tool. Now we let it prove itself.

"Price without volume is a rumor. Momentum without relative strength is wishful thinking. Both without a macro thesis are noise."