AlphaDriftGuideReferencePredictionsData
AlphaDrift
GuideReferencePredictionsData

Data Status

Every pipeline — what it produces, where the data comes from, when it last ran, and how to refresh it. Refresh buttons only work when running locally.

API Dependencies

Anthropic (Claude)Haiku: market narrative + movement summaries · Sonnet: macro scoring
FRED8 macro indicator series (C2)
FinnhubPrimary news source for L2 + L4 movement summaries · Google News RSS used as fallback when no headlines found
Supabase URLDatabase endpoint
Supabase KeyService role (write access)
CNN Fear & Greedpublic API, no key
yfinancelocal Python library, no key
Google News RSSfallback headlines when Finnhub/yfinance return nothing · public, no key

Automated Refresh Schedule

GitHub Actions
TriggerRefreshesUTCSydney / AEST *New York / EST *
Post US closeFull refresh (all AI + scores)(L1 → L2 → L3 → L4)21:157:15 AM5:15 PM
Post ASX open + 30 minYahoo-only prices(L2 + L4)00:3010:30 AM8:30 PM
Post ASX close + 15 minYahoo-only prices(L2 + L4)06:154:15 PM2:15 AM

Weekdays only · no weekend runs · manual trigger via GitHub Actions workflow_dispatch

* Times adjust automatically for daylight saving. View current timezones here

GitHub Actions scheduled runs can be delayed during periods of high load. Delays of 5–30 minutes are typical; occasionally longer. GitHub docs

Yahoo Data Only (L2 + L4)
yfinance

Refreshes prices, returns, momentum/dip scores, RSI, and valuation metrics from Yahoo Finance for both GICS ETFs and personal holdings. Skips all AI costs — no Finnhub, no Google News, no Claude calls. Existing AI movement summaries are preserved.

StaleLast run: 1d ago(03 Apr, 21:49)
.venv/bin/python -m pipeline.refresh_yahoo
Only available on local

Macro Outlook

/macro
25 GICS Macro Scores
yfinanceFREDFinnhubClaude SonnetClaude Haiku

Scores all 25 GICS industry groups on their 6–12 month fundamental outlook (0–100). C1 Analyst Consensus (40%): yfinance analyst recommendations + EPS revisions for the top 5 constituents — also stores buy% and EPS revision%. C2 Structural Tailwinds (35%): one Claude Sonnet call scores all groups simultaneously using 8 universal FRED macro series + Finnhub macro news — also stores tailwinds, headwinds, and cyclical/structural flag. C3 Expert Sentiment (25%): Claude Haiku reads Finnhub news headlines for each group over the last 14 days.

StaleLast run: 1d ago(03 Apr, 21:52)
.venv/bin/python -m pipeline.layer1.refresh
Only available on local
AI Market Overviewnarrative paragraph · generated as part of macro refresh · stored in market_context
Claude Sonnet1d ago (03 Apr, 21:52)
Database
industry_group_scores 25 rows
market_context 1 row

What's Moving

/latest
Market Pulse — Speedometer, Asset Tiles & AI Narrative
yfinanceCNN F&GClaude Haiku

Cross-asset daily snapshot. CNN Fear & Greed score drives the speedometer. Six expandable tiles cover US equity, global equity, rates, commodities, FX, and crypto — 24 instruments total via yfinance (batch download). Claude Haiku generates a 2–3 sentence AI narrative. All data upserted to the market_pulse table as a single row (id=1).

StaleLast run: 1d ago(03 Apr, 21:49)
.venv/bin/python -m pipeline.layer2.market_pulse
Only available on local
Sector Heatmap + Momentum Table
yfinanceFinnhubGoogle News RSSClaude Haiku

Downloads 1 year of daily close prices for the primary ETF of each of the 25 GICS industry groups via yfinance. Computes four return windows (1D, 5D, 1M, 3M), 52-week high/low, % from 52w high, 21-day annualised volatility, RSI (14-day), forward P/E, and PEG ratio. Blends returns into a weighted momentum score — 1D×15% + 5D×20% + 1M×40% + 3M×25% — scaled 0–100. Also generates a 1–2 sentence AI movement summary for each group: Finnhub headlines for the primary ETF plus top 3 GICS constituents are fetched first; if no headlines are found, Google News RSS is queried as a fallback.

StaleLast run: 1d ago(03 Apr, 21:49)
.venv/bin/python -m pipeline.layer2.momentum
Only available on local
Database
market_pulse 1 row
momentum_scores 25 rows
opportunity_scores — Dip Score column — refreshed by ③ Opportunity Signal below

Opportunity Signal

/opportunity
25 GICS Opportunity Scores
Supabase (L1 + L2)Claude Sonnet

Combines Layer 1 macro scores with Layer 2 price returns to compute an Opportunity Score for each of the 25 GICS industry groups. The Dip Signal inverts recent price momentum (bigger pullback = higher signal). Final score = Macro×50% + Dip×50%. A Panic Bonus (+15 pts) fires when a group drops ≥5% in a single day and its macro score is ≥60. Claude Sonnet generates a 3-sentence rationale for the top 5 and bottom 5 groups. Also feeds the Dip Score column on ② What's Moving.

StaleLast run: 1d ago(03 Apr, 21:52)
.venv/bin/python -m pipeline.layer3.opportunity
Only available on local
Macro Scenario Lens
Supabase (L1 + L2)FREDGoogle News RSSClaude Sonnet

AI-generated sector verdicts. Step 1: gathers all Layer 1 + Layer 2 data, fresh FRED indicators, and Google News RSS macro headlines. Step 2: Claude Sonnet identifies 2-3 dominant macro themes and maps scenarios. Step 3: Claude Sonnet produces three verdict buckets — buy opportunities, buying-at-the-top risks, and sectors to avoid — each citing specific data points (returns, RSI, P/E, PEG, EPS revisions).

StaleLast run: 1d ago(03 Apr, 21:55)
.venv/bin/python -m pipeline.layer3.macro_scenarios
Only available on local
Database
opportunity_scores 25 rows
macro_scenarios 1 row

My Holdings

/holdings
Ticker Momentum & Dip Scores
yfinanceFinnhubGoogle News RSSClaude Haiku

Downloads up to 6 months of daily close prices for every ticker in the watchlist via yfinance. Computes four return windows (1D, 5D, 1M, 3M) and scores each ticker using the same weighted momentum formula as Layer 2 (1D×15% + 5D×20% + 1M×40% + 3M×25%) and the same dip signal formula as Layer 3 (1D×20% + 5D×50% + 1M×30%). Both formulas are sourced from the shared pipeline.utils.scoring module. US and ASX tickers are supported. Also generates a 1–2 sentence AI movement summary per ticker: US tickers use Finnhub headlines, ASX tickers use yfinance news — if either returns nothing, Google News RSS is queried as a fallback using the company name (ASX queries append 'ASX' for disambiguation). All headlines are passed to Claude Haiku in a single batched call.

StaleLast run: 1d ago(03 Apr, 21:49)
.venv/bin/python -m pipeline.layer4.ticker_momentum
Only available on local
AI Movement Summaries only
yfinanceFinnhubGoogle News RSSClaude Haiku

Re-generates movement_summary for all watchlist tickers without re-downloading price history. Reads existing scores from the DB, fetches fresh headlines per ticker (Finnhub → yfinance → Google News RSS fallback), calls Claude Haiku, and updates only the movement_summary column. Run this when you want to refresh AI summaries without running the full price/score pipeline (which takes much longer due to yfinance downloads).

Never runLast run: Never
.venv/bin/python -m pipeline.layer4.refresh_summaries
Only available on local
Database
watchlist_tickers 53 rows
ticker_scores 53 rows