fundlab/edgar_universe.py - the 'search' for funds we don't have:
1. SEC full-index (Archives/edgar/full-index/YYYY/QTRn/company.gz)
lists every filing; CIKs that filed a base 497/497K in the past 4
quarters = every currently-active US open-end fund (1,668).
2. one small fetch per CIK: the full-submission .txt carries the
line-based SGML prospectus cover (<SERIES-NAME> ... unclosed
<CLASS-CONTRACT-TICKER-SYMBOL> tags) - fund name + every class
ticker, often several funds per filing.
3. alpha-leaning name filter (expanded dbmine PATTERN: +relative
value, risk allocation, dynamic global, real return, hedged),
drop local-DB + shortlist tickers,
4. Yahoo chart verify: instrumentType MUTUALFUND (OTC open-end;
exchange name is useless - OTC funds report 'Nasdaq'),
>=5y daily history,
5. share-class dedupe (longest history), goget download, same
screen_fund engine.
Resumable (per-CIK covers cache), 4-thread, Range-free small files.
First pass results (46 funds screened, 5 NEW candidates):
egrix/ecgmx Eaton Vance Global Macro Absolute Return: R2 0.07,
+7.9%/+4.8% 5y alpha, t 4.9/4.6, corr-port 0.22 - pure macro idio
dmszx Destinations Multi-Strategy Alternatives: R2 0.57, +3.3%, t3.5
cbhax Victory Market Neutral Income: R2 0.07, +4.6%, t2.9, corr 0.11
pdinx Putnam Diversified Income: semi-alpha (full t5.8, 62% 6m+)
(+ wmnux/gioax = 2nd share classes of already-known candidates)
vmnix Vanguard MN: alpha but corr 0.35 (portfolio already 50% MN)
app Fund Lab alpha table now also reads search_external.json.
tests: parse_cover unit tests (unclosed-tag SGML, ticker series
attach, malformed rejected). 65/65 fundlab, 32/32 app.
9 lines
110 B
Plaintext
9 lines
110 B
Plaintext
.venv/
|
|
__pycache__/
|
|
*.pyc
|
|
.cache/
|
|
settings.json
|
|
funds.json
|
|
fundlab/nport_cache/*.html
|
|
fundlab/universe_cache/
|