Methodology & Audit

Tideline is a public macro regime tracker with one narrow predictive claim and one descriptive panel. Every test, every iteration, every external review is documented here. The brand is honesty, not alpha.

What Tideline claims

Two outputs. They mean different things and should not be conflated:

Zone 0 — Faber Trend Signal (predictive)

We do not claim Tideline predicts SPY direction. We claim that historically, SPY's down-rate in the next 20 trading days has been measurably higher when this rule fires CAUTION. The edge is small (≈9pp) and barely clears the bootstrap-corrected baseline. Nothing else is claimed.

Zone 1 — 4-State Regime (descriptive only)

Zone 1 makes no directional claim. STRESS describes current macro conditions, not what SPY will do next. In our backtest, average forward returns in STRESS are slightly positive (mean reversion after stress) — same pattern observed across 5 separate tests of the underlying composite.

Architecture

  1. Python workers fetch data on a 5-minute cron (GitHub Actions, public repo).
  2. Rule v1.py evaluates state machine on the full 1997-present panel.
  3. Output JSON + decision-log CSV uploaded to Cloudflare R2 (zero egress, viral-safe).
  4. Static frontend (this page) fetches from R2 — no backend, no database.
  5. Every payload includes rule_sha256 — SHA256 of rule/v1.py at compute time. If the rule is ever modified, the hash changes and any reader can detect it.

Data sources (all free)

Important caveats (read these)

FRED data forward-fill

FRED publishes most series at T+1 (next business day). When Tideline computes today's row, yesterday's BAA10Y/VIX/curve values are forward-filled to today. This is the only honest behavior given FRED's release schedule — there's no look-ahead, just lag.

NFCI release lag (T+5)

NFCI for the week ending Friday is released the following Wednesday. The state machine enforces this 5-day lag explicitly in code. When you see NFCI in the components panel, it's the value as of 5 trading days ago — what would have been available at the time of our state computation.

Decision log drift on FRED revisions

Every state on the dashboard is recomputed from current FRED data each run. If FRED retroactively revises a historical value (this happens occasionally, e.g., NFCI), past decision-log entries can shift slightly. In our audit, a +50bp revision to a single historical BAA10Y day caused 1 state-day to flip over a 29-year panel. Small but real. The log is "current vintage truth," not appended-immutable. We may persist transitions append-only in a future version.

What we tested and rejected

Tideline went through 11 documented research entries. Several initial designs failed and were killed honestly. The full chronological log lives in the project repository at workers/backtest/research_log.md. Highlights:

Integrity checks

Disclaimer

Tideline is a descriptive macro regime tracker. It is not investment advice and does not recommend any trade. Past performance does not predict future results. The historical edge described above is small, statistically marginal, and based on a single 29-year sample. Signal decay is plausible — the underlying rule has been public since the 1970s.

Decision log

Every state transition Tideline has ever assigned, machine-readable. Download CSV.

Full research log

Every test run, every external review, every iteration that got us here. Failures included. Rendered verbatim from workers/backtest/research_log.md.

Loading research log…
Built with Tideline · Open methodology