P04 · Paper portfolio
Digital Assets & Equities
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.
Digital Assets & Equities
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:33.013071+00:00. QUEUED FOR CATCH-UP — the next run picks it up; it expires 2026-09-27T16:00:00+00:00.
Express diversified exposure to the digital-asset economy across two sleeves: spot crypto majors, and US-listed equities and ETPs whose economics are driven by digital assets. Survive a full crypto drawdown cycle without being forced to zero.
| Slot | Last due | Answered | Status |
|---|---|---|---|
weekly review 0 12 * * SUN · America/New_York | 2026-09-20 16:00 | never | CATCH_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:33.013071+00:00. QUEUED FOR CATCH-UP — the next run picks it up; it expires 2026-09-27T16:00:00+00:00. |
monthly rebal 0 12 1 * * · America/New_York | 2026-09-01 16:00 | 2026-09-01 22:51 | ok 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) |
daily vol check 0 17 * * * · 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.
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.
no benchmark series for 50_50_BTC_SPY over this window; the portfolio line is shown alone rather than against a different period
The line is rebased to 100 at the first mark in the record. No benchmark is drawn, so nothing here is a comparison.
Index values are derived percentage returns between our own recorded observations; no raw vendor price is rendered.
| symbol | since entry | weight | opened |
|---|---|---|---|
| LINK | +31.4% | +6.2% | 2026-08-13 |
| IBIT | +26.0% | +5.9% | 2026-08-13 |
| ETH | +33.0% | +5.3% | 2026-08-14 |
| BTC | +8.0% | +5.3% | 2026-08-20 |
| SOL | +34.6% | +5.1% | 2026-08-13 |
| NVDA | -7.0% | +2.6% | 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.
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.
| Symbol | Quantity | Avg cost | Stop | Opened |
|---|---|---|---|---|
BTC5.3% | 0.0709 | 73163.92 | — | 2026-08-20 committed 2026-08-23 |
ETH5.3% | 2.2185 | 1908.76 | — | 2026-08-14 committed 2026-08-17 |
| IBIT5.9% | 139.3534 | 35.51 | — | 2026-08-13 committed 2026-08-14 |
LINK6.2% | 556.4504 | 8.94 | — | 2026-08-13 committed 2026-08-14 |
| 13.3156 | 226.89 | — | 2026-08-13 committed 2026-08-14 | |
SOL5.1% | 52.5348 | 76.73 | — | 2026-08-13 committed 2026-08-14 |
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.
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. Mandate P04 is a very-high-risk digital-asset book with a volatility-targeting sizing rule; the AI only selects within the eligible set. The book is heavily under-invested: cash is 76.63% of NAV (pf.cash_pct) with only 5 positions (pf.position_count) and zero drawdown from peak (pf.drawdown_pct). Total return is +3.09% (pf.total_return_pct). This is a young book — every held position was opened 5-6 days ago (pos.*.days_held). The tape is broadly risk-on across crypto majors. BTC +10.04% 5d / +7.07% 20d (px.BTC.ret_5d, px.BTC.ret_20d) with the lowest realised daily vol in the crypto set at 1.75% (px.BTC.vol_daily_pct). ETH is strongest: +19.74% 5d, +17.47% 20d, +29.52% 60d (px.ETH.ret_5d, px.ETH.ret_20d, px.ETH.ret_60d), and the held ETH position is +22.90% unrealised (pos.ETH.unrealised_pct). LINK +17.71% 5d / +24…
| Proposal | Conviction | Lifecycle | Codes |
|---|---|---|---|
| BUY BTC | 4 | PROPOSED→GATES PASSED→QUEUED→FILLED | — |
| ADD ETH | 4 | PROPOSED→GATES PASSED→QUEUED→FILLED | — |
| ADD LINK | 3 | PROPOSED→REFUSED AT GATES no order was created | REJECT_ALREADY_AT_TARGET |
| HOLD NVDA | 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.
fills: BUY 0.0709 BTC @ 72727.87 · BUY 0.0911 ETH @ 2321.24
AI-generated. All quantitative claims traced to the published fact pack. Portfolio is 84% cash (pf.cash_pct=84.0166) with only 4 small positions totalling ~16% (pos.IBIT.weight_pct=4.9688, pos.LINK.weight_pct=4.0755, pos.SOL.weight_pct=3.9388, pos.NVDA.weight_pct=3.0003), all held 0 days (days_held=0 across all four), so this is effectively a fresh book. Total return is roughly flat (pf.total_return_pct=-0.0726). The mandate is very_high risk, spot-only, volatility-targeted, and I only rank within the eligible set; sizing is deterministic. The macro picture across crypto is weak on a 252d basis (BTC ret_252d=-31.13, ETH=-39.87, SOL=-45.20, XRP=-51.89, ADA=-58.51, BCH=-64.08, DOT=-66.04, LTC=-46.39, IBIT=-48.98) but medium-term momentum diverges. LINK is the clear relative-strength leader among held/eligible crypto: positive across 5d/20d/60d (px.LINK.ret_5d=6.95, ret_20d=6.54, ret_60d=…
| Proposal | Conviction | Lifecycle | Codes |
|---|---|---|---|
| ADD LINK | 4 | PROPOSED→GATES PASSED→QUEUED→FILLED | — |
| BUY ETH | 3 | PROPOSED→GATES PASSED→QUEUED→FILLED | — |
| HOLD NVDA | 3 | PROPOSED→GATES PASSED→NO ORDER HOLD is a decision not to trade — no order is created | — |
| HOLD IBIT | 2 | PROPOSED→GATES PASSED→NO ORDER HOLD is a decision not to trade — no order is created | — |
| HOLD SOL | 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.
fills: BUY 102.8842 LINK @ 8.99 · BUY 2.1273 ETH @ 1879.22
AI-generated. All quantitative claims traced to the published fact pack. Portfolio is 100% cash (pf.cash_pct=100, pf.position_count=0) with NAV 100k (pf.nav). Mandate is very_high risk, diversified across a crypto sleeve and equities/ETPs driven by digital assets, with volatility-targeting sizing done by the engine. My job is to rank within the eligible set. The tape is broadly weak: nearly every crypto major is deeply negative on a 252d basis (BTC -32.1% px.BTC.ret_252d, ETH -41.1% px.ETH.ret_252d, XRP -54.3% px.XRP.ret_252d, ADA -59.5% px.ADA.ret_252d, DOT -67.3% px.DOT.ret_252d, BCH -64.0% px.BCH.ret_252d). Short-term (5d) most crypto is also soft (BTC -2.28% px.BTC.ret_5d, XRP -1.55% px.XRP.ret_5d). Against that backdrop I favour relative strength combined with liquidity and structural quality. Standouts on relative strength: LINK is positive across 5d/20d/60d (+5.93% px.LINK.ret_5…
| Proposal | Conviction | Lifecycle | Codes |
|---|---|---|---|
| BUY IBIT | 4 | PROPOSED→GATES PASSED→QUEUED→FILLED | — |
| BUY LINK | 3 | PROPOSED→GATES PASSED→QUEUED→FILLED | — |
| BUY SOL | 3 | PROPOSED→GATES PASSED→QUEUED→FILLED | — |
| BUY NVDA | 2 | PROPOSED→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 139.3534 IBIT @ 35.51 · BUY 453.5662 LINK @ 8.86 · BUY 52.5348 SOL @ 76.28 · BUY 13.3156 NVDA @ 226.89
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
At most 5 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 P04-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 | 100.0% | gate 2 — size_order |
| Maximum single issuer | 15.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 |
| Leverage | prohibited | gate 1 — proposal validation |
| Limit | Value | Enforced by |
|---|---|---|
| Maximum positions | crypto_spot: 6, equities: 12 | gate 3 — BREACH_MAX_POSITIONS (portfolio limit check) |
| Minimum new position | 1.5% | gate 2 — size_order |
| Maximum order as % of ADV | 0.5% | gate 2 — size_order |
| Limit | Value | Enforced by |
|---|---|---|
| Single-day loss alert | 8.0% | gate 3 — alert |
| Limit | Value | Enforced by |
|---|---|---|
| Stale-data halt | 12 hours | gate 3 — HALT_STALE_DATA |
| Limit | Value | Enforced by |
|---|---|---|
| At −20.0% drawdown | alert, publish_commentary | gate 3 — drawdown ladder |
| At −30.0% drawdown | alert, force_crypto_sleeve_to_max:25.0 | gate 3 — drawdown ladder |
| At −50.0% drawdown | alert, force_crypto_sleeve_to_min, mandatory_deep_review, pause_new_positions_days:20 | gate 3 — drawdown ladder |
| At −70.0% drawdown | graveyard_review | gate 3 — drawdown ladder |
| Limit | Value | Enforced by |
|---|---|---|
| Crypto sleeve when 30d annualised vol > 90.0% | 30.0% maximum | gate 2 + gate 3 — crypto_sleeve_cap, with pro-rata forced trims |
| Crypto sleeve when 30d annualised vol > 120.0% | 22.0% maximum | gate 2 + gate 3 — crypto_sleeve_cap, with pro-rata forced trims |
| Crypto sleeve when 30d annualised vol > 160.0% | 20.0% maximum | gate 2 + gate 3 — crypto_sleeve_cap, with pro-rata forced trims |
| Limit | Value | Enforced by |
|---|---|---|
| Max trades per month | 16 | entry block — PAUSE_TURNOVER_CAP_REACHED (never blocks an exit) |
| Min holding period days | 3 | entry block — PAUSE_TURNOVER_CAP_REACHED (never blocks an exit) |
| Limit | Value | Enforced by |
|---|---|---|
| Halt trading if price gap unexplained pct | 40 | gate 3 — circuit breaker |
| Halt trading if venue price divergence bps above | 300 | gate 3 — circuit breaker |
| Halt trading if factpack hash mismatch | true | 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
Crypto's problem is not direction, it is position sizing. This portfolio treats volatility as the binding constraint: sleeve weights are set by a deterministic volatility-targeting rule, and the AI selects only within the eligible set. No leverage, no yield products, no staking, no lending, spot only.
Review schedule
| Job | Cron | Timezone | Makes a decision |
|---|---|---|---|
| weekly review | 0 12 * * SUN | America/New_York | yes |
| monthly rebal | 0 12 1 * * | America/New_York | yes |
| daily vol check | 0 17 * * * | 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/P04_digital_assets_equities.yaml · human rulebook: docs/portfolios/P04_digital_assets_equities.md · effective from 2026-08-06 (wall clock) · record starts 2026-08-13 (pricing session) · payload 06ec491b8950…



