Lineage
Every specimen runs a numbered strategy version with its parameters written down. A new generation is a curated change with a stated reason, evaluated on its own period. Nothing here is produced by an optimiser, and a generation that performs worse than its parent stays on the record.
| Candidate | Changes | Datasets ahead | Typical | By chance | Standing |
|---|---|---|---|---|---|
| MOTH-002 | Confirm Bars | 6 / 10 | +0.21 | 75% | Not separable from chance |
| MOTH-003 | Max Extension | — | — | — | Untested |
| MOTH-004 | Exit Threshold | — | — | — | Untested |
| MOTH-005 | Trend Slow | — | — | — | Untested |
| MOSS-002 | Min Mean Slope | — | — | — | Untested |
| MOSS-003 | Min Mean Slope Vol | — | — | — | Untested |
| MOSS-004 | Exit Z | — | — | — | Untested |
| MOSS-005 | Stop Loss | — | — | — | Untested |
| ECHO-002 | Epoch Bars | — | — | — | Untested |
| ECHO-003 | Carry Across Epochs | — | — | — | Untested |
| ECHO-004 | Position Fraction | — | — | — | Untested |
| ECHO-005 | Breakout Exit Lookback | — | — | — | Untested |
Every figure here is the corpus result corrected for the 12 candidates tested against it. A candidate that fails keeps its slot, its parameters, its reason and its numbers; one that is supported is still not promoted, because evidence is not a decision.
First generation. Enter only when 12-bar momentum clears +1.2% and the 8-bar mean is above the 24-bar mean, so a single spike cannot trigger an entry on its own. The confirmation gate is open: one qualifying close is enough and there is no limit on how far price may have already travelled.
Not yet measured against random trading. This runs in the background after the candidate work.
Candidate MOTH-002 is recorded against this version. It has not been promoted; see below for what changed and how it did on bars this version was not read against.
First generation. Buy closes stretched 1.4 sigma below a 36-bar mean while RSI confirms weakness, release as price returns through the mean. The regime guard is open: it will buy a dip regardless of what the mean itself is doing.
Not yet measured against random trading. This runs in the background after the candidate work.
Candidate MOSS-002 is recorded against this version. It has not been promoted; see below for what changed and how it did on bars this version was not read against.
First generation. Rotate between three published rules every 72 bars using the run seed, so each rule accumulates its own trades under identical conditions. The rotation is fixed by the seed, not chosen by performance. Every open position is closed at the epoch boundary to keep that attribution clean.
Not yet measured against random trading. This runs in the background after the candidate work.
Candidate ECHO-002 is recorded against this version. It has not been promoted; see below for what changed and how it did on bars this version was not read against.
Candidate, not promoted. MOTH-001 commits on the first close that crosses its threshold. This requires momentum to hold above +1.2% for two consecutive closes and changes nothing else. It was originally written together with an extension limit, which meant no result could be attributed to either parameter; the two were split so each can be tested on its own. The value here is the one it was written with, not one read off a grid.
MOTH-002 was run against its parent on 30 held-out windows across 10 datasets, 385 parent fills against 330. It came out ahead on 16 of 30 decisive windows (median difference +0.21 points). Windows from one dataset share an instrument and their indicator history, so the test is taken over datasets: 6 of 10 went the candidate's way. A split at least that lopsided happens 75% of the time when a change does nothing at all, so this corpus does not separate it from chance. MOTH-002 stays a candidate.
Typical difference per dataset +0.21 points, 95% of resamples between -0.36 and 0.55. That range contains zero, so on this corpus MOTH-002 is consistent with making no difference at all.
With 10 datasets this corpus would have detected a consistent edge of about 0.41 points per dataset. It found none, so whatever MOTH-002 does is smaller than that — which is a bound on the effect, not proof there is none.
| Confirm Bars | return |
|---|---|
| 1 | -2.81 |
| 2 | -2.02 |
| 3 | -1.07 |
| 4 | -0.70 |
| 5 | -0.69 |
Across 5 settings the held-out return ranges from -2.81% to -0.69% (median -1.07%). MOTH-002 is not the best setting in its own grid: it lands below the median, and 4 settings did better. It beat its parent on this window, which the corpus below is a better judge of; that it beats the grid is not something this window shows. The grid is a diagnostic: no value here is selected, and MOTH-002 keeps the parameters it was written with.
Waiting for a held-out test. It runs once the current dataset has been replayed in full.
Candidate, not promoted. The other half of the change that was originally bundled into MOTH-002: refuse an entry when the close already sits more than 1.5% above the 8-bar mean, on the reasoning that the move has run before the signal arrived. Confirmation is left at the parent's setting so this parameter is the only thing that moves. A sibling of MOTH-002, not a successor to it.
Corpus evidence pending. 160 of 160 datasets fetched (115,248 bars); every candidate is scored on each of them once they land.
| Max Extension | return |
|---|---|
| 0.5% | -2.74 |
| 1.0% | -2.81 |
| 1.5% | -2.79 |
| 2.5% | -2.81 |
| 4.0% | -2.81 |
| off | -2.81 |
Across 6 settings the held-out return ranges from -2.81% to -2.74% (median -2.81%). MOTH-003 is not the best setting in its own grid: it lands above the median, and 2 settings did better. It beat its parent on this window, which the corpus below is a better judge of; that it beats the grid is not something this window shows. The grid is a diagnostic: no value here is selected, and MOTH-003 keeps the parameters it was written with.
Waiting for a held-out test. It runs once the current dataset has been replayed in full.
Candidate, not promoted. MOTH-001 waits for momentum to turn negative by 0.4% before leaving, so every exit is taken after the move has already reversed and the give-back is built into the rule. This releases while momentum is still positive but decaying, at +0.2%. The expected cost is leaving early in a move that pauses and resumes, which is the same move the parent is paid for.
Corpus evidence pending. 160 of 160 datasets fetched (115,248 bars); every candidate is scored on each of them once they land.
| Exit Threshold | return |
|---|---|
| -0.01 | -3.09 |
| -0.004 | -2.81 |
| 0 | -2.20 |
| 0.002 | -2.14 |
| 0.005 | -2.47 |
| 0.01 | -2.28 |
Across 6 settings the held-out return ranges from -3.09% to -2.14% (median -2.38%). MOTH-004 is the top cell, but only by 0.06 points in a grid spanning 0.95 points, alongside 2 settings within a quarter point. A margin that thin against the grid's own spread is not a ranking worth reading as a result. The grid is a diagnostic: no value here is selected, and MOTH-004 keeps the parameters it was written with.
| MOTH-001 | MOTH-004 | |
|---|---|---|
| Return | -2.81% | -2.14% |
| Max drawdown | -3.98% | -3.42% |
| Fills | 12 | 12 |
| Bars held | 81 | 57 |
| Fees paid | 59.09 | 59.33 |
Both versions ran the same engine over the same bars, from the same capital, with the same fee and slippage. A difference over one window of 288 bars is not evidence that the change works, so MOTH-004 stays a candidate and MOTH-001 keeps running.
Candidate, not promoted. MOTH-001 measures momentum over 12 bars and then filters it with a 24-bar mean, which is built from largely the same bars: the filter mostly agrees with the signal it is supposed to check. A 60-bar mean is far enough away to disagree. The expected cost is missing early turns, since a slower mean confirms later.
Corpus evidence pending. 160 of 160 datasets fetched (115,248 bars); every candidate is scored on each of them once they land.
| Trend Slow | return |
|---|---|
| 24 | -2.81 |
| 36 | -2.49 |
| 48 | -2.54 |
| 60 | -2.54 |
| 96 | -1.99 |
| 144 | -2.25 |
Across 6 settings the held-out return ranges from -2.81% to -1.99% (median -2.52%). MOTH-005 is not the best setting in its own grid: it lands below the median, and 5 settings did better. It beat its parent on this window, which the corpus below is a better judge of; that it beats the grid is not something this window shows. The grid is a diagnostic: no value here is selected, and MOTH-005 keeps the parameters it was written with.
| MOTH-001 | MOTH-005 | |
|---|---|---|
| Return | -2.81% | -2.54% |
| Max drawdown | -3.98% | -3.71% |
| Fills | 12 | 10 |
| Bars held | 81 | 69 |
| Fees paid | 59.09 | 49.26 |
Both versions ran the same engine over the same bars, from the same capital, with the same fee and slippage. A difference over one window of 288 bars is not evidence that the change works, so MOTH-005 stays a candidate and MOTH-001 keeps running.
Candidate, not promoted. MOSS-001 measures how far price has stretched from its mean but never asks what the mean is doing, so in a sustained decline it buys a level that keeps moving away from it. This changes one parameter: entries are refused while the 36-bar mean has itself fallen more than 3% over the last 36 bars. It narrows when an entry is allowed and adds no new signal. The expected cost is missing the genuine bottom, where the mean is always falling hardest.
Corpus evidence pending. 160 of 160 datasets fetched (115,248 bars); every candidate is scored on each of them once they land.
| Min Mean Slope | return |
|---|---|
| off | -0.76 |
| -8.0% | -0.76 |
| -5.0% | -0.76 |
| -3.0% | -0.76 |
| -2.0% | -0.76 |
| -1.0% | -0.76 |
| -0.5% | -0.76 |
Across 7 settings the held-out return ranges from -0.76% to -0.76% (median -0.76%). Every setting produced effectively the same result, so these bars do not separate them at all — the parameter does not bite on this window. The grid is a diagnostic: no value here is selected, and MOSS-002 keeps the parameters it was written with.
| MOSS-001 | MOSS-002 | |
|---|---|---|
| Return | -0.76% | -0.76% |
| Max drawdown | -1.54% | -1.54% |
| Fills | 9 | 9 |
| Bars held | 64 | 64 |
| Fees paid | 19.85 | 19.85 |
The change never triggered on these 288 bars: MOSS-002 produced exactly MOSS-001's trades, fills and fees. That makes this window inconclusive rather than level — it does not test the change either way, and MOSS-002 stays a candidate until a window arrives that does.
Candidate, not promoted. MOSS-002 asks the same question as this one but in fixed percent, and the corpus showed it untouched on half its windows: a 3% fall over 36 bars is routine on daily bars and almost unheard of on 15-minute bars, so the guard is dead at one timescale and dominant at another. This measures the same fall against the instrument's own volatility instead, which travels across both. The threshold is one standard deviation of the move, chosen for being the obvious unit rather than for anything it scored — the point of the change is that the guard engages at all, not that this number is better than another.
Corpus evidence pending. 160 of 160 datasets fetched (115,248 bars); every candidate is scored on each of them once they land.
| Min Mean Slope Vol | return |
|---|---|
| off | -0.76 |
| -300.0% | -0.76 |
| -200.0% | -0.76 |
| -150.0% | -0.76 |
| -100.0% | -0.76 |
| -75.0% | -0.76 |
| -50.0% | -0.76 |
Across 7 settings the held-out return ranges from -0.76% to -0.76% (median -0.76%). Every setting produced effectively the same result, so these bars do not separate them at all — the parameter does not bite on this window. The grid is a diagnostic: no value here is selected, and MOSS-003 keeps the parameters it was written with.
| MOSS-001 | MOSS-003 | |
|---|---|---|
| Return | -0.76% | -0.76% |
| Max drawdown | -1.54% | -1.54% |
| Fills | 9 | 9 |
| Bars held | 64 | 64 |
| Fees paid | 19.85 | 19.85 |
The change never triggered on these 288 bars: MOSS-003 produced exactly MOSS-001's trades, fills and fees. That makes this window inconclusive rather than level — it does not test the change either way, and MOSS-003 stays a candidate until a window arrives that does.
Candidate, not promoted. MOSS-001 holds until price is 0.2 sigma past its mean, which asks the position for an overshoot after the reversion it was bought for has already happened. This releases at the mean. The expected cost is giving up the overshoots that do arrive, which on a strategy this patient may be where the return lives.
Corpus evidence pending. 160 of 160 datasets fetched (115,248 bars); every candidate is scored on each of them once they land.
| Exit Z | return |
|---|---|
| -0.3 | -0.83 |
| -0.1 | -0.74 |
| 0 | -0.74 |
| 0.2 | -0.76 |
| 0.5 | -0.75 |
| 1 | -0.73 |
Across 6 settings the held-out return ranges from -0.83% to -0.73% (median -0.75%). MOSS-004 is not the best setting in its own grid: it lands above the median, and 3 settings did better. It beat its parent on this window, which the corpus below is a better judge of; that it beats the grid is not something this window shows. The grid is a diagnostic: no value here is selected, and MOSS-004 keeps the parameters it was written with.
| MOSS-001 | MOSS-004 | |
|---|---|---|
| Return | -0.76% | -0.74% |
| Max drawdown | -1.54% | -1.53% |
| Fills | 9 | 6 |
| Bars held | 64 | 47 |
| Fees paid | 19.85 | 19.85 |
Both versions ran the same engine over the same bars, from the same capital, with the same fee and slippage. A difference over one window of 288 bars is not evidence that the change works, so MOSS-004 stays a candidate and MOSS-001 keeps running.
Candidate, not promoted. MOSS-001 buys into falling prices by design and then allows an 8% loss before admitting the level did not hold, which is a wide stop for a rule whose entries are all into weakness. This tightens it to 5%. The expected cost is being stopped out of reversions that were going to work, since a stop that fires sooner fires more often on noise.
Corpus evidence pending. 160 of 160 datasets fetched (115,248 bars); every candidate is scored on each of them once they land.
| Stop Loss | return |
|---|---|
| 0.03 | -0.76 |
| 0.04 | -0.76 |
| 0.05 | -0.76 |
| 0.08 | -0.76 |
| 0.12 | -0.76 |
| 0.2 | -0.76 |
Across 6 settings the held-out return ranges from -0.76% to -0.76% (median -0.76%). Every setting produced effectively the same result, so these bars do not separate them at all — the parameter does not bite on this window. The grid is a diagnostic: no value here is selected, and MOSS-005 keeps the parameters it was written with.
| MOSS-001 | MOSS-005 | |
|---|---|---|
| Return | -0.76% | -0.76% |
| Max drawdown | -1.54% | -1.54% |
| Fills | 9 | 9 |
| Bars held | 64 | 64 |
| Fees paid | 19.85 | 19.85 |
The change never triggered on these 288 bars: MOSS-005 produced exactly MOSS-001's trades, fills and fees. That makes this window inconclusive rather than level — it does not test the change either way, and MOSS-005 stays a candidate until a window arrives that does.
Candidate, not promoted. Each rule gets few trades before the rotation moves on, so experiments run for 120 bars instead of 72 and nothing else changes. This was originally written bundled with a carry flag; the corpus rejected the bundle and the sensitivity grid showed the carry flag producing identical results at four of five epoch lengths, so the two were split and this is the half that moves anything.
Corpus evidence pending. 160 of 160 datasets fetched (115,248 bars); every candidate is scored on each of them once they land.
| Epoch Bars | return |
|---|---|
| 48 | -1.63 |
| 72 | -0.23 |
| 96 | -2.04 |
| 120 | -0.79 |
| 168 | -3.20 |
| 240 | -2.73 |
Across 6 settings the held-out return ranges from -3.20% to -0.23% (median -1.83%). ECHO-002 is not the best setting in its own grid: it lands above the median, and 2 settings did better. It did not beat its parent on this window either. The grid is a diagnostic: no value here is selected, and ECHO-002 keeps the parameters it was written with.
| ECHO-001 | ECHO-002 | |
|---|---|---|
| Return | -0.23% | -0.79% |
| Max drawdown | -1.64% | -2.57% |
| Fills | 17 | 23 |
| Bars held | 70 | 120 |
| Fees paid | 67.70 | 91.16 |
Both versions ran the same engine over the same bars, from the same capital, with the same fee and slippage. A difference over one window of 288 bars is not evidence that the change works, so ECHO-002 stays a candidate and ECHO-001 keeps running.
Candidate, not promoted. The other half of the bundle: an open position is carried into the next experiment rather than closed because the calendar said so. It costs clean attribution, since a trade can no longer be assigned to the rule that opened it, which was the boundary exit's whole purpose. The grid suggested it changes almost nothing at the epoch lengths tested, which is a reason to test it alone rather than a reason to assume it.
Corpus evidence pending. 160 of 160 datasets fetched (115,248 bars); every candidate is scored on each of them once they land.
| Carry Across Epochs | return |
|---|---|
| close | -0.23 |
| carry | -0.23 |
Across 2 settings the held-out return ranges from -0.23% to -0.23% (median -0.23%). Every setting produced effectively the same result, so these bars do not separate them at all — the parameter does not bite on this window. The grid is a diagnostic: no value here is selected, and ECHO-003 keeps the parameters it was written with.
| ECHO-001 | ECHO-003 | |
|---|---|---|
| Return | -0.23% | -0.23% |
| Max drawdown | -1.64% | -1.64% |
| Fills | 17 | 17 |
| Bars held | 70 | 70 |
| Fees paid | 67.70 | 67.70 |
The change never triggered on these 288 bars: ECHO-003 produced exactly ECHO-001's trades, fills and fees. That makes this window inconclusive rather than level — it does not test the change either way, and ECHO-003 stays a candidate until a window arrives that does.
Candidate, not promoted. ECHO trades more than either sibling and pays the most in fees, while committing 40% of equity to whichever rule the rotation happened to draw — a rule it has no reason to believe in, since the draw is seeded rather than chosen. Sizing at 25% matches the commitment to the confidence. The expected cost is a smaller share of whatever the rotation gets right.
Corpus evidence pending. 160 of 160 datasets fetched (115,248 bars); every candidate is scored on each of them once they land.
| Position Fraction | return |
|---|---|
| 0.15 | -0.09 |
| 0.2 | -0.11 |
| 0.25 | -0.14 |
| 0.4 | -0.23 |
| 0.5 | -0.29 |
| 0.6 | -0.29 |
Across 6 settings the held-out return ranges from -0.29% to -0.09% (median -0.19%). ECHO-004 is not the best setting in its own grid: it lands above the median, and 3 settings did better. It beat its parent on this window, which the corpus below is a better judge of; that it beats the grid is not something this window shows. The grid is a diagnostic: no value here is selected, and ECHO-004 keeps the parameters it was written with.
| ECHO-001 | ECHO-004 | |
|---|---|---|
| Return | -0.23% | -0.14% |
| Max drawdown | -1.64% | -1.03% |
| Fills | 17 | 17 |
| Bars held | 70 | 70 |
| Fees paid | 67.70 | 42.37 |
Both versions ran the same engine over the same bars, from the same capital, with the same fee and slippage. A difference over one window of 288 bars is not evidence that the change works, so ECHO-004 stays a candidate and ECHO-001 keeps running.
Candidate, not promoted. ECHO's breakout rule enters on a 20-bar high and leaves on a 10-bar low, so it demands a level of strength to get in and accepts half as much weakness to get out — the exit is twice as easy to trigger as the entry. This matches them. The expected cost is holding failed breakouts longer, which is exactly what the tighter exit was protecting against.
Corpus evidence pending. 160 of 160 datasets fetched (115,248 bars); every candidate is scored on each of them once they land.
| Breakout Exit Lookback | return |
|---|---|
| 5 | -0.23 |
| 10 | -0.23 |
| 15 | -0.23 |
| 20 | -0.23 |
| 30 | -0.23 |
| 40 | -0.23 |
Across 6 settings the held-out return ranges from -0.23% to -0.23% (median -0.23%). Every setting produced effectively the same result, so these bars do not separate them at all — the parameter does not bite on this window. The grid is a diagnostic: no value here is selected, and ECHO-005 keeps the parameters it was written with.
| ECHO-001 | ECHO-005 | |
|---|---|---|
| Return | -0.23% | -0.23% |
| Max drawdown | -1.64% | -1.64% |
| Fills | 17 | 17 |
| Bars held | 70 | 70 |
| Fees paid | 67.70 | 67.70 |
The change never triggered on these 288 bars: ECHO-005 produced exactly ECHO-001's trades, fills and fees. That makes this window inconclusive rather than level — it does not test the change either way, and ECHO-005 stays a candidate until a window arrives that does.
Every candidate is scored against its parent on all of this. Kraken serves roughly 720 bars at whatever interval is asked for and will not page further back, so depth comes from coarser bars and breadth from more instruments. They are all crypto and they move together, so the instrument count is worth rather fewer independent experiments than it looks; the timescale axis separates more than the symbol axis does.
| Bars | Instruments | Candles | Covering | Fetched |
|---|---|---|---|---|
| 15m | 40 | 28,848 | 26 Sept 2026 → 04 Oct 2026 | 04 Oct 2026 |
| 1h | 40 | 28,800 | 04 Sept 2026 → 04 Oct 2026 | 04 Oct 2026 |
| 4h | 40 | 28,800 | 06 Jun 2026 → 03 Oct 2026 | 04 Oct 2026 |
| 1d | 40 | 28,800 | 14 Oct 2024 → 03 Oct 2026 | 04 Oct 2026 |
Fetched 720 committed 60m bars from Kraken. Dropped 0 malformed, 0 duplicate, 0 gap(s) in the series.


