HB3 INVESTMENTS DESK

Restricted research terminal. Paper trading only.

Incorrect passphrase.

Research and screening only — never financial advice, never buy/sell recommendations. All trading here is paper.

HB3 Co. ▮ Investments Desk

METHOdology

no black boxes — everything the scanner does, stated plainly

What the scanner is

A Python script (scanner/scan.py) that runs on a schedule, pulls daily price bars, computes standard technical indicators, and flags chart setups matching pre-written rules. It is a screening tool. A flagged setup is not a recommendation — it means "this chart matches the written pattern; a human should look at it." Cody picks every candidate. Nothing is entered without his review against the playbook rules.

Data

  • Source: Yahoo Finance chart API — free, no key, daily OHLCV bars, 2 years of history per symbol.
  • Why not Stooq: the original spec called for Stooq CSVs, but Stooq serves a JavaScript browser-verification challenge that blocks server-side fetches from our network (verified 2026-10-05). Yahoo provides equivalent daily bars from a single source.
  • Fallbacks: CoinGecko (crypto) and Frankfurter/ECB (FX) if Yahoo fails for a symbol. Failed symbols are listed as skipped in the output — never silently dropped.
  • Universe (18): SPY, QQQ, AAPL, MSFT, NVDA, TSLA, META, AMZN, AMD · BTC, ETH, SOL · EURUSD, GBPUSD, USDJPY, DXY · plus ES/NQ futures as market context (not scored).
  • DXY is regime context only — an index, not tradeable spot, so it is never scored as a setup.

Indicators (standard definitions)

  • RSI(14) — Wilder's smoothing. Pullback bands are asset-aware: 40–55 equities, 45–58 crypto, 38–58 FX.
  • SMA 20 / 50 / 200 — simple moving averages for trend and range reads.
  • MACD(12, 26, 9) — histogram > 0 is a required confirmation for pullback and breakout longs, not decoration.
  • ATR(14) — Wilder's average true range; the ruler for every stop.
  • ADX(14) — trend-strength gauge. Below 22 = ranging (mean-reversion allowed); above 25 = trending (mean-reversion blocked).
  • Volume vs 20-day average — confirmation where volume exists (equities); range-expansion where it doesn't (FX/crypto).

Setup definitions (v1.1 — specialist-reviewed)

  • trend-pullback (long): close > SMA50 (and SMA50 > SMA200 when available) · RSI dipped into its band for real — crossed under the band top within the last 3 bars, or fell ≥5 pts from its 5-bar high · close within 3% of the 20-day high (equities), 0.5× ATR (FX), 5% (crypto) · MACD histogram > 0. Volume confirms the turn, not the dip — no volume requirement on the pullback itself. RSI bands: 40–55 equities, 45–58 crypto, 38–58 FX.
  • breakout (long): close above the highest high of the prior 20 sessions · volume > 1.5× average (equities) or range > 1.5× ATR plus a conviction close in the top third of the day's range (crypto/FX — wick filter) · MACD histogram > 0 · RSI ≤ 70.
  • mean-reversion (long): RSI hook — dipped to ≤32 and turning back up · ADX(14) < 22 confirming an actual range (not a waterfall) · price within 8% of SMA50 · equities: SPY/QQQ only (single momentum names trend; ETFs revert).
  • mean-reversion (short, FX only): mirror image — RSI hooked down from ≥68 in an ADX-confirmed range.
  • Regime gate: equity longs need SPY above its SMA50 to earn full confidence — into a headwind they're capped at low.
  • Dollar labeling: every FX idea prints its dollar view (USD+ / USD−) — a EURUSD long is short dollars; a USDJPY long is long dollars. Nobody should have to think about this.

How entry / stop / target are set

entry = last close
stop = entry ∓ ATR_MULT × ATR(14)  ·  ATR_MULT = 1.5 (stocks/FX) · 2.0 (crypto) · 1.0 (mean-reversion)
target = entry ± 2 × (entry − stop)  ·  always 2R minimum

Every idea carries an invalidation note — the concrete price or event that kills the thesis. If the invalidation triggers, the idea is dead; no second-guessing.

Position sizing

risk = 1% of sleeve = $50
size = $50 ÷ |entry − stop|  (shares / coins / FX units)
notional caps: 25% of sleeve (stocks) · 30% (crypto) · 100% (forex, no leverage)
if capped → size shrinks, actual risk shown honestly

Confidence — deliberately stingy

High requires the setup plus volume/range confirmation plus MACD histogram aligned plus RSI rising. Most scans will show zero highs. Medium = setup + confirmation. Low = pattern matched but confirmation is thin. A quiet scan is a valid scan — the scanner is not paid to find trades.

Fee assumptions (modeled on every paper fill)

  • Stocks: $0 commission. SEC fee $0.000008 × sale proceeds on sells (min $0.01).
  • Options: $0.65 per contract per side (Schwab/Fidelity standard; no ticket charge assumed).
  • Crypto: 0.25% per side (major US spot exchange retail taker tier).
  • Forex: spread cost, no commission — assumed EURUSD 1.2 / GBPUSD 1.8 / USDJPY 1.5 pips (retail standard-account averages, reviewed quarterly).

These are documented assumptions, not quotes. Net P&L — after these fees — is the only number that counts.

Market regime

Each scan prints a one-line regime read from ES/NQ futures vs their SMA50 (risk-on / risk-off / mixed). It is context, not a signal — the stocks sleeve stands down on new longs when regime reads risk-off.

Paper-vs-real gaps (disclosed, not hidden)

  • Fills log at screen prices. Real trading has slippage, partial fills, and wider spreads.
  • Options paper assumes clean exits; real exercise/assignment and wide markets are harsher.
  • Paper triggers no emotions. The psychology gap is the biggest one and no spreadsheet fixes it.
  • Scanner bars are daily and backward-looking; it cannot see news, order flow, or positioning.

Risk disclaimer

Research and screening only — not financial advice. This page documents exactly what the scanner computes so there are no black boxes — but transparency about a method is not an endorsement of its results. Nothing here is a recommendation to buy or sell anything. Never trade real money based on this site.