# D48-XSMOM-28D-V2 training result

Completed: `2026-07-29T13:09:00Z`

## Decision

**STOP / NO-GO.** The registered V2 candidate failed the frozen training
performance gates. It was not run on the historical retrospective window and
must not proceed to fresh forward or small-capital trading.

Because standard Freqtrade result archives do not contain the complete
signal/order/active-state event ledger required for formal `PATH_DIVERGENCE`
episodes, the strict hypothesis disposition remains
`INCONCLUSIVE_FORMAL_PATH_EVIDENCE`. This evidence limitation cannot rescue the
candidate: its observable training performance is materially worse than the
baseline, so promotion is prohibited.

## Pre-PnL acceptance

- Production data versus independent reference: 48/48 exact comparisons.
- Corrected listing-aware data audit: 48/48 files readable, zero internal gaps,
  duplicates, or NaNs.
- Training raw signals: 4,075; retrospective raw signals: 2,442.
- Snapshot validity: 100% in each window.
- Pair common support: 97.276% training and 100% retrospective.
- Post-maturity scoreability: 100% overall and per pair in each window.
- Cold-start set: exactly 111 rows (EDGE 94, POWER 17).
- Cold-start raw-decision pass-through: 111/111; zero XSMOM changes.
- Remote real-strategy parity:
  - training baseline/no-op/candidate raw denominator: 4,075/4,075/4,075;
  - no-op retained: 4,075;
  - candidate retained: 1,449, exactly the registered coverage pass set;
  - retrospective denominator: 2,442; candidate retained: 790;
  - mismatches: zero in both windows.

The corrected manifest is
`data-audit-post-prepend-v1.1/data_manifest.json`. The previous v1.0 manifest is
retained as historical evidence but its POWER/EDGE maturity fields are
superseded.

## Frozen training sandwich

Run order:

```text
baseline A -> no-op -> candidate -> baseline B repeat
```

All four runs used the same remote Freqtrade 2026.6 image, production-mounted
config and data, 5m timeframe, `[2026-01-01, 2026-05-01)`, 0.00035 fee,
protections enabled, and cache disabled.

Baseline A, no-op, and baseline B repeat are identical:

- 331 normalized trades;
- +130.20015438 USDT / +13.0200%;
- PF 1.1121323;
- maximum drawdown 11.4039%;
- wallet SHA-256
  `af7c9318b20146b3841764604e2d3404e93ac4dfa0d3c462ac0a55fbea5aacee`.

## Candidate result

| Metric | Baseline | Candidate | Delta | Frozen gate | Result |
|---|---:|---:|---:|---|---|
| Closed trades | 331 | 287 | -44 | at least 70% retained | PASS (86.7%) |
| Net profit | +130.200 USDT | +46.803 USDT | -83.397 USDT | candidate >= baseline | **FAIL** |
| Net return | +13.020% | +4.680% | -8.340 pp | candidate >= baseline | **FAIL** |
| Profit factor | 1.1121 | 1.0468 | -0.0653 | candidate >= 1.1421 | **FAIL** |
| Max drawdown | 11.4039% | 12.4846% | +1.0808 pp | no more than +1.00 pp | **FAIL** |

The candidate contains only short trades, as does the baseline.

Arithmetic removal without rerunning portfolio slots remains unfavorable:

| Excluded PnL | Candidate minus baseline |
|---|---:|
| None | -83.397 USDT |
| EDGE | -76.469 USDT |
| POWER | -119.964 USDT |
| EDGE and POWER | -113.036 USDT |

Thus the negative result is not explained by either new-listing pair.

The result archive exposes 84 diagnostic `RESULT_PATH_DIVERGENCE` intervals,
83 completed. They are useful for debugging but are not the formal
`PATH_DIVERGENCE` evidence unit and do not count toward the contract minimum.

## Scope and safety

- No retrospective candidate PnL was run after the training failure.
- No production strategy or config was changed.
- The active dry-run bot was not stopped, restarted, or reconfigured.
- No fresh-forward or small-capital bot was started.
- Local archives are sanitized; every embedded `*_config.json` member was
  removed and verified absent. Raw archives remain only on the remote research
  host.

## Key artifact hashes

- V2 strategy:
  `5d727480fcb603704ea254a5dd56c9ac143d8476f74197fc65ce7b617fb18367`
- V2 math:
  `f405265e1eac519a34a26a3e99f31f34dabecb907721471205f731ce12993ff1`
- Corrected data manifest:
  `fff5cc00f18b67723e7cb84f5ec91ae28f3e1307394d2932662498dcc395b157`
- V2 coverage summary:
  `4938fa2d784f6ac242961d06a98070a66df5580ff7beee84f3933d1d6b20d3a3`
- V2 coverage rows:
  `439746aa2ad2b847a2139ceeef6e6034cdaab2d4d7371a8c7774446537189f5f`
- Sanitized attribution report:
  `03747b2194ce2d32553cd8b35e4909af8c3f0255d3f0d009dba2363fc50d7891`

