What pit-boss is, from the ground up
This page explains the whole thing as if you had never seen it before: what it does, why it does it that way, and what it will never do. Nothing here is a summary of something else — if you read this, you understand the machine.
paper only · no real moneyThe short version
one paragraphpit-boss is a small, careful robot that copies the stock picks of one professional investor, four times a year, using the investor's own public paperwork. Before it is allowed to buy or sell anything, a strict set of written rules — the house rules — checks every order and shrinks or refuses anything too big, too concentrated, or too risky. Then a locked gate asks for proof that a human read the exact list of orders (or that the exact list has already been rehearsed successfully). Only then does anything reach a broker. Everything it does is written down permanently, so that any decision can be reconstructed later from the written record alone.
Today it trades a paper account — pretend money at a real broker (Alpaca), with real prices and real order handling but no dollars at risk. It has never traded real money and it is not yet allowed to.
Why "pit boss"
In a casino, the pit boss is the person who does not gamble. They stand at the edge of the floor, watch every table, know the house rules by heart, and say "no" when something is out of bounds. They are not there to make the game exciting; they are there to make sure the game is played correctly.
That is this system's job. The exciting part — picking stocks — is outsourced to someone else entirely (the investor whose filings we copy). What pit-boss adds is supervision: the limits, the gate, the ledger, the alarms. That is why the dashboard looks like a ruled ledger rather than a trading screen, and why an approved order is drawn as almost nothing (a small dot) while a refusal is drawn as an inked stamp. On a healthy day the page is nearly blank. Ink is spent only where the house pushed back.
The Python package underneath is called house_rules, for the same
reason. The rules are the product; the strategy is a plug-in.
What a 13F is
the raw materialIn the United States, any investment manager who controls more than $100 million of stock has to tell the government what they own. They do this by filing a form called a 13F with the SEC (the Securities and Exchange Commission), once every three months. The form lists every stock position they held on the last day of the quarter: the company, how many shares, and what it was worth.
Three details matter enormously for what we do with it:
- It is late on purpose. A manager has up to 45 days after the quarter ends to file. So the picture we get is at least six weeks old by the time we can see it. Most managers file right at the deadline. Ours files about 44–45 days after quarter end, so the filing lands mid-February, mid-May, mid-August and mid-November.
- It only shows long positions and some options. A 13F shows what a manager owns. It shows put and call options too, but only as a face value ("notional") with no strike price, no expiry, and no size that can be copied. It never shows short positions. So the form is a keyhole view, not the whole room.
- It is public and free. Anyone can download it from the SEC's EDGAR system. There is nothing secret or privileged in what pit-boss reads.
The academic finance literature has studied "cloning" 13Fs for decades. The honest summary: copying a genuine stock-picker's concentrated, high-conviction long positions, right after the filing lands, has shown a modest edge — single digits per year — that survives the 45-day delay. Copying options does not work (they cannot be sized). Copying one manager rather than a consensus of several is the riskiest version of the idea. pit-boss does the best-evidenced version and treats the risks as first-class.
The strategy, exactly
"follow a filer"The filer we follow is Situational Awareness LP, a hedge fund whose 13Fs show a concentrated book of AI-infrastructure and semiconductor names, alongside a very large book of put options that we cannot copy. From each new filing, pit-boss computes a target portfolio in exactly these steps, and the steps are deterministic: the same filing always produces the same targets, byte for byte, and a script in CI re-derives every committed target from the archived filing to prove it.
- Strip every option line. Puts and calls are logged as "context: hedges we can see but not size" and never traded. What remains is the common-stock long book.
- Apply the conviction filter. Keep only positions that are at least 2% of that stock-only book, and at most the top 10 by weight. Small positions are noise; the edge in the literature comes from the manager's biggest bets.
- Resolve each line to a tradeable ticker. The filing identifies stocks by CUSIP (a nine-character security ID). If a CUSIP cannot be resolved to a ticker — a delisting, a merger, a bond CUSIP used for a stock — the line drops to cash with a logged reason. It is never guessed. (A committed, reviewed override file can supply a ticker for a known case, and every override must carry evidence, an approver and a date.)
- Renormalize. The surviving weights are scaled so they add up to 95%, leaving a 5% cash buffer.
-
Write the artifact. The result is a
targetsdocument listing every held name with its filing weight and its target weight, every excluded line with the reason it was excluded, the accession number of the filing it came from, and the exact configuration that produced it. If the filer later amends the filing, the old targets are marked superseded and the amendment wins.
That is the entire "strategy". There is no forecasting, no indicator, no news-reading. Once a quarter the target book changes because the filer's book changed, and the system trades the account from where it is to where the targets say it should be — subject to the house rules below.
What it refuses to do, on purpose
A lot of the design is negative space. These are decisions, not gaps:
- No option cloning. The filing does not give enough to size them.
- No signal mining. No "try a hundred ideas and keep the one that worked" — that produces fake edges by construction.
- No Kelly sizing. Six filings are not enough data to estimate a win/loss distribution; sizing is fixed against the limits.
- No fully autonomous, unattended, "confirmation off" trading of real money. The gate below is not a setting.
- No language model in the money path. An AI can run scripts and read reports; it cannot compute a position, approve a risk check, or place an order. (More on this below.)
- No unofficial broker APIs, no screen-scraping, no scraped market data.
- No live trading yet, at all. The broker adapter has
paper=Truewritten into it. Passing--liveis refused rather than quietly running paper, because someone would draw live conclusions from a paper run.
How a rebalance actually happens
step by step, with what stops itA "rebalance" is the once-a-quarter act of moving the account from what it holds to what the new targets say. Here is the whole path from the SEC's website to a filled order, in order. The order is itself a safety property: nothing later in the list can happen until everything earlier has succeeded. Under each step is what makes it stop.
Watch EDGAR
Every evening at 18:00 New York time, a scheduled job asks the SEC whether our filer has posted anything new. It only bothers during the ±10-day window around each 45-day deadline; outside the window it does nothing except write a heartbeat saying "I ran". Detection never trades. It archives, computes targets, sends a notification, and queues a cycle for later.
Archive before parsing
The raw filing documents are saved, unchanged, with a hash of each file, before any code tries to read them. The archive is point-in-time and never edited. If a parser has a bug, the evidence is still there to re-run against.
Parse and verify
The holdings table is parsed and its row count and total value are checked against the filing's own summary page. A mismatch fails loudly rather than producing plausible-looking nonsense.
Compute targets
The strategy steps above run. The result is written as an artifact: locally as
targets/<quarter>.json (committed to git and re-verified in CI),
and in the cloud as a Firestore document carrying the same payload.
Reconcile first
Before building a plan, the system compares what the broker says the account holds against what its own journal says it should hold (replayed from every recorded fill). If they disagree — a "break" — the cycle stops right here, before any work is done, and stays stopped until a human resolves the break by adding to the record (never by editing it).
Snapshot equity
Account equity is recorded so the drawdown circuit breaker (see the rules) measures against a high-water mark that includes today. Without a history of equity there is nothing to measure drawdown against and the breaker is inert — which the system says out loud rather than reporting a comfortable zero.
Quote and validate prices
A price is fetched for every name and checked before anything is sized: it must be less than 15 minutes old and within ±20% of the previous close. This happens before the risk engine because a bad price makes an order quietly smaller, and a smaller order passes every percentage-of-equity limit. It has to be caught where prices enter.
The risk engine rules on every order
For each name the engine computes the trade needed to reach the target and then applies every house rule. Each order comes out tagged approved, reduced (scaled down to the binding limit, with the reason), or blocked (with the reason). Blocking is a normal outcome and it is logged like any other. Freed weight from a reduction goes to cash, never to other names — redistributing would concentrate the correlated basket further.
Journal the plan
The plan — approved, reduced and blocked orders alike, with limit prices set at the last price ± 0.5% — is written to the journal before anyone is asked to confirm it. A fingerprint (a hash of the exact plan) is computed. Change one share of one order and the fingerprint changes.
The gate
Nothing is sent without a capability token bound to that fingerprint. There are exactly three ways to mint one — a phrase typed at a real terminal, a phrase typed on the dashboard by a signed-in, allowlisted human, or a clean rehearsal of the identical plan on a paper account. All three are described in the gate. There is no flag, environment variable or setting that skips this; setting a plausible bypass variable is detected, journaled and ignored.
Submit, one order at a time
Every order carries a deterministic client order ID
(hr-<quarter>-<ticker>-<side>-<hash>). Before
sending, the adapter asks the broker whether an order with that ID already
exists; if it does, it is adopted, not re-sent. So a crash and a re-run
cannot double-submit. Between every order the executor checks the halt switch
(a file locally, a Firestore document in the cloud). Broker errors get three
tries with backoff, then a loud stop with the plan preserved.
Settle
A real broker accepts an order and fills it a moment later. The system polls every submitted order until it reaches a final state (filled, cancelled, rejected, expired), for up to two minutes, and records each fill idempotently. Reconciling before the fills exist would report a "missing fill" for every order on a book that is in fact correct — which is exactly what happened on the first real rehearsal, and why this step exists.
Reconcile again, snapshot again, notify
Broker state is diffed against the journal once more. A clean result unblocks the next cycle. Any break blocks it and pushes a high-priority alert. Equity is snapshotted a second time. A push notification reports what was sent, what filled, and whether reconciliation was clean.
The dashboard redraws
Every panel on the dashboard is computed from the journal and the archived filings, not from the broker directly. Cloud Functions write Firestore documents; the page listens and redraws live. Nothing on the page can trade.
The house rules
limits.yaml is the authority
The limits live in one version-controlled file,
src/house_rules/risk/limits.yaml. There is no environment variable,
command-line flag, or runtime setter that can loosen one. Changing a limit takes a
commit and a review, and the review ritual allows at most one rule change
per quarterly cycle. A self-test (hr-risk-check --demo) pushes
deliberately violating trades through the engine and fails if any get through; it
runs in CI so a bad build cannot merge.
| rule | value | in plain words |
|---|---|---|
| max_position_pct | 25 | No single stock may be more than a quarter of the account. The filer's top pick is usually bigger than this, so this rule binds most quarters and the clone deliberately under-weights the manager's highest-conviction name — a known, accepted trade of tracking for safety. |
| max_basket_pct | 80 | Stocks that move together are grouped into named baskets (AI infrastructure; semiconductors). No basket may exceed 80% of the account. Membership is a static list plus a check: any two names whose 90-day returns correlate above 0.7 are treated as one basket. On the current book this cap sits close to binding almost all the time — the whole book is close to a single AI bet, which is the strategy's largest structural risk. |
| circuit_breaker_dd_pct | 25 | If account equity falls more than 25% from its high-water mark, every buy is blocked. Sells that reduce risk still pass. It does not reset itself when equity recovers: resuming requires a written journal entry and an explicit re-arm by a human, so the decision to continue is made deliberately and not in the emotional state that caused it. |
| min_order_usd | 10 | Orders smaller than ten dollars are not worth their own noise and are dropped. |
| max_turnover_pct_per_rebalance | 100 | The total dollars traded in one rebalance may not exceed the account's value. |
| allow_fractional_shares | false | Whole shares only. On a small account this quantizes the book noticeably: a $10k account cannot express a 2% target in a $300 stock. Measured against real prices, the tracking target of "within 2 points" is only achievable from roughly $100k upward with whole shares. |
| day_trade_budget | 3 / 5 days | A fallback day-trade allowance used only when the broker reports nothing about its own regime (the old pattern-day-trader rule was repealed in June 2026; brokers are phasing in a replacement). Same-day round trips in the quarterly path are refused outright regardless — that was always a strategy rule, not a regulatory one. |
The gate: three keys and one switch
The original rule was "nothing reaches a broker without a human typing a phrase". Looked at closely, the phrase was never the point. The real property is:
An order cannot be submitted unless a capability token exists that is bound, by fingerprint, to the exact plan being submitted.
The submit function takes a token object, not a yes/no. There are three things that can mint one, and the executor does not care which:
-
A phrase typed at a real terminal. Running
hr-rebalanceprints the full plan and waits for you to typeCONFIRM REBALANCE <QUARTER>exactly. Piped input is refused, so no script can type it for you. Anything else aborts the plan. - A phrase typed on the dashboard. The web version proves the same four things the terminal did, each failing closed: identity (a signed-in, email-verified Google account on the allowlist), binding (the browser echoes the fingerprint of the plan it rendered, and it must match the stored one), presence (the exact phrase, typed — the input refuses paste), and freshness (the plan expires 20 minutes after it was built; a walked-away operator has not confirmed). The stored plan is the confirmed plan; it is never rebuilt at confirm time, because prices move and you would be confirming words you never read. Building a new plan supersedes any older one still waiting, so the phrase can only ever apply to the newest thing you read. The status flip from "awaiting" to "submitting" happens in a database transaction, so a double-click or a second tab cannot submit twice.
-
A paper proof. The identical plan is first executed against a
paper account: every approved order submitted, none rejected, nothing left in
flight, every fill settled, and post-trade reconciliation with zero breaks. Only
then is a
PaperProofminted, and it expires after 30 minutes. There is no partial proof, because there is no partially authorized order: a rejected paper order is evidence the live run would meet the same refusal. A proof cannot be minted against a live venue (that would place real orders in order to authorize placing real orders). This is the token the autonomous path uses; the human moves from approver to overrider — and is notified when a proof is minted and when it is spent, because an override nobody knows to use is not an override.
The one switch is halt. Locally it is a file named
halt in the repo root; in the cloud it is the Firestore document
ops/halt, toggled by the "Halt trading" button on the dashboard.
It is checked before a proof runs, between every paper order, and between every
live order. Setting it stops the run at the next boundary and preserves the plan;
clearing it is equally deliberate. It is reachable from a phone.
The journal
the only source of truthEverything the system decides is appended to a journal: runs, plans (including blocked orders and why), every order state transition (planned → approved → confirmed → submitted → partially filled → filled / cancelled / rejected / expired), every fill, equity points, and free-text notes. It is append-only. When something goes wrong you fix it by adding a record — a missing fill, a correcting note — never by editing history. The design goal is that any past decision can be reconstructed from the artifacts alone, without trusting anyone's memory.
There are two journals, and it matters which is authoritative:
- The local journal (
journal/journal.sqlite) is where the system was born and where the intraday session engine, tear-sheets and the trial registry still write. - The cloud journal (Firestore collections prefixed
journal_) is where the web-gated and autonomous rebalance write, and since the first cloud rebalance ran it is the system of record for the paper account. The mirror from local to cloud is one-way, deliberately, so there is never a question of which record wins — and there is no cloud-to-local backfill. Once the cloud has traded an account, the local journal for that account is permanently behind, and running the local rebalance against it would be running over a history it does not know.
A useful consequence: every order this system has ever placed carries a client
order ID beginning hr-. Any order in the account without one was not
placed by pit-boss, and reconciliation will say so.
Where it runs
a laptop and a cloud
The same Python package runs in two places. On a laptop it is a set of
hr-* command-line tools (see the FAQ for the list). In the cloud it is a
Firebase project: static Hosting for this dashboard, Firebase Auth in front,
Firestore as the journal, Python Cloud Functions running the scheduled jobs, and
Google Secret Manager holding the broker keys — the keys are injected into
functions and never appear in the repo, in logs, in Firestore, or in the browser.
The functions vendor the exact same house_rules package at deploy time,
so cloud parsing is byte-identical to local parsing.
| job | when (New York time) | does | can it trade? |
|---|---|---|---|
| equity_snapshot | weekdays 16:30 | Records account equity and cash after the close; arms the drawdown breaker. | No |
| watch_edgar | daily 18:00 | Polls EDGAR inside a filing window; archives, parses, computes targets, notifies, queues a cycle. No-op outside the window (still writes a heartbeat). | No |
| refresh_analytics | weekdays 16:45 | Recomputes every derived dashboard panel into one document. | No |
| watchdog | every 6 hours | Checks the heartbeats of the other jobs; alerts if the watcher is more than 26 h stale or equity more than 96 h stale (a Friday beat must survive the weekend). | No |
| autonomous_cycle | weekdays 10:00 | If a filing queued a cycle and autonomy is armed and the market is open: build, prove on paper, submit, settle, reconcile. Otherwise it notifies and waits for tomorrow. | Yes — only when armed |
| plan_rebalance / confirm_rebalance | on demand, from the dashboard | The web gate: build and journal a plan; validate the typed phrase and submit it. | Yes — after the typed phrase |
| refresh / recompute_analytics / set_halt | on demand, from the dashboard | Snapshot equity now; recompute panels now; set or clear the halt document. | No |
The Firestore security rules refuse every write from a browser; only functions write, through the Admin SDK. Reading requires a signed-in, verified Google account on an allowlist, and every function that can move toward an order re-checks that same allowlist server-side. "Signed in with Google" alone is not authorization.
The dashboard, panel by panel
The page you land on after signing in is called the house ledger. Read it top to bottom and it answers one question at a time. (The FAQ goes deeper on reading each panel.)
- Account equity and its sparkline; cash; position count; the last rebalance. The number is the last recorded snapshot, not a live tick.
- House limits — up to four gauges (largest position, invested, drawdown, planned turnover): how much of each limit is spent, with the cap drawn as a hard stop so "how close" is visible rather than inferred.
- The ledger — every rule's verdict on every order in the latest plan. A dot is an approval; a stamp is a reduction or a block. This is the signature of the whole system: nothing else records the rules that did not bind.
- The gate — build a plan; read it; type the phrase; or halt trading.
- Book against targets — what the broker says you hold versus what the targets say, with drift.
- What the clone leaves behind — how much of the filing the clone reproduces and how much it discards (the options), and whether the filer is short a name we are long.
- Capital not deployed — structural "leaks": cash buffer, whole-share rounding, names dropped for lack of a ticker, price paid versus intended.
- When this filer files, Clone decay, Reconciliation, Per-quarter scorecard, What the limits cost (recorded equity against the same filings replayed with no limits), Evidence (the validation battery's ruling), and Filings.
Every panel owns its own empty state. A panel that cannot be computed prints the reason; it never draws a zero, because with no trade history "no data" and "no drift" would otherwise look identical. Small samples wear a n=3 of 20 tag on the face of the number.
Where the AI sits
operator, never calculatorA language model (Claude Code, mostly) is the operator of this system: it runs the scripts, reads the reports, drafts journal entries, and writes code. It is never the calculator. No model output touches position math, a risk check, or an order. The reason is not caution for its own sake: a systematic review of LLM-agent trading found the field's performance claims essentially unreproducible, and red-team studies show that misinformation planted in an agent's data feed changes its trading decisions a quarter of the time. Keeping the model out of the decision path entirely is the only architecture the evidence fully supports.
There is one place a model may influence the book, and it is bounded arithmetically. An optional LLM operator can propose adjustments to a target portfolio before the risk engine sees it — but the only two actions it has are exclude a name and tilt a weight down. It cannot add a name the filing does not contain, cannot raise any weight, cannot touch a limit, and freed weight goes to cash. A maximally adversarial model can only make the book more conservative than the mechanical clone. Its bounds are enforced by code (the prompt merely states them as a courtesy); an out-of-bounds proposal is refused whole, never clamped; and the raw proposal, the model identity, the prompt fingerprint and a written rationale per adjustment are journaled verbatim, because you cannot re-derive what a model would have said. By default the operator proposes nothing and the trading path makes no model call at all.
The other feature: the session trader
intraday, unproven, gated hardestThe same core (risk engine, journal, adapters, dashboard) also hosts a second, opposite-cadence feature: intraday day trading inside a human-confirmed session envelope. Before the open, a human confirms a session — strategy and version, symbol whitelist, maximum position size, a hard daily loss limit, allowed time window, blackouts around scheduled macro events — by typing a phrase. Deterministic code trades inside that envelope; the envelope cannot be altered once armed; three consecutive out-of-envelope orders kill the session; everything is flattened by a hard cutoff before the close; and an independent dead-man supervisor cancels and flattens if the process stops heartbeating for 60 seconds. Every strategy input is captured to hash-sealed files so a session can be replayed exactly.
The evidence posture here is adversarial: the academic base rate for retail day trading is poor, so no intraday strategy touches real money until it has earned it on paper through a formal validation battery — at least 60 sessions or 300 trades, positive out-of-sample walk-forward, and a probability-of-backtest-overfitting / deflated-Sharpe pass over every variant ever tried (each registered before it is tested, so the denominator is honest). Failing the battery kills the strategy; that outcome is expected for most candidates and is the system working. As of now the first candidate (an opening-range breakout) has no evidence of edge and no paper season has been run.
Evidence and honesty
A few ideas about evidence run through everything, and they explain why the dashboard sometimes tells you unflattering things.
- Beating the market is not the claim. The book has a beta of roughly 3.6 to SPY — it moves more than three times as much as the index — so "beat SPY" is nearly meaningless as a skill claim; leverage would do it. The narrower claim the strategy makes is that the conviction filter and timing add something over a naive clone (the same names, equal-weight, bought at period end and held). The tear-sheet reports both, and also against SMH (the semiconductor ETF), which is the honest comparison for a book this concentrated.
- Small samples are labelled, not hidden. Under about twenty observations the tear-sheet withholds ratios; where it reports one, the 95% confidence interval sits beside it, and on a short history that interval is wider than any plausible skill.
- The quarterly strategy failed its own battery. Replaying the archived filings through the system produced a big headline return — and a 47% peak-to-trough drawdown against a 25% circuit breaker. At 47% the breaker trips, every buy is blocked, and a manual re-arm is required. The headline assumes a book the system's own rules forbid. The verdict is on the dashboard's Evidence panel and it is not being tuned around: choosing parameters because their column looks best is precisely the trap the whole product is built to avoid.
- Costs are charged. Paper results only count net of modelled commission and slippage; a strategy whose edge disappears under costs fails.
Where things stand
as of mid-August 2026- Paper only. No live trading, no money at risk. The Alpaca adapter hard-codes paper; the live arming path has no web equivalent and is not built for any real venue.
- The cloud is the trading path. The web gate has planned, confirmed and submitted a real rebalance on the paper account, and the cloud journal is now the system of record for it. Its exit criterion — one rebalance through the web gate with clean reconciliation in one run, with no hand repair afterwards — has not yet been met, so the local scheduled jobs have not been decommissioned. The local
hr-rebalancemust not be run against the paper account any more. - Autonomy is built and disarmed. The autonomous cycle is deployed but
ops/autonomyis not set, so a new filing queues a cycle and sends a notification instead of trading. Note also that in the current cloud deployment the paper-proof leg and the "live" leg point at the same paper account, which makes the proof vacuous — the code says so loudly, and a second account is needed before autonomy demonstrates anything. - The Q2-2026 filing landed on 14 August 2026. The next real cycle is that one. What to do about it is the first question in the FAQ.
- The quarterly strategy has failed the validation battery on drawdown; the intraday strategy has no evidence of edge and no paper season yet. Neither is approved for live use.
- What must be true before any real dollar: two clean paper cycles with tear-sheets and journal entries; tax-lot and wash-sale accounting; a validation verdict that is not FAIL; and a written, journaled decision.
The FAQ covers how to actually use it day to day, and what to do when it pushes back.
Glossary
- 13F
- The quarterly SEC form on which large investment managers disclose their stock holdings. Filed up to 45 days after quarter end.
- Accession number
- The SEC's unique ID for one filing, e.g. 0000935836-26-000418. Every target artifact names the accession it came from.
- Amendment (13F-HR/A)
- A corrected filing. It supersedes the original; targets computed from the original are marked superseded and refused for rebalancing.
- Basket
- A named group of stocks that move together. Capped as a group.
- Break
- A disagreement between the broker's account and the journal's expectation: a missing fill, a phantom position, or cash off by more than $1. Blocks the next cycle.
- Circuit breaker
- Drawdown from the high-water mark past 25% blocks all buys until a human re-arms with a written reason.
- Client order ID
- A deterministic ID on every order (hr-…) so re-runs adopt rather than duplicate, and so foreign orders are recognisable.
- Conviction filter
- Keep only positions ≥2% of the stock-only book, at most the top 10.
- CUSIP
- A nine-character security identifier used in filings. Must resolve to a ticker or the line drops to cash.
- Drawdown
- How far equity has fallen from its highest recorded point (the high-water mark).
- EDGAR
- The SEC's public filing database.
- Fingerprint
- A hash of the exact plan. Confirmation tokens are bound to it; change one order and it no longer matches.
- Halt
- The kill switch: a file locally, the ops/halt document in the cloud. Checked between every order.
- Heartbeat
- A "still alive" record written by each scheduled job on every pass; the watchdog alerts when one goes stale.
- High-water mark
- The highest equity ever recorded. Reset deliberately (with a journaled reason) after a deposit or withdrawal, never automatically.
- Idempotent
- Doing it twice has the same effect as doing it once. Orders and fills are idempotent by ID.
- Journal
- The append-only record of every run, plan, order, fill, equity point and note. The only source of truth.
- Notional
- The dollar face value of a position or order.
- Paper account
- A simulated account at a real broker with real prices and order handling but no real money.
- Paper proof
- A capability token minted only when the identical plan executed cleanly against a paper account. Expires in 30 minutes.
- PBO / Deflated Sharpe
- Statistical corrections that ask "given how many things you tried, how likely is it that this result is luck?" A return with no deflation for the number of things tried is a selection artifact, not evidence.
- Plan
- The full list of orders for one rebalance, each tagged approved / reduced / blocked with reasons, plus limit prices.
- Reconciliation
- Diffing broker state against the journal's replay of recorded fills. Runs before and after every cycle.
- Rebalance
- Trading the account from what it holds to what the targets say, once per filing.
- Session envelope
- The human-confirmed limits inside which the intraday trader may act for exactly one day.
- Slippage
- The difference between the price you decided at and the price you got.
- Targets
- The deterministic target portfolio computed from one filing: tickers, weights, exclusions with reasons, config.
- Turnover
- Total dollars traded in a rebalance as a percentage of equity.
- Validation battery
- The set of tests (walk-forward, PBO, deflated Sharpe, drawdown inside rails, costs charged) a strategy must pass before real money. Failing is the expected outcome for most candidates.
Not investment advice. Paper-validate everything. Expect strategies to fail validation — that is the system working. · Dashboard · FAQ