Every result is a pure function of its inputs.

A run is defined by its build, parameters, data, execution assumptions and seed, so rerunning it returns the same bytes.

app.evrantlabs.com/runs/9f3a2c/reproduce
Reproduction checkrun 9f3a2c · ORB · DEMO · base-orb v3Development
Buildbld:3f9a1c20
Parameter setpar:419f20ba8b
Model bindingsnone
Dataset manifestbars-1m@v12 · 951000
Execution profileexe:768536a0ee
Time range2016-09 → 2021-12
Purposedevelopment
Engine version1.4.0
Fill modelfill-model-v1
Metric definitionsmetrics-v3
Seed42
Enginef(inputs)
Result hash4c8b0d016a515b43byte-identical
  1. Original run4c8b0d01

Illustrative hashes and figures throughout this page. Reproduction checks also run on a schedule in CI and production.

Strategies are C#, built in a sandbox.

The agent writes against the Evrant SDK. Code from the editor or an upload takes the same checked build path.

  • Parameters are declared in code and must match the specification
  • Reflection, I/O, network, threads and the wall clock are rejected
  • A verifier checks every reference before a build can run
  • Failed builds go back to the agent, up to five build attempts
OpeningRangeBreakout.cs · parameter excerptv7Verified
// OpeningRangeBreakout.cs — parameter excerpt, not a complete strategy.
// Specification v1. Example market, one-minute bars.

[IntegerParameter("or_minutes", 30, 15, 60, 5)]
public int OpeningRangeMinutes { get; set; } = 30;

[IntegerParameter("stop_ticks", 2, 0, 8, 1)]
public int StopBufferTicks { get; set; } = 2;

[ContinuousParameter("target_r", 2.00, 1, 3, 0.25)]
public double TargetRiskMultiple { get; set; } = 2.00;

[ContinuousParameter("rel_volume_min", 1.00, 0.8, 1.6, 0.1)]
public double MinimumRelativeVolume { get; set; } = 1.00;

// stop_ticks is the buffer beyond the opposite range edge.
// Complete strategy: first completed-bar close beyond the opening range,
// once per direction, with relative volume at or above the minimum.
// Stop beyond the opposite range edge; target = target_r times initial risk.
// Flat by 15:55 exchange time. Session state and order handling omitted.
ProblemsOutputbuild 9f2c41e
  1. 14:31:44.112runnerBuild 9f2c41e started for source v7 (OpeningRangeBreakout.cs, 5.6 kB)
  2. 14:31:45.692roslynCompiled in 1.58 s, 0 errors, 0 warnings
  3. 14:31:45.896analyzerallow-list-v1: 0 findings; no suppressions, module initialisers or mutable statics
  4. 14:31:45.987staticParameter schema extracted: 4 parameters, matches specification v1
  5. 14:31:52.822smoke17 entries, 17 exits, 0 open at range end, peak state 6 fields
  6. 14:31:57.132lookaheadFull and truncated runs identical at 12 cut points
  7. 14:31:57.284verifier401 member references checked against allow-list-v1, 0 rejected
  8. 14:31:57.290runnerBinary sha256:9f2c41e7b0d85a3c6e1f verified and executable
Data catalogMarket A · example · PT1M

Instruments · 4

AMarket Aexample · futuresUSD
BMarket Bexample · futuresUSD
CMarket Cexample · proxyUSD
DMarket Dexample · proxyUSD

Instrumentpublished

Asset class
futures
Currency
USD
Price semantics
observed parent
Volume semantics
observed parent
Roll rule
roll-rule-v1
Frequencies
PT1M · PT5M · PT1H

Chart series · 3

Continuous · PT1M · adjustedSignals · session-aligned-v1 · 1 Sept 2016 – 21 Sept 2026default
Continuous · PT1M · rawFills · contract prices · 1 Sept 2016 – 21 Sept 2026
Derived bars · PT1H · adjustedBuilt from PT1M, anchored to the session · 1 Sept 2016 – 21 Sept 2026derived

Measured gap, shown on any run that crosses it

Versioned market data, measured before use.

Every dataset records its coverage, gaps and version so a result can be traced back to its inputs. The catalogue in the app shows each market's coverage before you use it.

  • One adapter per provider, all writing the same normalised bars
  • Back-adjusted prices for signals, raw contract prices for fills
  • Higher timeframes built from one-minute bars, anchored to the session
  • Gaps are measured and shown on any run that crosses them

Fills that assume the worst.

Every run records its fill model version. fill-model-v1 takes the market's side wherever a one-minute bar leaves room for doubt.

DEMO1mCandlesfill-model-v1
signal on closenext open + slippagesell stopstop level not creditedfilled at the openbuy limittouch, no fillfilled at the limittargetentrystoptarget not creditedstop assumed first
Simulated fillFill the model won't credit

Models filter trades. They don't replace the strategy.

The strategy proposes an entry, an XGBoost model scores it as of that moment, and a threshold decides.

  • Features use only data available at decision time
  • Time-ordered splits only, with purge and embargo
  • SHAP hints become deterministic studies you can read
  • No out-of-sample gain means the model is rejected
orb-xgb-filter · xgb:3e81Win-probability filter on base-orb v3 entries

What the results saydevelopment evidence

Ranks holdout winners modestly above losers

Holdout trades
212
Unfiltered win rate
45.3%

Model qualitytraining → holdout

Ranks winners above losers0.68 → 0.610.61ROC AUC
Probability accuracy0.221 → 0.2380.238Brier score
Forecast missDevelopment holdout3.1pct points

Trade selectionexplore · does not change the model

50%
More trades · 40%Fewer trades · 65%

At 50% the filter keeps 118 of 212 holdout trades

Win rate of kept
51.7%
Winners kept
63.5%
Total net P&L
$11,240
Avg per kept trade
$95
Largest drawdown
−$2,640

Stored stable-region threshold: 50%. A selection estimate, before a paired backtest of the filtered strategy.

Nothing is replaced. Nothing is left to chance.

Every change creates a new immutable version, rival ideas live on branches, and parallel compute returns the same bytes as a single thread.

Immutable versions

Changes to logic, parameters, model or execution create a new version with its parent recorded.

Branches share ancestry

Creating a branch never touches the base, and branches compare on identical data and ranges.

Primary branch

Promotion moves a pointer

Making a branch primary copies nothing and changes no version. Try it above.

Parallel, still deterministic

Trials, walk-forward windows and Monte Carlo paths spread across threads and match a sequential run.

Early access

Run it again. Get the same answer.

Join free for an early-access invitation. No account or payment required. We’ll confirm market coverage before you choose a plan.

For your early-access invitation only. Request removal anytime at [email protected]. See our privacy notice.