Seeking SpringQuant Research Terminal

0%
📋 How to load real prices — simple steps (click to open)
  1. Step 1 — Pick your stocks FIRST. Type tickers in the box below, or choose a preset (S&P 500, Nasdaq-100, Dow 30).
  2. Step 2 — Paste your Tiingo key in the box above. You only do this once — the page remembers it.
  3. Step 3 — Click "⬇ Fetch / update data" and wait for the progress bar to finish. Don't close the page while it runs.
  4. Step 4 — Check the banner below. 🟢 GREEN = all real prices, you're good. ⚠️ YELLOW "MIXED DATA" = some stocks are missing → just click Fetch again.
  5. Step 5 — Read the dots next to each ticker. 🟢 = real price. 🟡 = fake demo price (not fetched yet). Never trust a 🟡 row.
⭐ The one rule to remember: if you CHANGE the stock list, click Fetch again BEFORE trusting the numbers. The fetch only downloads whatever is in the box at that moment.
📅 Your weekly routine: same day each week → open this page → click Fetch (it skips anything still fresh) → banner turns green → click Run scan → then re-run the Lab and Models tabs. Done in a few minutes.
📦 Backup everything saves your Trade Journal, price cache, and settings into one file you can keep safe. Use it before switching browsers, computers, or moving this site to a new domain — restoring brings everything back exactly as it was. ⬆ Restore backup loads a file saved this way.
DEMO DATA MODE — price series are synthetic walks. Paste your Tiingo key above and click Fetch / update data to go live.

Scanner Matrix health score · alerts · confirmations · research edge

#TickerLast CloseHealth ScoreAlertsActive Confirmations Profile Edge 1MEdge 3MEdge 6MN
Run a scan to populate the matrix.
Edge columns come from the Research Lab event study run on this exact watchlist: the historical forward return of each ticker's current confirmation profile, minus the baseline. ⚠ = fewer than 15 historical occurrences (low confidence) · — = profile never seen with enough history. All columns are click-to-sort. Adaptive score = 50 + 7 × (sum of the measured 3M edges of the active confirmations), capped 0–100 — evidence-weighted rather than fixed-weighted.

Top Picks ranked by combined health × predictive score

Run a scan to rank the watchlist.

Action Map diagnostic health × predictive probability

Run a scan to build the map.
How to use the map The two scores measure different things, and the disagreements are the lesson. Health (structural) asks "does this chart look right, by the rules?" Predictive (a logistic model trained walk-forward on this watchlist) asks "historically, what were the odds this exact situation resolved upward over 3 months?" Top-right = conviction. Top-left = looks pretty, historically goes nowhere — the patience quadrant. Bottom-right = the contrarian zone where Healthy-Negative mean-reversion setups live. Bottom-left = stand aside.

Inspection Chart 4-panel technical map

Live Structural Market Scorecards 0–100 weighted regime score

Run a backtest to build the scorecards.

⚙ Strategy Profile Filter Rules

Confirmation logic gate:

Performance Matrices forward returns · 1W / 1M / 3M

Run a backtest to compute forward performance.

Visual Verification Charts stacked peer layout

Charts render after the backtest runs.

SEEKING SPRING

Signal Research Lab

STATISTICS · EDGE · EVIDENCE
Uses the Scanner ticker list — updates live as you edit it.
What this lab does This is an event study, a standard tool in quantitative finance. For every bar of history in every imported ticker, we record which confirmations were active, then look forward 1, 3 and 6 months and measure what price actually did. Pooling thousands of these observations lets us ask, with data instead of intuition: which signals carried a real edge, and which were noise? Every result is compared against the baseline — the return of an average bar with no filter at all — because a signal is only useful if it beats doing nothing.
Run the analysis to study your watchlist.

SEEKING SPRING

Predictive Models

REGRESSION · CLASSIFICATION · CLUSTERS · TIME SERIES
0%
What this tab does Four model families answer one question from four angles: when is acting worth it, and when is doing nothing the smarter trade? Linear regression finds which raw variables actually push forward returns. A logistic classifier turns the whole picture into a single 0–100 Predictive Score — the probability of beating the baseline over 3 months. K-means clustering discovers natural "market states" and grades each one Act / Watch / Stand Aside. And time-series models (AR & Holt trend) act as the naive benchmark your signals must beat to prove they add information. Everything is validated walk-forward: trained on the first 70% of history, graded on the unseen final 30%.
Train the models to see results.
SEEKING SPRING Field Manual HOW TO FLY THIS MACHINE — AND WHEN NOT TO

Pilot's Handbook: Instruments, Variables, Models & Flight Rules

0 · Cockpit orientation — what each tab is for

🔍 Scanner is your instrument panel: it reads every stock's current condition. 📊 Backtester is the flight simulator: replay a rule on two assets and see what would have happened. 🧪 Research Lab is the wind-tunnel: it tests each signal against thousands of historical bars. 🤖 Predictive Models is the flight computer: it fuses everything into probabilities and regimes. This manual is the checklist you return to when a number doesn't make sense.

1 · The three instruments (indicators) and their variables

Instrument A — EMSM (Elphys Momentum State Machine). Four exponential moving averages of price — 9, 20, 50 and 100 periods — are compared as percentage gaps:

  • EMSM Fast (9v20) = (EMA9 − EMA20) ÷ EMA20 × 100 — the throttle. Positive and rising = acceleration.
  • EMSM Mid (20v50) = (EMA20 − EMA50) ÷ EMA50 × 100 — the intermediate trend.
  • EMSM Macro (50v100) = (EMA50 − EMA100) ÷ EMA100 × 100 — the prevailing wind.
Fig. 1 — a bullish EMA stack: price above 9 above 20 above 50 above 100, gaps widening EMA9 EMA20/50 EMA100

The state machine reads the three gaps plus their 5-bar linear-regression slopes and names the regime: Full Bull (all positive, fast rising), Bullish Pullback (macro and mid positive, fast dipped negative but turning up — the classic buy-the-dip geometry), Distribution (all positive but slopes rolling over), Liquidation Cascade (all negative and falling), Compression (gaps pinched inside ±0.5% — energy stored), and the trap states in between.

Instrument B — 20W Anchor Distance. How far price has stretched from its structural anchors:

  • 20W Anchor Distance % = (weekly close − EMA20 of weekly closes) ÷ EMA20weekly × 100 — the red line. Deeply negative = discounted vs the half-year anchor.
  • 50-EMA Distance % = (close − EMA50) ÷ EMA50 × 100 on your chosen interval — the blue line.
  • Smooth-9 = 9-period EMA of the 20W distance — the gray memory line. Your core rule: Smooth-9 below the 20W distance = structurally healthy uptrend (distance is out-running its own average).
  • Structural-health gap (s9gap) = 20W distance − Smooth-9, the model-ready version of that rule: positive = healthy.
Healthy Negative: deep, curling up, smooth-9 flattening → mean reversion imminent Fig. 2 — the mean-reversion setup on the 20W distance panel (red) with smooth-9 (gray) 0%

Healthy Negative requires all four at once: distance below −5.75, smooth-9 below the distance line, distance rising bar-over-bar, and smooth-9 flat or rising. Dangerous Negative is its evil twin — below zero and still sinking. The Lab uses it as the negative control, and it reliably loses; if it ever stops losing, distrust the whole run.

Instrument C — Hybrid Relative Strength vs SPY. RS = (stock's 21-bar growth ratio − SPY's 21-bar growth ratio) × 100, smoothed with a 5-period EMA. Above zero = out-performing the index (alpha regime). RS 5-bar Change is its short-term vector. The framework's sweet spot: RS below zero but rising (quiet accumulation) or holding above the −5 shelf with a positive vector.

Shared gauge — Volatility Rank (0–100): today's 14-bar standard deviation ranked inside its own 63-bar range. ≤25 = tight coiled base (low-risk entries), ≥85 = chase zone (even good setups suffer worse drawdowns).

2 · The nine confirmations — the warning lights

EMSM Acceleration
State machine reads Full Bull or Bullish Pullback with the fast gap's slope positive.
Smooth-9 Below Anchor
s9gap > 0 — your structural-health rule is on.
Alpha Regime (RS > 0)
Out-performing SPY right now.
RS Accumulation
RS below zero but rising bar-over-bar — strength building before the regime flips.
RS Holding > −5 & Rising
Above the shelf with a positive 5-bar vector — your backtester's default partner rule.
Healthy Negative Base
The four-condition mean-reversion setup of Fig. 2.
Low-Vol Tight Base
Volatility rank ≤ 25 — the coiled spring.
Fresh EMSM Bull Cross
EMA9 crossed above EMA20 within the last 3 bars.
⚠ Dangerous Negative
The falling knife. Deliberately included so the studies can prove they distinguish good from bad.

3 · Column dictionary — every number on every table

Health Score (0–100)
Structural diagnostic. Fixed weights: EMSM state up to 25 pts, anchor structure up to 20, smooth-9 rule 10, RS level 15, RS momentum 10, volatility 10, minus a 15-pt penalty when severely extended; rescaled to 100. Green ≥70, yellow 40–69, red <40.
Adaptive Score
Evidence-weighted alternative: 50 + 7 × (sum of the measured 3M edges of the currently active confirmations), capped 0–100. Toggle in the Scanner controls. Use it with the structural score, not instead of it — its weights are fitted to the same history they're graded on.
Pred (Predictive Score)
Logistic-model probability (× 100) that this bar beats the average 3-month outcome, trained walk-forward on the scanned universe. It is a probability, never a promise.
Alerts / Active Confirmations Profile
How many, and which, of the nine confirmations are on — evaluated on the most recent completed bar (the as-of date shown under the matrix). Daily interval = latest close; Weekly = the current week's running close.
Edge (1M / 3M / 6M)
Historical forward return of this exact profile minus the baseline. The single most honest column on the page: positive means this configuration has actually paid better than a random entry.
N
Sample size — how many times the profile/signal occurred. Below ~15, treat any edge as an anecdote. Bigger N = more trustworthy statistics.
Baseline
Average forward return of every bar, no filter. The "do nothing" benchmark all signals must beat.
Win Rate %
Share of occurrences with a positive forward return. 55% with big average winners beats 70% with tiny ones — always read it next to Avg Return.
Avg Return %
Mean forward return over the horizon. Compare to the baseline via the Edge column.
Profit Factor (PF)
Gross gains ÷ gross losses. >1 profitable, >2 excellent, ∞ means no losing occurrences (usually a small-N artifact).
t / significance stars
Welch t-statistic vs the baseline. · suggestive (|t|>1.28), * ~95% (|t|>1.96), ** ~99% (|t|>2.58). Overlapping windows inflate these — mentally shave a star.
Coefficient (standardized)
Regression weight: expected change in forward return per one standard deviation of the variable, all else equal. Comparable across variables because everything is standardized.
Share of return variance the model explains. In markets 2–10% out-of-sample is normal and usable; 90% would mean a bug, not genius.
Decile
Test-set bars ranked by Predictive Score, cut into ten buckets. A rising staircase from decile 1 to 10 is the proof the score ranks real opportunity.
MAE
Mean absolute error of a forecast — average size of the miss, in return points. Lower is better.
Signals Count (Backtester)
Edge-triggered: counted on the first bar a rule combination turns true, not every bar it stays true.

4 · The four models, illustrated

Linear regression (OLS) draws the best straight-line relationship between each variable and forward returns, holding the others constant. Read it to learn which dials matter.

Fig. 3 — regression: the slope of the fitted line is the coefficient; scatter around it is why R² stays small

Logistic regression (the Predictive Score) outputs a probability instead of a number — an S-shaped curve squashing all evidence into 0–100% odds of beating the baseline.

50% — coin flip Fig. 4 — the logistic curve: evidence in, probability out; extremes require overwhelming confluence

K-means clustering is unsupervised: it groups similar bars into "market states" without ever seeing returns, and we grade each state afterward. It answers "what kind of day is today, and how did days like it end?"

ACT state WATCH state STAND ASIDE Fig. 5 — clusters: bars grouped by similarity, then graded by what happened next

Time-series benchmarks (AR / Holt — the ARIMA & Prophet family) forecast purely from the price's own history. They are the bar to clear: if your indicators can't out-forecast them, the indicators add no information beyond the tape itself.

Walk-forward validation is the frame around everything: models are fitted on the first 70% of history and graded only on the final 30% they never saw. It is the single habit separating research from self-deception.

TRAIN — model may look TEST — eyes closed Fig. 6 — walk-forward split: grades come only from the unseen segment

5 · Flight rules — when to fly, when to stay grounded

  • FLY when three gauges agree: Predictive Score in its upper range, an ACT market state, and a confirmation profile whose Edge column is positive on a healthy N. Confluence is the whole game.
  • DO NOT FLY on a pretty chart alone. The Action Map's "Wait" quadrant exists because good-looking structure with mediocre odds was the most common trap in every study run.
  • DO NOT FLY on N < 15. A profile seen a dozen times has no statistics, only stories.
  • DO NOT FLY into a chase zone. Volatility rank ≥ 85 or 20W distance > +20%: even correct calls suffered the worst drawdowns there.
  • DO NOT FLY against the negative control. Dangerous Negative active = the framework's clearest "hands off."
  • Ground the fleet when validation fails. If the decile staircase collapses out-of-sample, the honest reading is "this universe/period offers no edge" — and skipping it costs nothing, as the baseline proves.
  • Log every flight. Export the tables to Excel, write down why you acted, and re-grade yourself monthly against the baseline. The instrument you're really calibrating is you.

6 · Going live — wiring a real data API

Update: live data is now built in. Paste your Tiingo key at the top of the Scanner tab and click Fetch — caching, pacing, weekly freshness and the CORS fallback (tiingo-proxy.js) are all handled for you. The notes below remain for anyone swapping providers. Everything runs on one seam: DataAdapter.getSeries(ticker, years) must return {dates:[Date…], close:[Number…]} of daily bars, oldest first. Replace its body with a fetch to any provider that allows browser requests (Financial Modeling Prep, Tiingo, Polygon, Alpha Vantage; some need a tiny proxy server for CORS). Sketch:

async getSeries(ticker, years){
  const key = "YOUR_API_KEY";
  const url = `https://financialmodelingprep.com/api/v3/historical-price-full/${ticker}?timeseries=${years*252}&apikey=${key}`;
  const j = await (await fetch(url)).json();
  const rows = j.historical.reverse();
  return { dates: rows.map(r => new Date(r.date)), close: rows.map(r => r.close) };
}

Because callers would then need await, the simplest integration is to pre-fetch your universe into DataAdapter.cache at startup and leave everything else untouched. For scheduled automation (nightly scans, emailed Top Picks), lift the engine functions into a small Node script and run them on a cron job — the math is plain JavaScript and ports unchanged.

Used only to compute % of account allocated and at risk below. Saved privately in this browser — nothing here is sent anywhere.
Stocks
Add a stock on the left to start its journal.