The Learning Book
Test whether a language model that can see this platform's own realised trading record — every closed trade, its cost, its holding period, its exit reason and its outcome — selects better than the same model without that record. Success is measured against the other AI portfolios, not only against an index.
Track record
Fewer than two NAV observations. No statistics are meaningful yet.
Recent decisions
Every run, including the ones that traded nothing: the committed fact-pack hash (written to the audit chain before the model was called), the model's published view, each proposal with the rule engine's verdict, and the fills that resulted. Rejected proposals stay up with their reason codes — a reader who can only see the trades that happened cannot judge the discipline that refused the ones that didn't.
As of 2026-08-06, The Learning Book (P08) portfolio is in its initial state with 100% cash (pf.cash_pct) and no positions (pf.position_count). The portfolio has 0 closed trades platform-wide (xp.platform.count), 0 open positions (xp.platform.open_positions), and 0 portfolios with closed trades (xp.platform.portfolios). There are 0 eligible symbols available for trading and no currently held positions. The experience base is explicitly flagged as low confidence (xp.platform.low_confidence) with a minimum threshold of 30 closed trades required for statistical confidence (xp.platform.min_trades). All experience metrics across holding periods (0-5d, 6-20d, 21-60d, over 60d) and exit reasons (stop, target, mandate forced, scheduled, discretionary, other) show zero trades and low confidence flags. No repeated symbols have been emitted or suppressed (xp.sym.emitted, xp.sym.suppressed). The plat…
What the AI is allowed to do
This portfolio's AI ranks candidates and explains its reasoning. It proposes direction and conviction only. Every price, quantity, weight and risk limit is computed by deterministic code the model cannot see or influence.
BUY · ADD · TRIM · SELL · HOLD · TIGHTEN_STOP · FLAG_THESIS_BREAK
At most 6 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 deep · prompt version P08-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 | 35.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 |
| Leverage | prohibited | gate 1 — proposal validation |
| Limit | Value | Enforced by |
|---|---|---|
| Minimum new position | 2.0% | gate 2 — size_order |
| Maximum order as % of ADV | 0.5% | gate 2 — size_order |
| Limit | Value | Enforced by |
|---|---|---|
| Monthly loss limit | 15.0% | gate 3 — HALT_MONTHLY_LOSS_LIMIT |
| Single-day loss alert | 6.0% | gate 3 — alert |
| Limit | Value | Enforced by |
|---|---|---|
| Stale-data halt | 36 hours | gate 3 — HALT_STALE_DATA |
| Limit | Value | Enforced by |
|---|---|---|
| At −12.0% drawdown | alert, publish_commentary | gate 3 — drawdown ladder |
| At −20.0% drawdown | alert, pause_new_positions_days:10, mandatory_deep_review | gate 3 — drawdown ladder |
| At −30.0% drawdown | alert, pause_new_positions_days:30, publish_commentary | gate 3 — drawdown ladder |
| At −45.0% drawdown | suspend_portfolio, graveyard_review | gate 3 — drawdown ladder |
| Limit | Value | Enforced by |
|---|---|---|
| Max trades per month | 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 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.
- This portfolio reads the platform's own realised trading record as an input. Nothing about the model is trained, fine-tuned or updated — "learning" here means the model is shown a point-in-time scoreboard and reasons about it in the same pass that produces its proposals.
- The record it reads contains only outcomes that had already occurred at the decision timestamp. A trade whose exit came later does not exist to it. This is enforced at the data boundary and asserted by a test, because a portfolio that learns from the future would look like skill and be nothing of the kind.
- Retired portfolios are included in what it learns from. Learning only from the portfolios still running would be survivorship bias one level down, where it is much harder for a reader to see.
- Overlap with every other portfolio is published on every run, breach or not. A portfolio that learns what worked elsewhere is structurally prone to converging on it, and a leaderboard row that is really a re-weighting of the other rows would not be an independent result.
- P07 runs the same model over the same universe with the same rails and WITHOUT this record. It is the control. If P08 does not beat P07, the Experience Pack is not adding value, and that comparison is published on this page whichever way it goes.
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
Most published trading systems never look at their own history in a form that could embarrass them. This one is handed exactly that: a point-in-time scoreboard including the losses, the cost drag, the trades the risk engine refused, and the deterministic baseline's record next to the AI's. The wager is not that a language model is a good stock picker. It is that a language model given an honest account of what has already failed will make fewer of the same mistakes — and if it does not, the record will show that too, on the same page, in the same detail.
Review schedule
| Job | Cron | Timezone | Makes a decision |
|---|---|---|---|
| weekly selection | 0 12 * * SUN | America/New_York | yes |
| monthly review | 0 12 1 * * | 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/P08_learning_book.yaml · human rulebook: docs/portfolios/P08_learning_book.md · effective from 2026-08-06 · payload a678cf70a8b7…