Ace EchoECHO
connecting…
Every stage, in the order the data flows

How Echo works

Twelve stages, from the bar the collector writes to the ledger that scores the call it led to. Each one says what it does, the numbers it is held to, what is known to be weak, and what is next. This is the page we come back to: when a stage is improved, its card changes here first. Nothing on it is a plan dressed as a result.

12 stages23 improvements queueddesk pushes every 60 s · connecting
01

Collect the bars

gap fill · no run logged yet (the add-on runs it on its next connect)

A NinjaTrader add-on on the desk writes every 1-minute bar of every collected root into MySQL, per expiry contract — NQ and MNQ since September 2021; ES, YM, RTY, the four Treasuries, five currencies and their micros backfilled to the feed's limit (about 5.7 years) on 21 September 2026 and live since.

What it does
  • One row per minute per contract: open, high, low, close, volume, stamped by the bar's end. Every expiry is kept — nothing is stitched or adjusted at this stage.
  • MySQL on the desk is the source of truth and the collector is its only writer. Everything above it reads; nothing above it writes.
  • The desk pulls; nothing on the internet reaches it. The site only ever receives what the desk pushes.
Measured
  • Audited nightly against the CME calendar (the 17:00 halt, weekends, full and early-close holidays): NQ 99.6% and MNQ 99.4% of every scheduled minute since 2021 are present; zero bad bars, zero duplicates, zero zero-volume bars. The figure above is live.
  • Every minute lost in five years was one of two failures, never the exchange: the desk's NinjaTrader connection not returning after a closure (Sunday 18:00, Thanksgiving night, the DST night, one whole Monday in January 2026), or one root's subscription dying alone (MNQ, three times in mid-2025 while NQ traded on).
  • A watchdog now pages the desk when the exchange is open and either root's newest bar is more than five minutes old, once at the start of a stall and once when the bars return with the minutes to backfill.
  • The collector now fills its own holes: on every connect and nightly at 17:20 ET it walks each contract's front-month minutes against the same calendar, finds every run of scheduled minutes with no bar (five or more on NQ), and asks the feed for exactly those. Which contract was the front month on a given day is taken from that day's volume, the same rule the front-month series uses — a roll rule was tried first and was wrong for the Treasuries and, this September, for the equities too. What it put back, and what the feed could not supply either, is written to a log the audit reads — the figures above are that log.
  • The live collector's own watchdog used to rebuild only when nothing at all had been written for eight minutes; it now judges the stalest front-month subscription, which is what let MNQ die alone three times.
  • Ticks, from the same add-on and not bought: every trade of NQ and MNQ (front and next contract) goes to a daily file beside the add-on's settings, packed to Parquet on the desk the next night and kept for 400 days (the add-on's own raw files go after 60). Never in MySQL — the minute bars are the record; ticks are for tick-exact call resolution and the NinjaTrader reconciliation. The add-on reports its own lag against the exchange clock, which is the figure that decides whether more roots can be carried.
Known weak
  • Copper and the grains are catalogued but not collected; crude, natural gas, gold, silver and the crypto futures (with their micros) have been collected on their own roll cycles since late September 2026 and backfilled to the feed's limit.
  • A root's record begins where the feed's history does — about 5.7 years on this feed. The gap filler's quiet threshold is per market (5 scheduled minutes for NQ, ES and their micros; 15 for the Dow and Russell; 30 for rates and FX), measured from what each market does overnight when it is the front month — so a quiet stretch on ZT longer than 30 minutes would be missed.
  • The tick window is recorded but not yet used: a call still resolves to the minute, and which of stop or target was hit first inside one is scored as the stop until the resolver reads the ticks.
Next
  • Copper, the grains and ETH on their own cycles; ticks for more roots than NQ and MNQ.
  • Read the tick window in the call resolver, so a minute in which both stop and target were touched is scored by which came first rather than as the stop; then say on the ledger how many calls that changed.
  • More tick roots (ES, MES first) once the recorder's lag figure holds under a second through the US open.
  • Hand-check the holes the feed could not fill — if the exchange was open and the feed has nothing, that minute is gone, and the card should say how many such minutes there are.
02

Build the front month

Each session's bars come from whichever contract traded the most that session; the roll is a volume crossover confirmed over two days, and prices are never adjusted.

What it does
  • No back-adjustment, on purpose: a 20-point move in 2021 stays a 20-point move. Bars that straddle a roll are dropped rather than bent.
  • The live read decides its contract on the last two days of volume so it rolls when the market does — it did not, until the September 2026 roll caught it a day late.
  • Every price the site shows names its expiry, so a reader can never mistake one contract for the other across a roll week.
Measured
  • Roll detection reproduced the standard roll dates independently over five years.
  • The cost of dropping straddling bars: a few hundred of 1.7 million.
Known weak
  • A method anchored to one opening print can disagree with itself across contracts: on the 2026-09-13 Sunday reopen NQ and MNQ printed opening trades 72 points apart in the same minute.
Next
  • State the contract in the NinjaTrader add-on's warning when its chart is on a different expiry than the desk (built; verifying in use).
03

Turn bars into features

One hundred and fifty-eight strictly backward-looking features per bar: price, trend on three timeframes, momentum, volatility, session structure, and the readings of Ace's own indicators ported to Python.

What it does
  • A feature at bar t may use bar t and earlier — never later. The walk-forward harness checks this by construction, not by trust.
  • Ace's NinjaTrader indicators were ported from their source, one by one, and the ones that repaint were caught doing it and excluded from anything that decides.
  • Higher-timeframe context (5, 15, 60 minutes) is built from the same 1-minute bars, so nothing depends on a second feed.
Measured
  • Every feature sits behind the same leakage check the models are trained under.
  • Twenty of Ace's indicators were put through the five-stage gauntlet; the register on the desk records what each one found.
Known weak
  • The full feature set now builds on every bar family (1/5/15-minute, drift, range, tick), but only the 1-minute set feeds a production model; the rest feed the nightly comparison below.
  • The tick-window days are few: every tick-family figure below is a look, not a verdict, until the window clears 30 days.
Next
  • Feature importance published per model version, so the pipeline's audit can see what the model actually leans on.
  • Record the issue-time features on every prediction, not only on Deepwater's calls.
  • When the window clears 30 days: the families' walk-forward XGBoost scores decide whether a drift- or range-bar model earns a place beside the minute model (stage 04).
04

Train the models

retrain · scheduled weekly (Saturday 06:00 ET); no run recorded yet

Gradient-boosted trees (XGBoost), per instrument and per horizon — 3, 5 and 15 minutes — each a direction classifier and two range regressors, trained walk-forward with a sealed holdout the fit never sees, and refitted on a schedule against the model already running.

What it does
  • Direction: the calibrated probability that the next N minutes clear the cost threshold upward. Range: the expected distance to the highest high and lowest low over the horizon.
  • Deliberately modest trees (300 of depth 5, heavy regularisation), because 1.7 million autocorrelated rows are far fewer independent samples than they look.
  • Walk-forward: predictions are stitched from test windows the model had not seen. Only that stitched series is quoted; in-sample numbers are never shown anywhere.
Measured
  • Every collected root is trained now, not just the two on the board: seventeen roots × three horizons, each adopted only after beating the model it replaced on a thirty-day holdout neither had seen.
  • THE NUMBER THAT MATTERS, and it is not the flattering one. The usual AUC asks ‘up versus everything else’, and most of everything else is the flat class — so a model that only knows WHEN a big move is coming scores well without ever calling a direction. Asked up-versus-DOWN instead, flat bars dropped, with a fresh fit to the holdout cutoff and scored only on the days after it: NQ 0.499, MNQ 0.497, ES 0.500, ZT 0.426 at fifteen minutes — where the flattering figure reads 0.539, 0.535, 0.576 and 0.712. A coin flip, and on the two-year the wrong side of one. (A first table read 0.61 on MNQ; it had scored the saved model on its own training data, and is retracted.) Both figures are now reported on every model and the adopt-or-keep decision uses the honest one.
  • The range forecast is the part that is real, and it held on every new root: error about a quarter smaller than the naive ‘next range = last range’ guess, +0.24 to +0.28 skill throughout.
  • The settings were swept on 23 September 2026 -- 54 cells of depth, learning rate, leaf size and tree count on the same holdout, then nine label designs. The shipped constants ranked 17th of 54, the whole spread ran 0.530 to 0.541 against a fold-to-fold noise of 0.023, and the best cell beat the shipped one by 0.0025 -- a tenth of the noise. Nothing to change; the constants were never the problem. The label sweep read higher at a wider flat band (0.559 at a 7.5-point threshold), but that is a different, easier question -- fewer, bigger moves -- not a better answer to the same one, and the card says so rather than quietly switching.
Known weak
  • The model is a volatility meter more than a direction call — its score correlates +0.54 with ATR, most of its explanatory weight is volatility, and the directional figure above is what that looks like when the trader’s question is asked directly. Nothing here is a direction edge.
  • On the slow contracts the short horizons ask a question the data barely contains: two round-trip costs is larger than almost any three-minute move in the Treasuries, so 98.8% of ZT’s three-minute bars are labelled flat and the model is predicting a rare event. Those cells are flagged rather than shipped as though they meant something.
  • The cost table was wrong for every non-equity root until 22 September 2026 — a Nasdaq-sized default applied to bonds and currencies — and it destroyed their labels silently. It surfaced because training crashed, not because anything reported it.
Next
  • Horizons matched to how fast each market actually moves, instead of 3/5/15 minutes everywhere — a bond that moves beyond its cost once in eighty bars needs an hour, not three minutes.
  • Bar-family models: once the tick window clears 30 days, the drift and range families' XGBoost scores (stage 03) decide whether a tick-bar model earns a place beside the minute model.
05

Score every prediction, then fix the confidence

calibration map · not fitted

Every forecast is logged the moment it is made and scored when it resolves; the gap between what it said and what happened is published, and a calibration map fitted on that gap corrects what it says next.

What it does
  • A prediction row carries the probability, the lean and the horizon at issue; the resolver writes the outcome minutes later. Nothing is edited after the fact.
  • Six confidence buckets, stated versus delivered, on the track-record page — including the buckets where the model is wrong.
  • Every logged prediction now carries the model generation that made it, and the map is refitted nightly and again the moment a retrain switches a model in — a map fitted on a superseded model describes a distortion that no longer exists.
  • The map is applied only while it beats the raw probability out of sample. Right now it does not, so it is not applied, and the confidence the site prints is the model's own number.
Measured
  • The map earned its place in August: on 6,012 resolved calls it took expected calibration error from 16.6% to 12.0% out of sample. On the record as it stands (12,310 calls) the raw probability is already better calibrated than that — error 8.3% — and the isotonic map makes it worse out of fold (12.9%). So the correction is switched off and the curve is kept as the diagnostic.
  • The published confidence has always been the model's raw probability; the map was never silently applied to it.
Known weak
  • The model's up-move probability sits wherever each market's cost threshold puts it (about 5% on the Treasuries, 44% on NQ), and reading it against a fixed 33% made every market's lean one-sided until 30 September. The lean is now the model's non-volatility read against each market's own usual.
  • The first self-improvement pass found 36% of an earlier record contaminated by a resolution bug. Fixed, but it is the reason the ledger is re-checked rather than trusted.
  • The models adopted on 22 September have no resolved calls of their own yet, so nothing can be said about THEIR calibration until about four hundred have resolved. The figure below says which generation the record describes.
Next
  • Score by session and by regime, not only by confidence bucket — a model that is a volatility meter may be well calibrated at the open and badly calibrated overnight, and one number cannot show it.
  • Recheck the map once the new generation has four hundred resolved calls: if the fresh models distort differently, the correction comes back on by itself.
06

Read the market

Sentiment, structure, trend, the noise floor and the news calendar: the measurements that describe the environment a trade would be entering.

What it does
  • Structure: the initial balance of each session, whether it broke, how far breaks usually run and how often they hold — conditional statistics, not opinions.
  • Trend on 5, 15 and 60 minutes, and the anatomy of a trend once it exists.
  • The noise floor: a stop closer than half the expected 15-minute range is taken out by noise about half the time, measured on 25,000 random entries. Every plan's stop is checked against it.
  • News: the scheduled calendar of high-impact releases. Measured on 384 US releases since 2021: in the fifteen minutes before one, a trade is no worse in expectancy than on an ordinary morning, but the next fifteen minutes run about twice the usual range for that hour (four times the range a normal stop is sized on). So Echo cautions rather than blocks, sizes Deepwater's stops on the larger range, and judges every stop against it. Whether stops fill worse inside the release minute is being settled on the desk's own ticks, at twenty recorded releases.
Measured
  • The expected-range model is the one component with measured out-of-sample skill, and it is what the noise floor and the gate are built on.
Known weak
  • Sentiment never said bearish in its first month: it was a volatility meter wearing a direction label. It is shown with that caveat.
  • VWAP touches predict bigger moves for about two hours, not which way — they were once read as direction.
Next
  • Split the sentiment score into what it actually measures (volatility regime) and a separate, honestly-labelled direction lean.
07

Gate

Echo's verdict — trade, caution, skip — for the situation right now, with every reason listed and its effect on the verdict named, written down before the outcome is known.

What it does
  • Reasons are measured: how long a VWAP effect has left, how often a session break followed through, how often comparable days peaked later.
  • A reason can block, caution, support or merely note. The site shows which, so a reader can disagree with one reason without discarding the verdict.
  • Every verdict is written to its own ledger at issue time; the standby state is a verdict too.
Measured
  • Where is the model’s direction call worth listening to? Forty declared conditions (sessions, initial-balance state, VWAP side and distance, the nearest decile to prior-day, overnight and session extremes, value area, structure, volatility quartiles, Ace’s own signals), each read as up-versus-down AUC on six thirty-day windows with a fresh fit per window, on 23 September 2026. On NQ and ES three conditions cleared 0.52 in five or six of six windows — busy volatility, the NY morning, price at a session extreme — and were then tested, pre-registered, on YM and RTY: busy volatility 0.509 and 0.499, NY morning 0.497 and 0.504, session extreme 0.481 and 0.528. Not confirmed. Each root produces its own handful of ‘consistent’ slices, which is what forty slices on a coin flip do; the NQ–ES agreement was correlated noise. No condition ships to the gate. The harness reruns as the record grows, and the verdict stands until it changes.
Known weak
  • The gate is conservative by design and refuses most of the day. That is correct until a reason is measured to be worth overriding, and no override is enabled yet.
Next
  • Score the gate itself: how did the market do after each verdict, by verdict?
08

Deepwater — the instrument read

Six trade shapes (long and short, scalp, intraday, swing) graded A–E by the hit rate of that exact shape at this hour over the last sixty sessions against the rate its geometry needs; the best of them becomes Echo's call on the instrument page, and is scored.

What it does
  • A grade is the margin between the measured hit rate and the break-even rate for that stop and target, and a top grade also needs a hundred trades behind it.
  • Each call records about forty inputs at issue — ATR, RSI, EMA distances, MACD, Bollinger, volume, trends, structure, the model's probability, the sentiment score — so it can be audited later.
  • The ledger scores every call: fill, exit, points, and the calibration gap between what it said and what it delivered.
Known weak
  • Sixty-session rolling hit rates are exactly the kind of short window that overrates calendar effects; the pipeline's first meta-lesson. The grades are shown, and the ledger is what decides whether they mean anything.
  • Its live record so far is negative and its stated rates run ahead of its delivered ones.
Next
  • Deflate the plan grades by the number of shapes tried, and show the deflated grade beside the raw one.
09

The rule bots — Takeoff, Lineup, Longboard

A session-open method run mechanically: one continuation with the opening candle, then reversions back toward the fair price, fixed geometry, constant dollar risk. Three arms, one engine, one five-year record each, every setup posted live and scored.

What it does
  • Takeoff: the rules as written, nothing filtered. Lineup: one rule changed (a gap never vetoes the continuation), so the two records can be read against each other. Longboard: the same rules on 15-minute candles, exits still watched every minute.
  • The record engine is the live engine: the same code walks five years of bars and the bar that just closed. There is no separate backtest to disagree with the site.
  • Every change to the method is measured before it is allowed near a ledger: the fair-price anchor, the reversion target, session-scaled geometry and the opening-candle size were all tested and all lost to the method as written; the 15-minute candle is the one change that did not.
  • The prop-firm evaluation simulator walks each book through evaluations from twenty thousand random starting days, beside a coin flip at the same sizing, so the pass rate can be told apart from the sizing.
Measured
  • Five years: the 1-minute method is slightly negative per trade (−0.4 pts) and its evaluation pass rate is the sizing, not the setups — a coin flip passes as often.
  • The 15-minute book is +0.046 R a trade, positive in five of six years, and the first book clear of its own coin flip in every evaluation cell. It is on its own ledger to earn that live.
Known weak
  • The live ledgers are days old, not months. Nothing on them is significant yet, and the page says so.
  • Reversions are the losing half under every geometry tested; continuations carry what edge there is.
Next
  • Enough live sessions on Longboard to say whether the 15-minute finding survives contact.
  • A NinjaTrader chart running each arm on a sim account, reconciled trade by trade against the desk's ledger (the tool exists; the 1-minute one is reconciled nightly).
10

Ace's strategies, and the pipeline's verdicts

The NinjaTrader bots firing on the desk are shown with what Echo did about each fire, an edge badge from the desk's own tests, and — from the ACE strategy pipeline — whether the indicator repaints or its family has already been judged.

What it does
  • Every one of Ace's bots was replicated in Python and tested exactly as it ships, against the standard geometry table and a matched random-entry null.
  • The pipeline (a separate gauntlet: out-of-sample tests, cost stress, deflated Sharpe, Monte Carlo) publishes read-only verdicts; the desk pulls them and the site badges with them. Its promoted bots appear on the Bots page board under their own names, scored by the pipeline, not by Echo.
Measured
  • Of the shipped strategies, none cleared the desk's bar as a standalone entry; the repainting indicators were identified by measuring their signals live against their chart.
  • The exchange with the pipeline runs one way each: the desk pushes its ledgers and bars to the pipeline's schema, and pulls the pipeline's views. Neither can write to the other.
  • Three of Ace's twenty were blocked because the bars they run on cannot be made from minutes. With the tick window they are built tick for tick from the same bar-type code NinjaTrader runs (drift bricks, range bars) and every trade is resolved on the ticks, so which of stop and target came first is known. BarrellingWave on 10-tick drift, WaveHunter and BreakerAI on 20/40/60-tick range, sizes and forward bars swept inside one declared arm each, re-run every night as the window fills; the figures above are tonight's, with the days held beside them. Nothing counts until the window clears 30 days.
Known weak
  • The pipeline's bots are not on the board yet: the first pushes wait on one credential.
  • The tick window is two days old: every tick-bar figure on this card is a look, not a verdict, until the days-held count clears 30.
Next
  • The pipeline's DSR on the gated cells, and its regime table, so the news-session cell can be conditioned and tested rather than assumed.
  • When the tick window clears 30 days: the three tick-bar indicators through the full gauntlet (matched-moment null, family correction) and their verdicts written to the register.
11

Publish

Every sixty seconds the desk pushes one snapshot to this site; the site holds only the last one and reports its age. The NinjaTrader add-on and the Echo indicator read the same snapshot, one instrument at a time.

What it does
  • The site is stateless: no database, no way in. If the desk goes quiet the site keeps serving the last good read and says how old it is.
  • What is published is a deliberate subset — no sim runs, no veto log, no strategy internals. Adding a field is a publishing decision.
  • Visitor uploads (a chart, a trade) are left in a queue the desk collects; the desk's measurements come back through the same push.
Known weak
  • A single desk. If it is down, the whole read is down, and the honest thing the site can do is say so, which it does.
Next
  • A second, independent publisher check that alarms when the age passes seven minutes.
  • Every page on the site improved one step at a time, and this roadmap updated as each step lands.
12

Learn from the record

Predict, track, score, recalibrate: the loop the whole site exists for. Nothing here is a claim — it is a ledger, and the ledger decides.

What it does
  • Every model prediction, every gate verdict, every Deepwater call and every rule-bot signal is written before its outcome and scored after. Losers are published beside winners.
  • A post-trade reviewer reads closed trades and words what the measurements found; it is not allowed to soften a critical finding, and it is never in an order path.
  • The first pass through this loop found a contaminated record and a bot whose live ledger was its rules minus every setup another bot happened to share. Both were found by the ledger, not by anyone noticing.
Known weak
  • The loop is manual at the recalibration step, and the live records are still short.
Next
  • Scheduled recalibration and retraining, each with a before/after shown here.
  • A change log on this page: every improvement to a stage, dated, with the number it moved.

The order is the dependency order: a weak stage poisons every stage above it, which is why the data and the front month come first and the ledgers last. Improvements are made one stage at a time and measured at that stage before the next is touched.