Skip to content

Phase 10 Session 3A — Form 4 insider transaction signal (null result, systematic negative IC documented)#11

Merged
shiviancodes merged 1 commit into
mainfrom
feature/phase10-session3a
May 20, 2026
Merged

Phase 10 Session 3A — Form 4 insider transaction signal (null result, systematic negative IC documented)#11
shiviancodes merged 1 commit into
mainfrom
feature/phase10-session3a

Conversation

@shiviancodes

Copy link
Copy Markdown
Owner

Summary

  • Migration 0013: insider_transactions table — 190,020 rows, 1,577 open-market
    purchases, 140/140 tickers, 2018–2026, idempotent via ON CONFLICT uq_insider_tx DO NOTHING
  • EDGARClient.get_form4_xml + Form 4 XML parser (nexus/data/edgar/forms/form_4.py,
    non-derivative transactions only, point-in-time on filed_at)
  • Cohen-Malloy-Pomorski opportunistic classifier in nexus/signals/factors/insider.py:
    ROUTINE iff same calendar-month P in each of 3 prior years; OPPORTUNISTIC by default
  • _InsiderPanel wired opt-in into nexus/signals/backtest.py (3 lookback variants)
  • 9 TDD tests, all green (tests/test_insider_factors.py)

IC result

insider_opportunistic_63d ICs are uniformly negative across every diagnostic:

Diagnostic t-stat Verdict
Overall 21d fwd −1.983 FAIL
Overall 63d fwd −2.223 FAIL
Overall 126d fwd −2.658 FAIL
CALM regime 63d fwd (N=50) −2.773 FAIL
Late-third 21d fwd (N=20) −2.870 BORDERLINE (negative, worsening)

Signal direction is systematically inverted vs hypothesis. NON-CALM positive flip
(t≈+0.67, N=8) is statistically insufficient — same trap as Session 1 regime gate.

Registry

insider_opportunistic_63d written to signal_registry with status='rejected'
and full IC evidence in regime_profile. Not wired into aggregator.
Paper trader unchanged from Phase 9 Session 1.

…ve IC, rejected

Migration 0013: insider_transactions table (190,020 rows, 1,577 P txns, 140/140
tickers, 2018-01-02 to 2026-05-19, ON CONFLICT idempotent).

EDGARClient.get_form4_xml + Form 4 XML parser (non-derivative transactions only,
point-in-time on filed_at). Disk cache at data/cache/form4/ for idempotent re-runs.

Cohen-Malloy-Pomorski opportunistic classifier in nexus/signals/factors/insider.py:
ROUTINE iff same calendar-month P in each of 3 prior years; default OPPORTUNISTIC
when history < 3 years. Signal normalised by adj_close x float_shares_M.

IC results (primary insider_opportunistic_63d):
  21d t=-1.983 / 63d t=-2.223 / 126d t=-2.658 -- uniform negative, HLZ FAIL.
  CALM regime 63d t=-2.773; late-third 21d t=-2.870 (worsening, not decaying).
  NON-CALM positive flip t=+0.67 statistically insufficient (N=8).

Registered insider_opportunistic_63d as status='rejected' with full IC evidence
in regime_profile. Not wired into aggregator. Paper trader unchanged.

9 TDD tests green (tests/test_insider_factors.py).
@shiviancodes shiviancodes merged commit 33a4781 into main May 20, 2026
1 check passed
@shiviancodes shiviancodes deleted the feature/phase10-session3a branch May 20, 2026 07:41
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