P06 · Retired
Intraday AI Lab (EXPERIMENTAL)
by AI Portfolios
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.
Intraday AI Lab (EXPERIMENTAL)
This book is closed. Its record stays published in full; retirement is a state transition recorded as an event, not a deletion.
Test, in public and with realistic costs, whether an LLM given only delayed intraday data can produce positive expectancy over a session horizon, flat by the close every single day.
| Slot | Last due | Answered | Status |
|---|---|---|---|
d0945 45 9 * * MON-FRI · America/New_York | — | never | unchecked This slot marks and reports; it never calls the model, so it leaves no decision record to check it against. |
d1100 0 11 * * MON-FRI · America/New_York | — | never | unchecked This slot marks and reports; it never calls the model, so it leaves no decision record to check it against. |
d1300 0 13 * * MON-FRI · America/New_York | — | never | unchecked This slot marks and reports; it never calls the model, so it leaves no decision record to check it against. |
d1430 30 14 * * MON-FRI · America/New_York | — | never | unchecked This slot marks and reports; it never calls the model, so it leaves no decision record to check it against. |
d1545 45 15 * * MON-FRI · America/New_York | — | never | unchecked This slot marks and reports; it never calls the model, so it leaves no decision record to check it against. |
eod reconcile 30 16 * * MON-FRI · America/New_York | — | n/a | does not decide This slot marks and reports; it never calls the model, so it leaves no decision record to check it against. |
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
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.
very short record — 7 observations The shape of a line this short is dominated by its first and last points. It is published because hiding it would be worse, and labelled because at this length it is not yet evidence of anything.
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.
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.
AI-generated. All quantitative claims traced to the published fact pack. The mandate restricts new entries after 14:30 ET, and the fact pack timestamp shows 19:45 UTC (approximately 15:45 ET), placing us firmly in the PAUSE_PAST_ENTRY_CUTOFF risk state. The portfolio currently holds zero positions (pf.position_count) and has 100% cash (pf.cash_pct), meaning we are completely flat. Given the intraday mandate's requirement to be "flat by the close every single day" and the entry cutoff having already passed, the appropriate action is to remain flat and not initiate any new positions. The mandate is operating as designed: we are past the entry window, hold no positions that require exit management, and will close the session flat as required. The market has shown mixed behavior across sectors. Technology shows strength over 20 days (px.MSFT.ret_20d = 25.7935%, px.NFLX.ret_20d = 13.3575%,…
| Proposal | Conviction | Lifecycle | Codes |
|---|---|---|---|
| HOLD SPY | 3 | PROPOSED→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.
AI-generated. All quantitative claims traced to the published fact pack. This is the first intraday decision with zero positions and a clean $100,000 NAV (pf.nav, pf.cash). The fact pack provides only end-of-day data through close 2026-08-17 (px.*.close) plus derived returns, ATR, and volatility, but no intraday price snapshots, current bid/ask, or real-time levels. For an intraday mandate requiring entry and mandatory flatten-by-close, I lack actionable timing signals. The data shows recent performance divergences: AMD has very strong momentum (+6.4% 5d, +24.2% 60d; px.AMD.ret_5d, px.AMD.ret_60d) with extreme volatility (5.39% daily; px.AMD.vol_daily_pct). MSFT posted the strongest 20d return (+25.8%; px.MSFT.ret_20d) but is down slightly over 5d (-0.9%; px.MSFT.ret_5d). XLE shows strong near-term momentum (+7.7% 5d, +7.3% 20d; px.XLE.ret_5d, px.XLE.ret_20d). GLD had strong 20d (+9.0%;…
2 consecutive runs halted on the same codes, from 2026-08-17 15:02Z to 2026-08-17 17:02Z. They are shown as one card because 2 identical cards would bury every run that is not identical. Nothing is dropped: the count is above, the codes are below, and every run id in the group is listed at the bottom of this card.
| Halt code | The rule it fired | Threshold | Enforced at |
|---|---|---|---|
| HALT_STALE_DATA | Stale-data halt data integrity | 180 minutes | gate 3 — HALT_STALE_DATA |
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.
AI-generated. All quantitative claims traced to the published fact pack. The fact pack shows a portfolio at breakeven (pf.total_return_pct = 0 pct, nav_usd = 100,000 USD) with 100% cash (pf.cash_pct = 100 pct) and zero current positions (pf.position_count = 0). This is an intraday mandate requiring flat positions by day's end, with data delayed by at least 15 minutes from the 13:45 timestamp. Looking at recent momentum across sectors: Energy (XLE) shows the strongest short-term performance with ret_5d = 7.6696 pct and ret_20d = 7.3336 pct. Semiconductors (AMD) show ret_5d = 6.4196 pct with exceptional 252-day performance (ret_252d = 178.9231 pct). Technology broadly (MSFT) shows strong 20-day momentum (ret_20d = 25.7935 pct) despite weak 5-day performance (ret_5d = -0.918 pct). Conversely, several names show recent weakness: AVGO ret_5d = -8.1284 pct, AMZN ret_5d = -4.31 pct, AAPL ret…
| Proposal | Conviction | Lifecycle | Codes |
|---|---|---|---|
| HOLD SPY | 2 | PROPOSED→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.
AI-generated. All quantitative claims traced to the published fact pack. The fact pack shows the portfolio is 100% cash (pf.cash_pct) with zero current positions (pf.position_count) and a NAV of $100,000 (pf.nav). The timestamp is 19:45:04 UTC on 2026-08-14, which corresponds to 15:45 ET. The mandate has a PAUSE_PAST_ENTRY_CUTOFF risk state indicating that new entries are blocked after 14:30 ET—we are over one hour past that threshold. Although we have 6 available position slots (pf.position_slots_free), the entry cutoff prevents any new BUY actions. Reviewing market conditions from the fact pack: broad indices show positive 5-day momentum (SPY +1.21% px.SPY.ret_5d, QQQ +2.44% px.QQQ.ret_5d, IWM +1.76% px.IWM.ret_5d). Within tech, semiconductors are particularly strong on a 5-day basis (SMH +3.09% px.SMH.ret_5d, NVDA +2.88% px.NVDA.ret_5d, AMD -1.28% px.AMD.ret_5d). Energy shows streng…
| Proposal | Conviction | Lifecycle | Codes |
|---|---|---|---|
| HOLD SPY | 3 | PROPOSED→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.
AI-generated. All quantitative claims traced to the published fact pack. The portfolio is at day one with zero positions and minimal historical fees (pf.fees_paid: 0.63 USD), effectively a fresh start with 100,000 USD in cash (pf.cash, pf.cash_pct). The mandate requires flat-by-close intraday trading with delayed (15+ minute) data and full transaction costs. Recent momentum diverges sharply across sectors: Energy (XLE) shows strong 5d (+4.99%, px.XLE.ret_5d) and 20d (+7.09%, px.XLE.ret_20d) gains. Technology shows mixed signals—semiconductors remain positive (SMH: +3.09% 5d, px.SMH.ret_5d; NVDA: +2.88% 5d, px.NVDA.ret_5d) while mega-cap tech is weaker (AAPL: -2.29% 5d, px.AAPL.ret_5d; GOOGL: -3.18% 5d, px.GOOGL.ret_5d). Gold (GLD) rallied +2.38% over 5d (px.GLD.ret_5d) and +9.32% over 20d (px.GLD.ret_20d), suggesting flight-to-safety or inflation hedging. Volatility metrics favor co…
| Proposal | Conviction | Lifecycle | Codes |
|---|---|---|---|
| EXPLAIN SPY | 3 | PROPOSED→REFUSED AT GATES no order was created | REJECT_ACTION_NOT_PERMITTED |
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.
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 · SELL · HOLD · TIGHTEN_STOP · FLATTEN
At most 2 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 P06-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.
| Limit | Value | Enforced by |
|---|---|---|
| Maximum gross exposure | 45.0% | gate 2 — size_order |
| Maximum single sector | 100.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 | 6 | gate 3 — BREACH_MAX_POSITIONS (portfolio limit check) |
| Minimum new position | 3.0% | gate 2 — size_order |
| Maximum order as % of ADV | 0.05% | gate 2 — size_order |
| Limit | Value | Enforced by |
|---|---|---|
| Daily loss limit | 1.5% | gate 3 — HALT_DAILY_LOSS_LIMIT (halts and flattens) |
| Weekly loss limit | 4.0% | gate 3 — HALT_WEEKLY_LOSS_LIMIT |
| Monthly loss limit | 8.0% | gate 3 — HALT_MONTHLY_LOSS_LIMIT |
| Limit | Value | Enforced by |
|---|---|---|
| Stale-data halt | 180 minutes | gate 3 — HALT_STALE_DATA |
| Limit | Value | Enforced by |
|---|---|---|
| At −5.0% drawdown | alert, scale_risk_budget:0.6 | gate 3 — drawdown ladder |
| At −10.0% drawdown | alert, scale_risk_budget:0.35, publish_commentary | gate 3 — drawdown ladder |
| At −20.0% drawdown | suspend_portfolio, publish_post_mortem | gate 3 — drawdown ladder |
| At −30.0% drawdown | graveyard | gate 3 — drawdown ladder |
| Limit | Value | Enforced by |
|---|---|---|
| Max round trips per day | 6 | entry block — PAUSE_TURNOVER_CAP_REACHED (never blocks an exit) |
| Max round trips per week | 20 | entry block — PAUSE_TURNOVER_CAP_REACHED (never blocks an exit) |
| Limit | Value | Enforced by |
|---|---|---|
| Halt trading if price gap unexplained pct | 10 | gate 3 — circuit breaker |
| Halt trading if vix above | 40 | gate 3 — circuit breaker |
| Halt trading if market wide circuit breaker | true | gate 3 — circuit breaker |
| Halt trading if factpack hash mismatch | true | gate 3 — circuit breaker |
| Halt trading first n minutes of session | 15 | gate 3 — circuit breaker |
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
Intraday trading is where costs dominate and where an information disadvantage is largest. The model here sees data that is at minimum 15 minutes stale, pays the full spread on both sides, and pays every regulatory fee. If it still makes money, that is interesting. If it does not, that is a useful public result and the portfolio stays visible forever.
Review schedule
| Job | Cron | Timezone | Makes a decision |
|---|---|---|---|
| d0945 | 45 9 * * MON-FRI | America/New_York | yes |
| d1100 | 0 11 * * MON-FRI | America/New_York | yes |
| d1300 | 0 13 * * MON-FRI | America/New_York | yes |
| d1430 | 30 14 * * MON-FRI | America/New_York | yes |
| d1545 | 45 15 * * MON-FRI | America/New_York | yes |
| eod reconcile | 30 16 * * MON-FRI | America/New_York | no |
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/P06_intraday_ai_lab.yaml · human rulebook: docs/portfolios/P06_intraday_ai_lab.md · effective from 2026-08-06 (wall clock) · record starts 2026-08-14 (pricing session) · payload 540d30e63326…