A system that ingests every Truth Social post by the U.S. president, has an LLM judge each one for market impact, and converts the judgment into sized, stop-protected paper trades. Built end-to-end solo — ingestion, two-stage classifier, backtest harness, live paper execution. The backtest's job was to find out if the edge is real before risking anything. It did its job.
Instead of keyword rules (if "tariff" in post: sell), a two-stage classifier produces one structured judgment per post. A cheap model kills ~83% of posts as irrelevant; a stronger judge scores the survivors. Conviction sets position size (convex — only rare, concrete posts get real money), durability sets the exit timer, and hard + trailing stops guard every position.
Every stage logs what it drops and why — no silent losses. The gap between "classified" and "posts in window" is an API credit outage the pipeline survived gracefully; between "candidates" and "trades" sit delisted tickers, FX pairs Alpaca can't price, and posts landing outside market hours.
Exactly as theory predicts for a crowded event trade: entering at the post timestamp captures +1.03%; waiting five minutes leaves +0.36%. A hobby stack lives in the 30–60s band. The equity curve tells the concentration story — two days carry nearly all of it.
% return on $100k notional · 519 trades each
total $ per bucket @ 30s · conviction 4 = threshold
$ on fixed $100k per-trade equity · hover for daily detail
An LLM judging 2025 posts may simply remember 2025. So the harness splits results at the judge's training cutoff (2025-08-01). Trades the model could have memorized look profitable. Trades it had genuinely never seen do not. This is the finding.
The model's training data likely covers these events. Any "prediction" here can't be distinguished from recall.
On events the model had never seen, the strategy loses money. The apparent edge is largely memory, not foresight.
One trade — going long Elon Musk's X on a concrete deal post — earned 90% of the year's P&L. Winners were trades the market let run (trailing-stop exits averaged +0.24%); the 476 timer exits netted out negative. Losses stayed small by design: the worst trade lost $77 against a best of $735.
| Instrument | Side | Date | Conv | Durability | Exit | Size | P&L | Return |
|---|
The edge is 2 trades a month, not 500 a year. Conviction 8–9 + concrete posts made +$966 across 23 trades; the 439 conviction 4–6 trades lost money net. The sizing function knew this — the entry threshold didn't.
Two-thirds of the edge dies in five minutes. The decay curve confirms this is a speed game owned by co-located players. A hobby stack can observe the move; it can't reliably capture it.
An LLM backtest over its own training window flatters itself. Splitting at the training cutoff turned +1.16% into −0.14%. Any LLM-driven strategy evaluated on pre-cutoff data needs this control.
The defensive layer worked. Stops capped every loss under $80 while letting the $735 winner run; malformed LLM responses, delisted tickers, unpriceable FX and a mid-run API credit outage were all absorbed and logged — the run completed anyway.
Not tradeable as-is — and the system proved it for the price of a few takeaways. The realistic product is the classifier as a real-time alert engine: conviction-9 concrete calls delivered to a human ~30s after the post. The next test is live: unattended forward paper trading, where nothing can be memorized.