Add a Cboe provider and pin VIX3M to it - #30
Merged
Merged
Conversation
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>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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), andVIX3Mpinned to it.Why. Yahoo serves the Cboe term-structure indices patchily. Measured 2026-09-14: a full-history pull of
^VIX3Mended on 2026-07-17, while a three-month pull returned 24 rows against 64 for^VIXover 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.
^VIX(Volume 0, actions 0), so the one equity reader serves it and every tier is a passthrough.cboekey, never defaulted, andPRICE_SOURCESgainscboeLAST so it can only win a symbol by explicitprice_source. Yahoo carries the same tickers; without the pin the deployment default would take the symbol back.update.pyruns it inside--bars --domain equitiesafter yfinance. A deployment with no pinned symbol pays one no-op. The Windows equities task picks it up unchanged.VIX3Mis pinned.VIXstays 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.parquetand the nightly push delivers it. Until then a consumer readingVIX3Msees 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 andget_barsserves it on all three tiers; scoped no-op; failed download is a failed run.ruff check src testsclean.🤖 Generated with Claude Code