MIS — Consolidated Requirements Checklist
Built 2026-05-27 by reading all 16 MD files in the MIS/ folder (Sam's ask: "find out in the MIS folders every MD file what I need, so that's there for sure"). This is the single capture of every requirement/rule/preference Sam has stated about MIS, deduplicated and grouped. The most authoritative intent source is MIS/MIS_INVESTMENT_THESIS.md (Sam's own words, 2026-05-21). Where docs conflict on VIX bands / SACS scale, the v1 sheet values win (MIS/v2/MIS_V1_FORMULA_ARCHIVE.md).
How to use this: this is the backlog for MIS v2 as it scales past 2 tickers. Most items below are NOT yet built — v2 today has the FSE brain, the entry ticket, holdings, and the visual dashboard. Check items off as v2 implements them.
1. Investment Thesis / Scoring Rules
- MIS is NOT a P&L tracker — it's a "cash-flow discipline machine on a static base capital." Goal = controlled, repeatable monthly cash extraction.
- Edge benchmark: static base + 2.5%/month cash-flow target + hard −20% drawdown stop, with deliberate exclusions for higher-conviction/longer-hold positions.
- 2.5%/mo target ($50K/mo on $2M = $600K/yr). −20% hard stop at BOTH position + portfolio level.
- Base capital target: $2M working / $4M total. Below $30K = practical floor; above $250K = bucket discipline becomes structural.
- Reserve compounding: 20–25% of upside stays in; 75–80% extracted to keep base static. Extraction monthly/quarterly (vs tax + family cash rhythm).
- Trailing stops per position, wired into the trade gate / FSE.
- The tension to respect: "don't follow the clock and the percentage and lose out on upside" — the 2.5%/mo rule must NOT force premature exits on positions still running. Bucket structure resolves it.
- Bucket structure: A Working/Cash-flow (~50%, 2.5%/mo, tight trailing stops, monthly reset) · B Buffer/Swing-absorber (~25–30%, long-hold, looser stops, no monthly clock) · C Conviction/Long-hold (~20–25%, allowed to ride). Below $30K = all Bucket A with a soft tilt to strongest names.
- Honest risks Sam keeps in view: 2.5%/mo = 34.5% annualized (aggressive); −20% on $2M = $400K before action; monthly extraction starves compounding; buckets collapse at small capital; multi-window momentum can become noise.
SACS (the composite score) + weights
- SACS = single source of decision truth (no surface classifies independently — FSE principle).
- Components: Z-score vs 14-day distribution · Trend · Flow (Accum/Distrib/Rotating) · Compression · Volume quality (rel vol ≥0.90) · RS vs SPY (30D) · Event/catalyst overlay.
- Reference_Rules weights (v1 canonical): LeanIn 15 · Breakout 12 · MomentumTrim −5 · ReversalWatch 8 · HoldWait −3 · ContrarianWatch 6 · TrendUp 8 · Above30D 6 · Compression 4 · Accumulating 7 · VolPenalty 40 → set to 15 in v2 · MacroBias 4 · EventImpact 3 · Flow 12. Compression_Ratio 0.9.
VIX regime + sizing
- VIX bands (v1): Low 14 · Normal 19.5 · High 27 · Extreme 31. Sizing factor: 1.20 / 1.00 / 0.80 / 0.60. Regime label must always display (LOW/NORMAL/HIGH/EXTREME).
- Risk per trade = 1% of equity. Portfolio_Start baseline 25000. Max open trades = 8.
- ATR stops: 1x / 1.3x (primary) / 2x. Target = 2.5R. R:R target = 2.5 (≥2.5 trade · 1.5–2.5 marginal · <1.5 skip).
- Capital cap per position: MIN(Shares×Price, PortfolioSize×20%). Total portfolio risk ≤ 5%.
- Behavioral throttle: discipline score < 7 → size to 70%.
Decision gates / verdict tiers
- 5-gate funnel (~183 → 3–6 trades): Risk / Grade(A/B) / SACS / Flow / Final.
- 🔑 RiskGate must check R:R ≥ 2.5, NOT Risk% ≤ 2.5% — the Risk%≤2.5% bug systematically rejects the best high-ATR setups (LLY/NVDA/MRVL/AMD); let position sizing handle the risk cap. (v2 note: our FSE currently has a RISK_FAIL on Risk% — revisit per this.)
- Verdict thresholds: ADD = SACS≥65 & Flow≥80 & Grade A & R:R≥2.5 & Uptrend · STARTER = SACS≥55 & Flow≥70 & Grade≥B & R:R≥2.5 & Uptrend · WATCH = Uptrend & (SACS≥45 or Flow≥60) · REJECTED = Downtrend or (SACS<45 & Flow<50) or R:R<2.5.
- Output a SHORTLIST (3–5 names), not a roster. "Today's Trades" gate: top 5 by SACS, max 2/sector, no earnings within 7d, capital-capped 20%, total risk ≤5%.
- Earnings block within 7 days; clear the flag once earnings pass. Document SACS thresholds visibly (legend).
Expectancy / learning loop
- Closed loop: Plan → Execute → Review → Adjust → Repeat; learn from Sam's own performance.
- Expectancy in R units; track Win Rate, Avg Win/Loss, Profit Factor, Expectancy, discipline↔outcome correlation.
- Reco/backtest tracking (#9): RECO_HISTORY (append on send) + RECO_PERFORMANCE (forward returns) + 1d/3d/5d scorecard. (v2 note: started — TRACK RECORD on the ticket + FINAL_STATE_HISTORY.)
2. Data Sources
- Google Finance = primary live price + history (3D/10D/30D, ATR). VIX via
INDEXCBOE:VIX. - Schwab API (live positions, production), Finnhub (
EARNINGS_API_KEY, earnings/events), broker CSV exports = source of truth for holdings + entry prices. - News RSS → catalyst sentiment → EventImpact. Macro_Tape intraday (S&P/Dow/Nasdaq/Russell/USD/Oil/Gold/10Y).
- Accuracy: holdings must reconcile to broker reality (no phantom positions); separate data ingestion from calculation.
- Real spot gold + Bitcoin must be actual (oz / coin) — (v2: GF can't; now via Coinbase.) Macro spot prices in the macro block.
3. Surfaces / UX
- 3 emails/trading day + Sunday Week-Ahead (~9:53 Morning · ~2:05 Trade Action · ~3:00 Power Hour · Sun ~6:05 Week-Ahead). Per-day dedup guard. No weekend sends.
- Direction arrow ↑/↓ + Today's % @ price on EVERY signal line (green up/red down).
- Outlook iOS-safe:
<table bgcolor>+ inline styles only, no<style>block. 12-hr AM/PM time. - Holdings = mobile card grid (4/row), under regime header, sorted by |P&L%| desc; losses visually distinct (red/parens).
- BLUF + Game Plan + High Conviction + Trade Actions as real HTML with bold tickers + colored % + action badges (#3–#6).
- VIX history (5/7/10-day) restored; volume, leadership/pressure surfaced; morning→2PM intraday delta.
- The 7 cash-flow render additions: (1) monthly target tracker · (2) per-position trailing-stop enforcement · (3) drawdown gauge (−5/−10/−15 warnings, −20 hard) · (4) bucket allocation report · (5) extraction recommendation · (6) sector exposure pie · (7) multi-window momentum (10/22/65-day — pick 3 max).
- Mildred's 4-field entry primitive to RESTORE: ticker / price / date / buy-or-sell — everything else computed (stop/target/sizing/reason auto). Quick Trade Calc's 13 inputs = too many. (v2: the tweakable entry — budget/years/risk — aligns; simplify toward 4 fields.)
- 30-second acceptance test (Status tab read first each morning): (1) Did I hit 2.5% this month? (2) Drawdown today + distance to −20? (3) Sector concentration? (4) What to trim for next reset? (5) Bucket allocation vs target? — "if it can't answer those in 30s, not done."
4. Holdings / Accounts
- Reconciled truth (2026-05-05, 13 positions): Fidelity Cash 5692, Fidelity Margin 0600, Schwab 898 (lots in
MIS/data/holdings_reconciled.csv). (Now superseded by live email/screenshot loads; seereference_broker_trade_emails.) - Phantom positions to confirm/retire (in MIS but not in any broker CSV): AVGO, VOO, COST, SCHZ, KO, PYPL — unless they live in an account not yet exported.
- Holdings source of truth =
Trade_Log_Imported(allowlist; phantoms drop out). Aggregate duplicate tickers; show qty + account. - Cost basis = weighted-avg across buys (NOT lot-tracking; use 1099 for tax). Reconciliation idempotent. Doesn't track shorts/FX/dividends.
- Sector lookup must not orphan positions (SPY → ETFs/Indices, not "Unknown").
5. Universe Rules
- ~183-ticker universe with metadata (Name/Sector/Industry/Type/Beta/Vol/Include/earnings).
- Include=Y = evaluate; add TradeableFlag for "can generate a trade." Exclude indices + BTCUSD from trade output (context-only).
- Flag leveraged/inverse ETFs (UVIX/UVXY/TMV/TBT/NVDL/USO/UNG) as Include=N / context-only — they generate spurious signals.
- Low-ATR/cash ETFs (SGOV/SCHR/SCHZ/SHY/SPTI) cause lethal sizing → capital cap required.
- Correct sector assignments (BTCUSD→Crypto, indices→Market Index). Sector ETF proxy map for RS; repair
ETF_Map(#REF!). - GAP — not in the MD files, confirm with Sam: the explicit >$20 price preference and explicit hedging rules (referenced in chat/
MIS_FSE_ARCHITECTURE.md/memory, not these 16 docs).
6. Behavioral / Discipline
- Behavior_Tracker daily self-grade (FollowedPlan/Discipline 1-5/FOMO count/Stop hits/Lessons + rolling 30d). Discipline < 7 → size to 70%.
- Blind Side Analysis: "if I didn't already own X, would I buy?" (endowment-bias check).
- No-Monday-morning-QB — surface warnings PRE-trade. Advisory, not autonomous (never auto-executes).
- LiveGuard pre-trade blocking (>5% move = SHOCK; news override; clears EOD). Earnings protection (block within 5-7d; clear after).
- Catalyst sentiment negation-aware ("avoid bankruptcy" ≠ bearish). Macro catalysts must not bleed into single-ticker scores.
- Wash-sale tracking. Exit discipline: stop→EXIT · ≥25%→TRIM · ≥10%→Ride · ≤−4%→Reduce · else Hold.
7. Open / Unmet (carried forward)
- SECURITY P0: rotate ALL plaintext creds in the production sheet (Schwab id/secret/refresh/hash, Finnhub key) → PropertiesService; audit sharing.
- Sizing safety: capital cap (kills 700%-of-portfolio sizes) · final 5-name selection gate · unify stop logic (ATR, not hardcoded 6/10%).
- Engine fixes: RiskGate R:R≥2.5 · RR_13W IFERROR/MAX guard · EarnFlag clear when <0 · VolPenalty 40→15 · STARTER gate doc.
- Formatting: Trade_Log dates (serial→date) · prices (%→$) · 10Y ($→%) · ASCII-safe emoji.
- Platform: consolidate to ONE sheet + ONE script + ONE trigger set; don't confuse the 4 sheets; FSE supersedes Phase 2 + v11.0e/f.
- Process: test before push; clasp push then redeploy; migrate to v1 per FINAL_STRUCTURE_RECOMMENDATION.
- Parked: #7 intraday delta · #9 backtest tracking · #10 sheet-to-bones · SACS backtesting (validate SACS≥65 precedes good moves) · trade-outcome auto-capture.
Source: all 16 MIS/**/*.md files, read in full 2026-05-27. Two flagged gaps (>$20 preference, hedging) live in MIS_FSE_ARCHITECTURE.md / chat, not these docs — confirm with Sam.