Phase 10 Session 2 — Conviction-weighted institutional flow (primary rejected, ultra-T1 under research gate)#10
Merged
Conversation
…ted, ultra-T1 variant under research gate Tests Δpct_portfolio of T1+T2 active managers (conviction-tier-weighted) as a second alpha alongside fundamental_margin_compression. Primary construction (9 T1 funds @ weight 1.0 + 4 T2 funds @ weight 0.4) is null at every horizon (best raw t=+0.94 at 63d on N=54; HLZ M=400 threshold |t|≈3.78). Registered status='rejected' in signal_registry. Restricting to the 5 ultra-concentrated T1 funds only (Lone Pine, Viking, Tiger, Coatue, Point72 — all avg holdings ≤ 62 of a 140-ticker universe) roughly doubles the full-window 21d t-stat to +1.74 and produces 21d/63d late-third t-stats of +3.02 / +3.33 on n=18-20. Still fails HLZ; late-third is in-sample by construction. Registered as a named variant 'institutional_conviction_flow_ultra_t1' with status='research' and an explicit dated review gate (2026-08-15, promotion rule: full-window 21d t > 2.0 on the Q2-2026-extended sample). NOT wired into aggregator; paper trader unchanged from Phase 10 Session 1. Migration 0012 adds fund_strategy(fund_id, conviction_tier, exclude_from_flow, strategy_note) with a 22-row seed: 9 T1 + 4 T2 + 6 T3 passive + 3 T3 bank 13Fs flagged exclude_from_flow (Goldman/MS/JPM — custody and facilitation flows are not a conviction signal). Factor is point-in-time gated on ownership_edges.available_as_of (the 13F filing date, median +44d after quarter_end). 9 TDD tests cover tier-3 exclusion, bank-exclusion, point-in-time integrity, new-position and liquidation deltas, and size-invariance of the Δpct normalization.
# Conflicts: # PROGRESS.md
The 22 fund rows in companies(node_type='fund') are inserted as a side effect of scripts/run_ownership_extraction.py (EDGAR 13F ingestion), not by any migration. CI runs alembic upgrade head on a fresh database with no ingested data, so the seed found 0 funds to resolve and the integrity check raised. Differentiate two states in upgrade(): - seeded == 0 -> warn and continue (fresh DB / pre-bootstrap) - 0 < seeded < 22 -> still raise (partial state is a real data bug) Add scripts/bootstrap_fund_strategy.py as the explicit post-ingestion recovery path. It imports _SEED from the migration module (single source of truth) and runs the same INSERT ... ON CONFLICT logic, raising if any fund CIK is still missing from companies. Idempotent.
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.
Summary