Home › Documentation › Edge discovery
Discovery

Atomic Edge Scanner

The Lab combines conditions blind (an odometer of millions of combinations). The Scanner does the opposite: it measures the statistical edge of EVERY single condition on its own, before combining them. Like a scout rating each player before picking the team.

Menu Strategies → Atomic Edge Scanner. Because it does not combine, its cost is linear (it does not explode): which is why it can afford to look at everything.

How it measures the edge

Every time a condition fires (e.g. RSI(14) < 30), it looks at the price return N bars later (the horizon). From all those occurrences it computes:

Avg. return — how much

The average move expected after the signal. Its sign gives the direction: positive → Long, negative → Short.

% Positive — how often

The hit frequency: what % of the signals was followed by a positive return.

t-stat — do I believe it?

The reliability: mean ÷ standard error. It tells a REAL edge from chance. |t| > 2 = unlikely to be luck.

No. of signals — sample

How many times it fired. Below the configurable minimum it does not score (a guardrail against mirages).

AQ Edge Score (0–100)

The module's compass. It combines the three things and boils them down to one grade:

Significance · 50%

The t-stat, deflated by the multiple-testing bar.

Consistency · 30%

The % of hits on the side you are betting.

Sample · 20%

More signals, more reliable.

🛡️

The multiple-testing bar. When you scan thousands of conditions, some look good out of pure chance. The Score discounts the maximum t-stat that luck alone would produce from so much testing (≈ √(2·ln N), as in PBO/DSR). A condition only scores high if it beats what chance would produce.

🧪 Example — why a «good» t-stat is sometimes not enough

You scan 4,000 conditions on daily @ES. The multiple-testing bar is the high hurdle a t-stat must clear not to be chance:

bar = √(2 · ln 4000) = √(2 · 8.29) ≈ 4.07
SMA(Open,30) > SMA(High,35)

348 signals · +0.43% average · 68.7% hits · t = 5.80. It clears the bar (5.80 > 4.07), with a broad and consistent sample → Score ≈ 82. A real edge.

RSI(14) < 12

28 signals · +0.9% average · t = 3.1. It looks good… but it does not clear the bar (3.1 < 4.07) and the sample is thin → low Score. Most likely luck from so much testing.

The moral: with thousands of tests, |t| > 2 is no longer enough. The Score demands beating a hurdle that rises with the number of conditions scanned — which is why it rewards a large sample so heavily (much harder to fake).

Per-indicator setup

A master-detail panel: you tick indicators in the list and, on selecting one, adjust its source, period (fixed/range), operators (> < = ↑ ↓) and threshold in the top bar.

The Threshold toggle decides how it is scanned: on → against a value (RSI < 30); off → as a level, crossed against other series (SMA > Close).

From the edge to the strategy

Sort the ranking by AQ Edge Score, select the best bricks and press Create template: it seeds the Lab with them, already parameterized.

That way the Lab stops combining noise — it starts from bricks with a proven edge.

Direction: L+S / Long / Short

In markets with an upward drift (equities) almost the whole ranking comes out Long — the Short edges get buried. The direction selector filters during the scan (not afterwards), so the Top-N fills up only with the chosen direction.

Short gives you the best bearish edges ranked; L+S = no filter. It fits the Lab's future Long+Short with separate patterns.

Directional return (P&L)

Everything is shown as the trader's profit, not as a price move: on a Short, the price falling is winning. A short entry at 1980 covered at 1861 = +6.01%.

Avg. return, t-stat, % Pos., equity and seasonality all come out already oriented by the edge's direction.

Number of results

You choose how many conditions the ranking keeps: 2,000 by default, up to 100,000. The engine is streaming, so keeping more does not blow up memory — only the table gets heavier.

Raise the cap when you want an exhaustive sweep (to seed the Lab or save a catalog); lower it for a nimble view of the elite.

Result in $

Besides the %, each edge is translated into money: $ = return × entry price × point value of the symbol (1 contract, no costs). Columns $ / trade and $ total.

The point value is taken from the symbol's record (@ES = 50, @NQ = 20…). With no record it is 1 and $ = points. Summed exactly signal by signal — it ties out with the detail.

Out-of-Sample filter

With the toggle on, the sweep keeps only the edges that persist out of sample: it splits the history at the In-Sample % you set and requires the edge not to flip in the OOS stretch (with enough sample).

It is applied inside the scan (not afterwards), so the Top-N fills directly with robust candidates, not with mirages from the first half. Note: the IS % does not trim the figures — the $ and the signals always cover the whole history; the % only marks the cut for the persistence test. The ranking is by Edge Score (not by $), which is why «the best one» can change when you turn the filter on.

📏
The bar and the measurement, on the same bars

The Edge Score is a subtraction: what the rule gives minus what the market was giving anyway. For that subtraction to mean anything, both numbers have to come from the same bars. If the bar discarded the bars with an impossible price and the measurement did not, you would be subtracting two figures computed on different populations — and that means nothing. Which is why both set aside exactly the same ones.

It only happens on back-adjusted series with prices ≤ 0. On @ES, @NQ or @GC it changes absolutely nothing. Where it does change, it changes for real: on the 15 edges of a crude oil continuous, each one lost between 6 and 102 signals that should never have been counted. The fix is in both engines, CPU and GPU.

⚠️ With a series like that, do not compare an Edge Score against one you wrote down before reviewing the data: if the file changed, the figure is not measuring the same thing.

Atomic Edge Analysis

Double-click a row (or Enter) to open a window that X-rays that edge live: with it open, a single click or the ↑/↓ arrow keys refresh it instantly. You can also pick the Symbol and Timeframe from the Scanner itself (the TF list adjusts to the symbol's valid ones).

🧺 Edge DNA — a robustness ID card

One glance and you know whether to trust the edge: an overall Confidence (0–100) with a grade, stars and a verdict — ROBUST / MODERATE / FRAGILE — with the dimensions shown as bars and a radar (the edge's «fingerprint»):

Significance (real or chance?) · OOS persistence (does it hold out of sample?) · Time persistence (does it hold across the years?) · ±1 bar robustness (does it survive entering 1 bar earlier/later, or is it fragile / looking into the future?) · Anti-outlier spread (does it win evenly or off a handful of huge trades?) · Consistency (% hits) · Sample. It does not just find the pattern: it tells you what kind of pattern it is.

🧠 Analyze with AI: a button sends the whole ID card to Claude, which returns a diagnosis in plain prose about the nature of the edge, its own confidence (0–100), strengths, risks and a recommendation (combine, filter, validate further, discard...). It needs the API key in config.json.

Trades + Profitability

The list of signals one by one (entry / exit / return / $), sortable by no., return or $ and navigable with the keyboard (↑/↓), plus the cumulative return curve with the In-Sample / Out-of-Sample cut line. The % / $ toggle shows every profitability chart (equity, horizon and seasonality) in percent or in money.

Multi-horizon profile

Average return and % positive at 1, 2, … N bars (configurable bar). It reveals where the edge lives: whether it pays on day 1 and fades, or builds up over time.

Seasonality

Trades and profitability by month, day of the week and year (Average / Sum switch). To see whether the edge clusters in certain periods.

In-Sample / Out-of-Sample robustness

It splits the history (configurable cut, e.g. 70/30) and compares the edge in sample vs out of sample, with a verdict: it holds / weak / it does not hold. What separates a real edge from an overfitted mirage.

Time stability — does the edge last?

It answers the question hardly any software answers: is this edge still alive, or has it been dead for years? It works in edge (t-stat), not in money — so it discounts the sample-size effect (a year with 300 weak signals does not fool it).

  • Edge (t-stat) by year or by block: the edge of each period. You can group by calendar year or into blocks with an equal number of signals (a fair comparison; each block is labeled with the years it spans). Changing the number of blocks re-cuts the same history at more or less resolution (like the candle width): more blocks = smaller, noisier pieces. Periods with fewer than 10 signals are dimmed (thin sample, low reliability).
  • Rolling edge: a moving average of the return over time (configurable window). At a glance you see whether the edge is growing, holding or fading out.
  • Durability verdict: DURABLE / ERRATIC / DECLINING / TOO LITTLE HISTORY, depending on how many periods had a positive edge and on whether the edge of the recent years holds up against the old ones.

This is the confidence axis: it tells a structural, durable edge from a stroke of luck concentrated in a couple of years. It complements the single IS/OOS cut with a continuous movie.

🧺 Save to the Library — every discovery, an asset that accumulates

Every scan used to be ephemeral: you found a gem, looked at it, and closing the window lost it. Next to the DNA, the 🧺 Save to Library button files the edge away with its full genome (DNA + AI verdict + monthly return vector + executable recipe), so you can come back to it, compare it, correlate it and build baskets. → The whole module — gallery, record card, correlation map and AI Advisor — is explained in depth, with examples, in the Edge Library section.

🔬
Pairwise refinement

Select an edge (click a row) and press Refine: AniQuant looks for the second condition B that boosts that edge the most when combined as A∧B (both firing on the same bar, evaluated only where A already fires → fast). It returns the ranking of pairs by the combo's Edge and the boost = Edge(A∧B) − Edge(A) — at a glance you see how much it improves: 55 → 72. From there, seed the Lab with A∧B already combined. It is the bridge between the atomic edge and the strategy: guided combination, not brute force.

Seed A∧B template does not run a backtest here: it takes the chosen pair and opens the Strategy Lab already loaded with that strategy (entry = A and B on the same bar, in the combo's direction). That is where you add the exits (Stop/Take/opposite signal), backtest it properly (costs, In-Sample/Out-of-Sample), combine it with more conditions or send it to Portfolio / Walk-Forward. You discover in the scanner and cook in the Lab — and you save yourself rebuilding by hand what you have just found.

🌍
Multi-market robustness

Tick a basket of markets in the settings panel, scan the main symbol and press Validate basket: AniQuant re-evaluates the best edges on every market in the basket. The Markets column shows «6/8» = on how many markets the edge holds up (same direction as the main one + |t-stat| ≥ 2 + enough sample). Press the cell's «6/8» button → breakdown by market (with Profit $ per market; a movable, resizable window). An edge that works on 6 out of 8 markets is gold; one that only shines on a single chart is close to noise — this is the best antidote to overfitting there is.

The model is discover on the main one, validate on the basket: the best of the ranking are validated (up to 5,000), each market at its native timeframe. Re-sort by the Markets column to see the universal edges first.

⚡
GPU acceleration

The sweep is massively parallel (each condition is independent), so it can run on the GPU via OpenCL. Turn on the GPU toggle and compare with the Elapsed stopwatch: typically tens of times faster (millions of conditions in a blink). The CPU remains the source of truth: the kernel works in double precision to give exact parity, and if the GPU is not available it falls back to CPU alone. The Debug toggle dumps the ranking to disk (edge_debug_CPU/GPU.txt) so you can cross-check both engines.

Summary by indicator

For every indicator scanned it saves its best condition = its optimal parameters + Edge Score + internals. The optima come free from the ranking.

It merges

Each Save catalog updates the indicators just scanned and keeps the rest. That is how you build the market's full record little by little.

Viewer / manager

Menu Strategies → Edge Library: it lists the catalogs, opens their record, deletes them, or creates a template from the saved catalog.

💎
The badge in the Lab

When you open the Lab on a market with a saved catalog, each indicator in the list shows a badge with its Edge Score (green/amber/red) and its best setup in the tooltip. You see at a glance which indicators are worth it here, without leaving the Lab.

The full circle

Scan → rank edges → Create template (best bricks → Lab)
   → Save catalog (Edge Library by market+TF)
      → badge in the Lab (what works here)

Try it yourself

AniQuant can be tried free for 30 days, with every module and no card.

← Previous
AI strategy analysis
Next →
AQ Pattern Miner: historical analogy
More in Edge discovery