# BTC Macro Elliott Demo Guide

`ElliottWaveBtcMacroCycleDemo` is now the BTC reporting wrapper over the unified core Elliott engine. The historical BTC macro study and the live BTC preset no longer rely on a preferred demo-local interpretation path.

## What you can run

- Historical truth-set validation:
  - uses the ossified BTC daily dataset plus the locked BTC anchor registry
  - scores the candidate profiles against the major macro turns
  - emits the macro-cycle JSON report and regression chart
- Live BTC preset:
  - uses only the `BarSeries` you provide at runtime
  - infers the current-cycle start from that supplied window alone
  - emits the current-cycle JSON summary plus the base case and alternate charts

## Canonical entrypoints

- Generic canonical demo:
  - `ElliottWaveMacroCycleDemo`
  - owns the series-native historical study, live preset, and shared chart/report rendering flow
- Stable BTC wrapper:
  - `ElliottWaveBtcMacroCycleDemo`
  - keeps fixed BTC resources, default filenames, and BTC-oriented entrypoints for users and regression tests
- Calibration and compatibility harness:
  - `ElliottWaveAnchorCalibrationHarness`
  - owns truth-target scoring, routine/targeted calibration artifacts, and the temporary legacy anchored comparison path

The important line is that the legacy-anchored study is no longer a first-class runtime demo. If you need legacy-versus-canonical comparison, use the harness artifacts rather than treating the old anchored path as a second production engine.

## What stays the same

- The BTC demo still writes the same chart/report artifacts.
- The live preset still keeps compatibility with the existing file naming and reporting flow.

## Which entrypoint to use

- Use `ElliottWaveBtcMacroCycleDemo` when you want the fixed ossified BTC dataset, the locked BTC truth registry, and the stable BTC artifact names.
- Use `ElliottWaveMacroCycleDemo` when you already have a `BarSeries` and want the canonical historical study or live preset without BTC-specific resource loading.
- Use `ElliottWaveAnchorCalibrationHarness` when you are calibrating, benchmarking, or comparing canonical output against the committed BTC truth target.

## What changed

- Historical anchor-to-anchor fits and live current-cycle fits now come from the same core-ranked Elliott logic.
- The BTC truth set is the regression guardrail for the core engine, not a second “smarter BTC-only engine.”
- The preferred BTC answer is no longer a legacy local-structure path. If the wrapper remains, it is there to load BTC resources, choose the prevalidated default profile, and render outputs.

## BTC truth target

The BTC anchor registry is now a calibration asset, not a runtime input. It encodes the committed macro truth target the canonical engine must learn to reproduce from price alone.

- Reference early segment:
  - `2011-06-09` top
  - `2011-11-18` low
  - calibration-only evidence, not production runtime structure
- Accepted validation cycle turns:
  - `2013-11-30` top, expected `WAVE5`
  - `2015-08-19` low, expected `CORRECTIVE_C`
  - `2017-12-18` top, expected `WAVE5`
  - `2018-12-16` low, expected `CORRECTIVE_C`
- Holdout cycle turns:
  - `2021-11-11` top, expected `WAVE5`
  - `2022-11-22` low, expected `CORRECTIVE_C`

The harness resolves broad committed registry windows against the ossified BTC daily dataset, then converts the distance from the resolved extremum to each window edge into `toleranceBefore` and `toleranceAfter`. That keeps acceptable match windows pinned to the committed truth target instead of drifting via runtime heuristics.

## Runtime contract

- Runtime historical decomposition must not depend on the BTC anchor registry.
- Live current-cycle analysis must not depend on the BTC anchor registry.
- `ElliottWaveMacroCycleDemo` is the canonical runtime controller/view surface.
- `ElliottWaveBtcMacroCycleDemo` may remain as a thin BTC convenience wrapper, but it must not own distinct structure inference logic.
- The registry is valid only for:
  - offline calibration
  - offline regression
  - holdout scoring
  - debugging and evidence output
- If a runtime chart or report needs anchors to decide structure, that path is still not the canonical engine.

## Maintainer note

- Treat the BTC anchor registry and ossified BTC dataset as validation assets for core Elliott behavior.
- When changing Elliott ranking, swing preservation, or current-cycle fitting, rerun the real BTC macro regression and compare:
  - selected profile / hypothesis
  - accepted historical cycles / segments
  - current wave
  - phase and structural invalidation output
- Historical truth-set validation answers “does core still explain the locked BTC cycle turns?”
- Live runtime analysis answers “what does the unified core engine infer from the bars supplied right now?”
- Prefer these operating modes when validating changes:
  - `--targeted` for fast BTC window checks
  - `routine` for the default full-history BTC sanity lane
  - `--exhaustive` only when you explicitly need the broader profile search and portability sweep

## Release validation

Before shipping changes that touch the canonical macro-cycle flow, rerun both the focused BTC regression slice and the quiet full build:

```bash
mvn -q -pl ta4j-examples -am -Dsurefire.failIfNoSpecifiedTests=false \
  -Dtest=ElliottWaveBtcMacroCycleDemoTest,ElliottWaveMacroCycleTruthTargetScoringTest,ElliottWaveMacroCycleDetectorTest,ElliottWavePresetDemoTest \
  test

scripts/run-full-build-quiet.sh
```

The focused slice proves truth-target recovery, canonical historical/live reuse, and chart/report persistence. The quiet full build is the production gate.
