# BTC6H revisit: fragility and higher-low entries — September 21, 2026

The raw-score fragility flag is a poor standalone proxy for execution sensitivity
under the tested perturbations. Its rejection of hybrid9090 is not supported by
the small-perturbation execution test. The three-bar higher-low entry gate improves
drawdown and Calmar against the corrected incumbent, but still fails walk-forward
coverage. Neither finding authorizes promotion or changing existing requirements.

The two studies ran in the requested order under the [frozen protocol](mlp_revisit_protocol_2026_09_21.md).
No weights, winner, production parameter, promotion rule or Pine file changed.

## 1. Fragility diagnostic

The fixed sample comprises ten flagged and ten unflagged configurations from each
of the ten prior models (200 centers), plus eleven distinct reference cases: the
frozen incumbent and the previously best-ranked configuration for each model.
RNG seed 20260921 and exact configurations were saved before replay. Every center
received the same twelve perturbations: each of three score thresholds shifted
separately by -1, -0.05, +0.05 and +1. The 211 centers and 2,532 perturbations
produced 2,743 retained rows. Perturbed rows are diagnostics, not a candidate pool.

The tables below use only the stratified sample; the eleven extra reference cases
do not contribute. Each cell counts configurations with at least one changed
executed entry/exit in IS across the six perturbations at the specified magnitude.

| Original flag | Sample size | Trades changed at ±0.05 | Trades changed at ±1.0 |
|---|---:|---:|---:|
| Flagged | 100 | 9 | 51 |
| Unflagged | 100 | 2 | 41 |

At ±0.05, the confusion table is 9 true positives, 91 false positives, 98 true
negatives and 2 false negatives, with “positive” defined as any execution change.
These terms describe this experiment's operational definition, not universal
truth about model robustness. Small execution changes need not change performance
materially. Conversely, zero flags do not guarantee unchanged actions.

| Original flag | Material change at ±0.05 | Material change at ±1.0 |
|---|---:|---:|
| Flagged (100) | 1 | 44 |
| Unflagged (100) | 2 | 34 |

“Material” was defined before replay as at least 1 percentage point absolute
return or drawdown change, or 0.05 absolute calendar-Calmar change. Both improvements
and deterioration count. Compounded full-history return is sensitive to small
path changes, so raw deltas accompany this deliberately simple diagnostic.
Per-model denominators and all four confusion tables are in `fragility/audit.json`.
These correlated, stratified, already-selected histories do not estimate the
population false-positive rate or prove statistical significance.

### Hybrid9090 reference case

The frozen near miss retains 31.8726% drawdown and 1.0760 Calmar. Its two original
proximity events concern confirmation threshold -730:

| Timestamp | Raw score | Executed entry/exit on this or the next two bars |
|---|---:|---|
| 2018-01-26 00:00 | -729.988283 | None |
| 2019-02-09 12:00 | -730.012458 | None |

The policy uses a three-bar exit smoothing window. All six ±0.05 perturbations
leave the complete IS and OOS action and return paths unchanged. Moving confirmation
from -730 to -731 also leaves the complete paths unchanged but changes the fragility
count from two to zero and changes the recorded promotion predicate from false to
true. This is evidence that the current veto can distinguish two parameter settings
with identical historical execution. The shifted setting was **not selected,
promoted or saved as a replacement**.

At the wider ±1.0 scale, only entry threshold +1 changes this case's path: two IS
action bars, 33 position bars and 34 return intervals differ, starting August 28,
2025. IS return rises 23.8098 percentage points, Calmar rises 0.010595, drawdown
is unchanged, and OOS actions/returns are unchanged. Thus the original two proximity
events do not identify the threshold that actually changes execution here.
The frozen incumbent has no execution changes at either tested scale.

Characterization tests establish two mechanisms: an unused confirmation threshold
can trigger the raw flag without changing trades; smoothed crossings can change
trades at ±0.05 even when no raw score is within 0.05 of any threshold. The existing
flag also counts pre-trading-window scores. Event diagnostics preserve window
membership, smoothing and confirmation state; no new fragility definition is installed.

## 2. Higher-low entry gates

Exactly three fixed candidate policies were replayed on the unchanged incumbent
weights, thresholds, confirmation and stops. A confirmed higher low enables entries
until a confirmed lower high disables them; lower highs do not add exits. Widths
2, 3 and 4 are the original tested symmetric pivot widths, with no retuning.

| Policy | IS return | Maximum drawdown | Calendar Calmar | Entries | Qualifying WFO folds |
|---|---:|---:|---:|---:|---:|
| Frozen incumbent | 2,846.94% | 50.50% | 1.00449 | 59 | 2 |
| Higher-low width 2 | 1,913.13% | 43.54% | 1.00857 | 52 | 1 |
| Higher-low width 3 | 1,596.66% | 37.21% | 1.10101 | 52 | 1 |
| Higher-low width 4 | 2,189.59% | 45.12% | 1.02358 | 53 | 1 |

All three improve measured Calmar and drawdown while reducing return. Width 3
passes every preserved candidate condition except WFO eligibility. Widths 2 and 4
also fail the 40% drawdown limit. All have zero OOS entries and exposure; there is
no positive later-period validation. None qualifies.

The trade-count gate requires ten entries in at least two WFO folds. Each candidate
has ten entries in 2023, but only 9/8/9 respectively in January–September 2024,
versus the incumbent's eleven. The remaining folds are below the floor. They were
not discarded from measurement: the late-2025–February-2026 fold loses 14.32%,
14.32% and 12.73% respectively. `WFO_Neg_Folds=6` is the existing insufficient-
coverage sentinel here, not six measured negative folds.

## Judgment and stopping point

Keep hybrid9090 and the width-3 entry gate as unresolved research candidates rather
than describing them as uniformly inferior. The fragility veto warrants a separate,
predeclared evaluation of execution-based sensitivity across models, with rules
chosen independently of rescuing hybrid9090. This experiment does not choose a
replacement gate or justify removing robustness requirements. Higher-low width 3
still needs adequate independent trade coverage. Do not widen the search or reduce
the WFO floor to force an outcome.

These are retrospective results on the same captured historical input as the prior
comparison. Accounting/source/data identities match that comparison. Historical
saved-return discrepancies, publication-vintage limitations, fresh TradingView
parity and untouched forward evidence remain unresolved. No forward deployment or
new search followed these studies.

## Verification and reproduction

Both parameter/Pine preflights passed. The disabled entry gate exactly matched the
canonical baseline actions, return stream and all evaluator metrics. Prefix tests
cover all three gate widths. Six new tests cover deterministic balanced sampling,
disabled-confirmation and smoothed-crossing counterexamples, disabled-gate equality,
prefix causality, initial-loss/carry-in accounting, and corrupt-trace rejection.
The fast suite passed **242 tests, with 2 slow tests skipped** and three existing
warnings. Focused verifier tests passed after its final action-reconstruction addition.

`tools/verify_mlp_revisit.py` independently reconstructs accounting arithmetic and
regenerates actions from the frozen parameters using the canonical signal engine.
It verified all 2,743 fragility rows (27,430 period measurements), all four entry-gate
rows (40 period measurements), all recorded fragility sensitivity counts and the
original proximity labels. This is independent arithmetic, not an independently
implemented execution simulator. Both studies preserved all **941 protected hashes**.

Implementation review used the ce-simplify-code and ce-code-review rubrics sequentially
in the main thread under the repository's tool mapping. No independent model review
ran. The local review found no remaining blocker; detailed coverage is in the evidence
root's `review.md`. No production/runtime behavior changed.

Evidence root: `results/mlp_experiments/revisit_2026_09_21/`. Each child directory
contains manifests, protected/reference hashes, full results, verification and audit
receipts. Fragility has compressed full action/return traces per center, the frozen
sample, event records and all pairwise deltas. Entry gates have full bar CSVs.

```bash
.venv/bin/python tools/run_mlp_revisit.py fragility --output /tmp/mlp-fragility-revisit
.venv/bin/python tools/verify_mlp_revisit.py /tmp/mlp-fragility-revisit
.venv/bin/python tools/run_mlp_revisit.py entry-gates --output /tmp/mlp-entry-gate-revisit \
  --prior-fragility /tmp/mlp-fragility-revisit
.venv/bin/python tools/verify_mlp_revisit.py /tmp/mlp-entry-gate-revisit
```

Use new output directories; the runners refuse nonempty ones. Source or input drift
aborts the comparison. The complete evidence is preserved in
`results/research_checkpoint_2026_09_21/mlp_revisit_2026_09_21.tar.xz`, with member hashes
in `revisit_manifest.json`. Extract from the repository root to restore the evidence.
