CFTC Rule 4.41(b)(1)(i) — Hypothetical performance disclosure
These results are based on simulated or hypothetical performance results that have certain inherent limitations. Unlike the results shown in an actual performance record, these results do not represent actual trading. Also, because these trades have not actually been executed, these results may have under-or over-compensated for the impact, if any, of certain market factors, such as lack of liquidity. Simulated or hypothetical trading programs in general are also subject to the fact that they are designed with the benefit of hindsight. No representation is being made that any account will or is likely to achieve profits or losses similar to these being shown.
The Strategist
The Strategist is a research orchestrator, not a chatbot and not an execution system. It takes a prompt in plain language — an idea, a goal, a constraint, a strategy you already trade — and returns a versioned package, an Evidence Ledger and a starting capital level with the posterior that justifies it. Its client is not you: it is the Executor, which has to run that output exactly as written.
What it commits to, and what it refuses to promise
It commits to a process you can audit and reproduce, metrics with credible intervals, a starting capital level proportional to the evidence, falsification conditions declared before anything runs, and an output format the Executor can consume. It does not commit to future returns, and it treats the synthetic forward test as a simulation, not a substitute for market microstructure. One thing it never does: assign more capital than the posterior supports, unless you override it explicitly and the override is recorded.
The Goal Spec: your sentence, made falsifiable
A user prompt is not testable until someone decides what it means. The canonical example in our own product documentation is a person who types:
"I want to beat the S&P 500."
That sentence hides four decisions. Beat it on what — raw return, or return adjusted for risk?
Against what — the cash index, or the continuous futures contract with a rolled adjustment? With
what risk budget? Over what horizon? The Strategist resolves each one, writes the resolution down,
and produces a contract: information ratio at or above 0.5 against the continuous ES contract,
"beat" read as risk-adjusted rather than gross, a maximum drawdown limit and a daily value-at-risk
limit, an explicit capital figure, leverage capped, universe restricted to ES, NQ, RTY and YM.
Every one of those readings appears in an ambiguities_resolved list you can disagree with.
The rules around that are short. At most one round of clarifying questions; everything else is a
declared default. A goal stated in absolute terms, with no stated tolerance for loss, gets a
drawdown constraint by default. A strategy you bring is treated as hypothesis zero and validated as written before any
variant is proposed. And a goal that cannot be falsified at all comes back as META_REFORMULADA —
a proposed rewrite, with the reason — instead of an answer that pretends the goal was understood.
F0 to F7, and the gate on each one
Eight phases, each with a condition it has to satisfy before the next one begins.
- F0 — the validated Goal Spec. Gate: the objective is measurable, and the benchmark and the tolerance for loss are explicit.
- F1 — labeled evidence from research. Gate: at least one documented mechanism scoring three or better.
- F2 — the regime model. Gate: Occam's razor. If it does not beat a trivial baseline it is dropped, and nothing downstream is blocked.
- F3 — the candidate hypotheses. Gate: the mechanism is declared before the backtest runs, and the trial count is recorded.
- F4 — every metric from the engines. No gate at all: the engine does not approve, it produces evidence.
- F5 — the Auditor. Binary gate: look-ahead or mis-modeled costs invalidate everything and send the package back to F3.
- F6 — the package and the starting level. Gate: valid schema, parameters inside the ranges the research supports.
- F7 — refinement from real execution data. Never blocks delivery.
The hypothesis budget, and why the Sharpe is deflated
Five to seven hypotheses per session, by default. That is a statistical constraint, not a time limit. If you test enough ideas against the same history, one of them will look excellent for reasons that have nothing to do with the market, and the number of attempts is exactly what tells you how much to discount the winner. The trial count travels inside the package and deflates the Sharpe ratio. The deflated figure is the one reported, not the flattering one.
The Auditor's checklist
Nine deterministic checks run in code before any adversarial reasoning happens: point-in-time correctness and look-ahead, which contaminate the walk-forward and the holdout at the same time; survivorship bias; data snooping and the deflated Sharpe; realistic costs in every engine; statistical power, because the two Monte Carlo engines resample one holdout and do not multiply the evidence; line-by-line coherence with the Goal Spec; parameters inside the ranges research supports; Occam's razor on the regime model; and the independence of the sealed holdout from everything that happened during research and design.
Then a second language agent runs an adversarial pass over the narrative: thin mechanisms, reasoning that does not match the rules, and whether the synthetic posterior is communicated with the language of uncertainty or has started to sound like a promise.
Copilot mode
If you already trade a strategy, you do not have to accept a design. Copilot mode takes your rules as hypothesis zero and runs the same six engines and the same audit against them: where the edge survives, where it was fitted, what costs really do to it, and which regime it quietly depends on.
Where the numbers come from
The Strategist decides what to test and interprets what came back. It never computes a metric and never edits the final package — code does both. None of that runs yet: the Strategist and the validation engine it calls are built in a later phase, so there is no input to read and no result to label here today. When it does run, every input will be synthetic and every result labeled SYNTHETIC on the number itself.