Skip to content

Add a Cboe provider and pin VIX3M to it - #30

Merged
mspinola merged 1 commit into
mainfrom
claude/cboe-provider
Sep 14, 2026
Merged

mspinola merged 1 commit into
mainfrom
claude/cboe-provider

Conversation

@mspinola

Copy link
Copy Markdown
Owner

What

A fourth vendor, providers/cboe.py, reading Cboe's own daily index CSV (cdn.cboe.com/api/global/us_indices/daily_prices/<symbol>_History.csv, no key, one GET), and VIX3M pinned to it.

Why. Yahoo serves the Cboe term-structure indices patchily. Measured 2026-09-14: a full-history pull of ^VIX3M ended on 2026-07-17, while a three-month pull returned 24 rows against 64 for ^VIX over the same span. The tape-context row that reads VIX/VIX3M spent two months trailing the crowd board because of it. Cboe's file is complete daily OHLC from 2009-09-18 through last Friday (4,271 rows parsed end to end from the real download).

Shape.

  • Equities domain, same stored frame as Yahoo's ^VIX (Volume 0, actions 0), so the one equity reader serves it and every tier is a passthrough.
  • Registry gains a cboe key, never defaulted, and PRICE_SOURCES gains cboe LAST so it can only win a symbol by explicit price_source. Yahoo carries the same tickers; without the pin the deployment default would take the symbol back.
  • update.py runs it inside --bars --domain equities after yfinance. A deployment with no pinned symbol pays one no-op. The Windows equities task picks it up unchanged.
  • Only VIX3M is pinned. VIX stays on Yahoo, which serves it completely and which a consumer in another repo documents fetching from there.

After merge

Pull onto the Windows box; the 17:30 equities task writes bars/equities/cboe/VIX3M.parquet and the nightly push delivers it. Until then a consumer reading VIX3M sees it present under a different vendor and, in cot-analyzer's case, reports the row as awaiting data. The old yfinance parquet stays in the store, harmlessly, as a second source nothing resolves to.

Verification

  • tests/test_cboe_provider.py (7): NAME in the vocabulary and last; CSV parse to the equities frame; VIX3M resolves to cboe under either deployment default; cboe is never defaulted onto another symbol; update writes the pinned symbol and get_bars serves it on all three tiers; scoped no-op; failed download is a failed run.
  • CLI tests stub the second vendor beside yfinance so they stay offline; the context-set test names the pinned leg.
  • Suite 255 passed, 14 skipped (network-marked), against the worktree. ruff check src tests clean.

🤖 Generated with Claude Code

Yahoo serves the Cboe term-structure indices patchily: measured 2026-09-14, a full
pull of ^VIX3M ended 2026-07-17 and a three-month pull had 24 rows against 64 for
^VIX. Cboe publishes the same indices as a complete daily OHLC CSV with no key.
providers/cboe.py reads it into the equities frame, runs inside --bars --domain
equities after yfinance, and serves only symbols whose registry entry names a
cboe key and resolves to it. VIX3M is pinned with price_source: cboe; nothing
else moves, and VIX stays on Yahoo.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
@mspinola
mspinola merged commit d47659c into main Sep 14, 2026
5 checks passed
@mspinola
mspinola deleted the claude/cboe-provider branch September 14, 2026 13:58
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant