Paper trading. No real money is invested and nobody earned these results. Every figure here is hypothetical. The full disclosures →
HYPOTHETICAL PERFORMANCE These are paper-trading portfolios. No client money is invested, no orders are routed to any venue, and no result shown here was achieved with real capital. Hypothetical results have inherent limitations and do not reflect the effect of real order flow on price.
AI Portfolios
The public record of AI-managed portfolios.

P08 · Paper portfolio

The Learning Book

by AI Portfolios

$98,004
−$1,996 (-2.00%)
Since 2026-08-13 · started at $100,000
All time
-2.00%
Holdings
1
Risk level
high
Against SPY
$97,230$98,264$99,298$100,3322026-08-132026-09-14
2026-08-132026-09-14

This portfolio lost 2.00% since it started; SPY lost 2.20%. The dots are its 8 trades.

100 is the $100,000 this book started with, so where its line ends is its total return — the same figure as the one at the top of this page. The dashed line is that same money in SPY, bought at its first closing price shown here. Percentages, never share prices.

Index values are derived percentage returns over IEX last-trade closes, which are licensed for publication; no raw vendor price is rendered.

LATEST TRADE
SELL AMGN
14.36 @ $382.77
$5,496
priced 2026-09-11 20:06 UTC
(the reasoning, the facts it saw and the gates it passed are in Advanced)
Current holdings
ETN · 14.36
$5,648
-10.83% −$686
Cash
$92,359
Closed trades
Realised −$1,310 · 3 round trips closed · 0 up, 3 down
FDX · 20d
−$373
-6.21%
AMGN · 29d
−$448
-7.53%
GE · 19d
−$490
-8.12%
Recent activity
2026-09-11 — SELL AMGN @ $382.77
2026-09-02 — SELL FDX @ $318.34
2026-09-01 — SELL GE @ $333.21
2026-08-20 — BUY ETN @ $419.96
2026-08-13 — BUY AMGN @ $413.94
2026-08-13 — BUY GE @ $362.66
2026-08-13 — BUY FDX @ $339.40
2026-08-13 — BUY ETN @ $454.27
Read this with the numbers

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.

About

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.

Follow The Learning Book

This is the simple view. Nothing has been removed — the decision records, the refused proposals, the AI's own words, the cost model, the published limits and the hash chain are all in Advanced, which is the switch in the header. How to verify any of it →

Showing every layer. Pick Simple or Advanced in the header to choose one — nothing is removed either way, and the full record is always in this page.

Home / portfolios / P08

The Learning Book

P08experimentalhigh riskrulebook v1.5.0rank and explain
Catching upCATCHING_UP

A published decision instant passed unanswered and the next run will answer it, stamped with both instants so the lateness is visible: due 2026-09-20T16:00:00+00:00 (5.9d ago) and newest decision run of any kind is 2026-09-13T22:48:50.336468+00:00. QUEUED FOR CATCH-UP — the next run picks it up; it expires 2026-09-27T16:00:00+00:00.

since 2026-09-20 16:00Znext instant 2026-09-27 16:00Zevidence weekly_selection
EXPERIMENTAL. This portfolio learns from the realised outcomes of the other portfolios on this platform. That is a genuinely interesting idea and also the easiest one here to do dishonestly, so it ships labelled experimental with its failure modes written down in advance rather than discovered later. It has no track record, no evidence of skill, and nothing to learn from yet.

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.

The Learning Book's decisions, live →The public decision feed posts every decision when it's made — before settlement, refusals included. On Telegram, free.
Cadence — when it last decided, and when it next will
Next decision due
2026-09-27 16:00Z
Decision slots
2
SlotLast dueAnsweredStatus
weekly selection
0 12 * * SUN · America/New_York
2026-09-20 16:00neverCATCH_UP_DUE
due 2026-09-20T16:00:00+00:00 (5.9d ago) and newest decision run of any kind is 2026-09-13T22:48:50.336468+00:00. QUEUED FOR CATCH-UP — the next run picks it up; it expires 2026-09-27T16:00:00+00:00.
monthly review
0 12 1 * * · America/New_York
2026-09-01 16:002026-09-01 22:51ok
due 2026-09-01T16:00:00+00:00, ran 2026-09-01T22:51:48.277976+00:00 (LATE by 7h — a catch-up, recorded as one)

Catch-up policy. A decision instant that passes unanswered is run on the next pass, once, and the record stamps both instants — when it was due and when it actually ran. Past the catch-up window the gap stays open and is published as missed rather than backfilled.

Track record

Total return
-2.00%
net of modelled costs
Max drawdown
-2.06%
2026-08-17 → 2026-09-14
Live since
2026-08-13
21 daily observations completed · 96 NAV marks
Cost drag
0.03%
$0 in explicit fees
Sharpe
withheld
sample too short to annualise — see the display rules on the leaderboard
Gross return
-1.97%
before costs

Fewer than 60 daily observations. Annualised return, volatility, Sharpe, Sortino and Calmar are withheld: annualising a short sample produces numbers that look precise and are not.

NAV — every point is a recorded close, none can be edited
2026-08-13dashed line = starting capital2026-09-14

Our own marks from our own fills (nothing here is vendor price data). Deliberately monochrome: colour that codes "good" and "bad" is an editorial thumb on the scale.

Against SPY — both indexed to 100 at the starting capital
$97,230$98,264$99,298$100,3322026-08-132026-09-14
2026-08-132026-09-14
Portfolio -2.00%SPY -2.20%● buy ○ sell — 8 in view

Index 100 is the starting capital ($100,000), so this line ends at the total return published above it. The comparison line is indexed to the same capital and starts at 100 at its own first close here: the record carries no priced instant at which capital was granted, so the comparison capital is uninvested until then rather than given a price nothing printed. Both cover the identical window.

Index values are derived percentage returns over IEX last-trade closes, which are licensed for publication; no raw vendor price is rendered.

Open positions — since the AI entered
symbolsince entryweightopened
ETN-10.8%+5.8%2026-08-13

Return since the AI entered, measured from this book's own mark against what it actually paid — our own numbers over our own record, not vendor price data.

What's in it — weights from the last recorded NAV mark
ETN 5.8%CASH 94.2%holdingsby last mark
ETN5.8%Industrials
CASH94.2%cash

Weights are our own work product, computed at the newest audit-chain NAV mark — never re-derived later, never estimated from cost basis. Logos identify the holdings and imply no endorsement (operator decision, session 11); sector tints are structure, not judgement.

Current holdings
SymbolQuantityAvg costStopOpened
ETN5.8%14.3616441.04381.162026-08-13
committed 2026-08-15

Why two dates? "Opened" is the market session the opening fill was priced on. The licensed data feed's T+1 rule means a cycle prices on the newest session already licensed for use, so the run that produced the fill can be committed to the audit chain on a later date — that commitment date is shown beneath. The commitment time is what makes history tamper-evident; the pricing session is what returns are computed from. Both are published on every fill.

Starting capital
$100,000own work — never restated
Benchmarks
SPY · RSP, P07_CLAUDE_DISCRETIONARY, P02_AI_SWING_TRADER, PLATFORM_EQUAL_WEIGHT
Mandate hash
e7eb29a58e7dd85e9ada865f9b4aff42721079ceed7944ce2e74afb69fb9e4e1

Recent decisions

Every run, including the ones that traded nothing: the committed fact-pack hash (written to the audit chain before anything was proposed), the AI'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.

Every card carries the instant it was decided at, because every card is a photograph. The facts in it were frozen when the run was committed and are never revised — a view that said "the platform has closed zero trades" was true at its timestamp and reads as a claim about today unless the card says otherwise. Consecutive runs that halted on identical codes are compressed into one card with a visible count and every run id listed; nothing is dropped.

Model view at 2026-09-14 22:55Zfacts frozen when the run was committed, not updated — every figure the AI cites was true then and is never revised here

fills: SELL 14.3596 AMGN @ 382.77

fact pack —… · run run_98de6a1bd68c41c0
Model view at 2026-09-10 20:05Zfacts frozen when the run was committed, not updated — every figure the AI cites was true then and is never revised herefact pack f4c0354f814b…
post closeclaude-opus-4-8
fact pack f4c0354f814b5395… · run run_318fd74ad5d249d5
Model view at 2026-09-03 20:05Zfacts frozen when the run was committed, not updated — every figure the AI cites was true then and is never revised herefact pack 22aaf46bf0b2…
post closeclaude-opus-4-8
fact pack 22aaf46bf0b2c4af… · run run_f16af64aa5804bbb
Model view at 2026-09-03 23:50Zfacts frozen when the run was committed, not updated — every figure the AI cites was true then and is never revised here

fills: SELL 17.6809 FDX @ 318.34

fact pack —… · run run_575ad79c1475471d
Model view at 2026-09-02 23:52Zfacts frozen when the run was committed, not updated — every figure the AI cites was true then and is never revised here

fills: SELL 16.6371 GE @ 333.21

fact pack —… · run run_693b597c377f4ab1
Model view at 2026-08-31 20:05Zfacts frozen when the run was committed, not updated — every figure the AI cites was true then and is never revised herefact pack 591c21a61ba9…
post closeclaude-opus-4-8
fact pack 591c21a61ba9c945… · run run_883b8c57b4794bbd
Model view at 2026-08-27 20:05Zfacts frozen when the run was committed, not updated — every figure the AI cites was true then and is never revised herefact pack c432cfc09278…
post closeclaude-opus-4-8
fact pack c432cfc09278fad5… · run run_576d4f1f646240b9
Model view at 2026-08-20 20:05Zfacts frozen when the run was committed, not updated — every figure the AI cites was true then and is never revised herefact pack 0fe72f3ba4ea…
post closeclaude-opus-4-8

AI-generated. All quantitative claims traced to the published fact pack. P08 holds 4 positions (pf.position_count) all opened 6 days ago (pos.AMGN.days_held, pos.ETN.days_held, pos.FDX.days_held, pos.GE.days_held), with 78.5% cash (pf.cash_pct) and total return -0.60% (pf.total_return_pct). The platform record is explicitly unusable: only 3 closed trades exist platform-wide (xp.platform.count), below the 30-trade confidence floor (xp.platform.min_trades), and every aggregate is flagged low_confidence — the notes forbid citing any of it as support. This book itself has zero closed round trips. So the "learning" edge the mandate is built on has no data yet; there is nothing to learn from except cost drag, and even that (xp.costs.pct_of_gross_pnl = 65.7% of gross P&L eaten by costs) is a low-confidence three-trade artifact. Given that, the sensible action is on existing positions, not new…

ProposalConvictionLifecycleCodes
TIGHTEN_STOP ETN3PROPOSED→GATES PASSED→NO ORDER
TIGHTEN_STOP is a decision not to trade — no order is created
—

Reading the lifecycle. PROPOSED and GATES PASSED are published facts. QUEUED is shown as reached only where a fill proves it — the payload publishes no order record. FILLED / EXPIRED stays undecided without a matching fill, because an accepted order can price on a later session under the T+1 rule, and calling that "expired" would be inventing the outcome. "Accepted" alone used to sit in this column and read as though the trade had happened.

fills: BUY 5.5381 ETN @ 419.96

fact pack 0fe72f3ba4ea7759… · run run_4fa73287ed4f45ff
Model view at 2026-08-19 00:04Zfacts frozen when the run was committed, not updated — every figure the AI cites was true then and is never revised here
halted
Why it halted
Halt codeThe rule it firedThresholdEnforced at
HALT_PEER_STATE_UNAVAILABLEno published limit in this mandate names this code——

A halt stops NEW decisions. Stops, forced exits and the NAV mark still run — they are never gated by a halt — so a halted run is a run that decided nothing, not a run that did nothing.

What is missing from this diagnosis. The published record carries the halt CODE and the rule it fired. It does not carry the data provider that triggered it, the observed data age at halt time, or the affected symbols — those live in the underlying audit record's issue list and are not projected into the published payload.

fact pack —… · run run_be4bdcba67044462
Model view at 2026-08-14 20:05Zfacts frozen when the run was committed, not updated — every figure the AI cites was true then and is never revised herefact pack 8d73248a4eb8…
post closeclaude-opus-4-8

AI-generated. All quantitative claims traced to the published fact pack. P08 is a high-risk experimental "learning book" whose distinguishing input is its own realised record. That record is explicitly unusable: only 2 closed trades exist platform-wide (xp.platform.count), below the 30-trade confidence floor (xp.platform.min_trades), and every aggregate is flagged low_confidence and marked as non-citable support (xp.platform.low_confidence). What the record does show, and what IS a durable structural fact rather than noise, is cost drag: those 2 trades produced 189.74 USD gross but only 23.73 USD net, with costs eating 87.49% of gross P&L (xp.costs.gross_pnl_usd, xp.costs.net_pnl_usd, xp.costs.pct_of_gross_pnl) on a mean holding period of just 3 days (xp.platform.mean_holding_days), both exits scheduled (xp.exit.scheduled.count). The lesson available is: short-horizon churning is destro…

ProposalConvictionLifecycleCodes
HOLD GE3PROPOSED→GATES PASSED→NO ORDER
HOLD is a decision not to trade — no order is created
—
HOLD FDX3PROPOSED→GATES PASSED→NO ORDER
HOLD is a decision not to trade — no order is created
—
HOLD AMGN3PROPOSED→GATES PASSED→NO ORDER
HOLD is a decision not to trade — no order is created
—
HOLD ETN2PROPOSED→GATES PASSED→NO ORDER
HOLD is a decision not to trade — no order is created
—

Reading the lifecycle. PROPOSED and GATES PASSED are published facts. QUEUED is shown as reached only where a fill proves it — the payload publishes no order record. FILLED / EXPIRED stays undecided without a matching fill, because an accepted order can price on a later session under the T+1 rule, and calling that "expired" would be inventing the outcome. "Accepted" alone used to sit in this column and read as though the trade had happened.

fact pack 8d73248a4eb88ad8… · run run_f671099d24994058
Model view at 2026-08-13 20:05Zfacts frozen when the run was committed, not updated — every figure the AI cites was true then and is never revised herefact pack 9e9bd0cd19f8…
post closeclaude-opus-4-8

AI-generated. All quantitative claims traced to the published fact pack. Portfolio is 100% cash, NAV 100,000 USD, zero positions, 15 slots free (pf.nav, pf.cash_pct, pf.position_count, pf.position_slots_free). The mandate is a high-risk experimental "Learning Book" whose stated purpose is to use the platform's own realised record to select better. That record, however, contains only 2 closed trades (below the 30 minimum) and is explicitly marked low_confidence, so nothing in it may be cited as support — the learning signal this mandate depends on does not yet exist. That removes the mandate's distinctive edge and reduces the decision to ordinary trend/quality selection on a fresh book. With a blank book I look for durable uptrends backed by consistent free cash flow and adequate liquidity, avoiding parabolic/blow-off names. Broad tape is constructive: SPY +3.62% 20d / +21.04% 252d (px.…

ProposalConvictionLifecycleCodes
BUY AMGN3PROPOSED→GATES PASSED→QUEUED→FILLED—
BUY GE3PROPOSED→GATES PASSED→QUEUED→FILLED—
BUY FDX3PROPOSED→GATES PASSED→QUEUED→FILLED—
BUY ETN2PROPOSED→GATES PASSED→QUEUED→FILLED—

Reading the lifecycle. PROPOSED and GATES PASSED are published facts. QUEUED is shown as reached only where a fill proves it — the payload publishes no order record. FILLED / EXPIRED stays undecided without a matching fill, because an accepted order can price on a later session under the T+1 rule, and calling that "expired" would be inventing the outcome. "Accepted" alone used to sit in this column and read as though the trade had happened.

fills: BUY 14.3596 AMGN @ 413.94 · BUY 16.6371 GE @ 362.66 · BUY 17.6809 FDX @ 339.40 · BUY 8.8236 ETN @ 454.27

fact pack 9e9bd0cd19f8762b… · run run_b1e762191b194b06

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.

It may propose

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.

It cannot
  • 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 the decider or the prompt 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.

exposure
LimitValueEnforced by
Maximum gross exposure100.0%gate 2 — size_order
Maximum single sector35.0%gate 2 — size_order
permissions
LimitValueEnforced by
Shortingprohibitedgate 1 — proposal validation
Derivativesprohibitedgate 1 — proposal validation
Marginprohibitedgate 1 — proposal validation
Leverageprohibitedgate 1 — proposal validation
sizing
LimitValueEnforced by
Maximum positions15gate 3 — BREACH_MAX_POSITIONS (portfolio limit check)
Minimum new position2.0%gate 2 — size_order
Maximum order as % of ADV0.5%gate 2 — size_order
loss limits
LimitValueEnforced by
Monthly loss limit15.0%gate 3 — HALT_MONTHLY_LOSS_LIMIT
Single-day loss alert6.0%gate 3 — alert
data integrity
LimitValueEnforced by
Stale-data halt36 hoursgate 3 — HALT_STALE_DATA
drawdown ladder
LimitValueEnforced by
At −12.0% drawdownalert, publish_commentarygate 3 — drawdown ladder
At −20.0% drawdownalert, pause_new_positions_days:10, mandatory_deep_reviewgate 3 — drawdown ladder
At −30.0% drawdownalert, pause_new_positions_days:30, publish_commentarygate 3 — drawdown ladder
At −45.0% drawdownsuspend_portfolio, graveyard_reviewgate 3 — drawdown ladder
turnover
LimitValueEnforced by
Max trades per month20entry block — PAUSE_TURNOVER_CAP_REACHED (never blocks an exit)
Min holding period days5entry block — PAUSE_TURNOVER_CAP_REACHED (never blocks an exit)
circuit breakers
LimitValueEnforced by
Halt trading if price gap unexplained pct25gate 3 — circuit breaker
Halt trading if factpack hash mismatchtruegate 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

Cost profile
zero_commission_us
Fill convention
vwap_window
Decision → order latency
60s
VWAP window
15 minutes

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

JobCronTimezoneMakes a decision
weekly selection0 12 * * SUNAmerica/New_Yorkyes
monthly review0 12 1 * *America/New_Yorkyes

Published on a fixed, regular schedule. Never event-triggered — no "market is crashing, sell now" alerts, deliberately. This table is the promise; the cadence panel at the top of the page is whether it was kept, instant by instant.

Machine-readable mandate: config/portfolios/P08_learning_book.yaml · human rulebook: docs/portfolios/P08_learning_book.md · effective from 2026-08-06 (wall clock) · record starts 2026-08-13 (pricing session) · payload 06ec491b8950…

Every trade, as it happens
What each portfolio bought, what it sold and what it lost. Free, on Telegram.
Join →
Or follow @AIPortfolios186 on X, where the same trades are posted.
Live public decision feed.Every decision, fill and refusal, as it is published — including the ones that lose money. Delivered on Telegram, free.Get the feed →or subscribe by RSS/Atom

The same decisions are posted on X as @AIPortfolios186.

Data provided for free by IEX. By accessing or using IEX Historical Data, you agree to the IEX Historical Data Terms of Use. · Powered by CoinGecko · Logos provided by Logo.dev · Company logos identify holdings only and imply no endorsement.