Political Trades Tracker
Publish, and mechanically mirror, the stock purchases that US federal legislators disclose under the STOCK Act. The point is transparency: to show what a portfolio built only from public disclosure would actually have done, including the cost of the disclosure delay.
Track record
This portfolio has not traded. Figures will appear only once a licensed price feed is connected and the first real decision cycle has run — and from that point they are permanent and unedited.
What the AI is allowed to do
This portfolio's AI explains and flags. It makes no trade proposals at all — the maximum is zero, enforced by the mandate validator. Position selection is fully mechanical.
EXPLAIN · FLAG_DATA_ANOMALY
At most 0 proposals per run, each carrying a direction, a conviction from 1 to 5, a rationale, and references to the facts it used.
- set a price
- set a quantity or share count
- set a weight or position size
- set or move a risk limit
- execute anything
Model tier fast · prompt version P05-v1. Any change to either is recorded as a MODEL_CHANGE event in the audit chain — without it the record would be a chimera of two systems presented as one.
Enforced limits
Every limit below names the code path that enforces it. This is not decoration: a limit that is published but never fires is worse than no limit, because a reader has no way to tell the difference. A test walks every mandate, drives the engine into the state each declared control claims to protect against, and fails the build if nothing stops it.
| Limit | Value | Enforced by |
|---|---|---|
| Maximum gross exposure | 100.0% | gate 2 — size_order |
| Maximum single sector | 40.0% | gate 2 — size_order |
| Limit | Value | Enforced by |
|---|---|---|
| Shorting | prohibited | gate 1 — proposal validation |
| Derivatives | prohibited | gate 1 — proposal validation |
| Margin | prohibited | gate 1 — proposal validation |
| Limit | Value | Enforced by |
|---|---|---|
| Maximum positions | 40 | gate 2 — size_order |
| Minimum new position | 1.0% | gate 2 — size_order |
| Maximum order as % of ADV | 0.5% | gate 2 — size_order |
| Limit | Value | Enforced by |
|---|---|---|
| Single-day loss alert | 5.0% | gate 3 — alert |
| Limit | Value | Enforced by |
|---|---|---|
| Stale-data halt | 96 hours | gate 3 — HALT_STALE_DATA |
| Limit | Value | Enforced by |
|---|---|---|
| At −15.0% drawdown | alert, publish_commentary | gate 3 — drawdown ladder |
| At −25.0% drawdown | alert, scale_new_position_size:0.5 | gate 3 — drawdown ladder |
| At −35.0% drawdown | alert, mandatory_deep_review, pause_new_positions_days:15 | gate 3 — drawdown ladder |
| At −55.0% drawdown | graveyard_review | gate 3 — drawdown ladder |
| Limit | Value | Enforced by |
|---|---|---|
| Max trades per week | 20 | entry block — PAUSE_TURNOVER_CAP_REACHED (never blocks an exit) |
| Min holding period days | 5 | entry block — PAUSE_TURNOVER_CAP_REACHED (never blocks an exit) |
| Limit | Value | Enforced by |
|---|---|---|
| Halt trading if price gap unexplained pct | 25 | gate 3 — circuit breaker |
| Halt trading if parse error rate above pct | 20 | gate 3 — circuit breaker |
| Halt trading if ticker resolution rate below pct | 80 | gate 3 — circuit breaker |
| Halt trading if factpack hash mismatch | true | gate 3 — circuit breaker |
Disclosures specific to this portfolio
These render on the page itself rather than in a footer, because without them the numbers actively mislead.
- Disclosed transaction amounts are RANGES, not exact figures. 65% of all filings fall in the single bucket $1,001-$15,000. Position sizes here are equal-weighted and are NOT derived from disclosed amounts.
- Measured median disclosure lag: House 23.5 days, Senate 29.0 days. Statutory maximum 45 days. Worst observed 119 days.
- Approximately 10-13% of House filings and 14% of Senate filings are scanned images and are not machine-readable. They are excluded and the exclusion count is published daily.
- Mutual funds, ETFs in excepted investment funds, the Thrift Savings Plan, real property and inherited assets are exempt from disclosure and are therefore invisible here.
- Inclusion of a legislator is not a claim of wrongdoing. Data is reproduced from public filings for transparency purposes.
Execution
Fills are struck on a VWAP window that begins strictly after the decision timestamp plus a latency delay. No fill can use information from the bar in which the decision was made, so look-ahead is arithmetically impossible rather than merely avoided.
Philosophy
This is NOT copy trading. The measured median lag from trade to filing is 24-29 days (House 23.5 median, Senate 29.0 median, statutory max 45). By the time a filing is public, it is public to everyone simultaneously and the large trackers publish within hours. Any information advantage is gone. What remains is a slow thematic tilt toward what legislators were buying a month ago. The portfolio is honest about being that.
Review schedule
| Job | Cron | Timezone | Makes a decision |
|---|---|---|---|
| filing ingest | 30 9 * * MON-FRI | America/New_York | no |
| signal run | 0 17 * * MON-FRI | America/New_York | yes |
| weekly review | 0 12 * * SUN | America/New_York | yes |
Published on a fixed, regular schedule. Never event-triggered — no "market is crashing, sell now" alerts, deliberately.
Machine-readable mandate: config/portfolios/P05_political_trades_tracker.yaml · human rulebook: docs/portfolios/P05_political_trades_tracker.md · effective from 2026-09-01 · payload b618c290568f…