# Binance-only reconstruction The local generator uses only Binance inputs. It **does not exactly reproduce** the captured CoinGlass result. The frozen evaluation is `binance-reconstruction-evaluation.json`; its companion `.freeze.json` records input, generator, client, recipe, and evaluator hashes before the held-out targets were loaded. From the app directory, run the evaluator checks without loading targets: ```sh node scripts/verify-binance-reconstruction.mjs --self-test ``` Reproduce the frozen comparison with one command: ```sh npm run verify:binance ``` With no arguments, the evaluator uses the included boundary dataset and writes a unique `work/binance-recheck-.json` report inside the app directory. To choose an explicit new report path: ```sh node scripts/verify-binance-reconstruction.mjs \ --input data/research/binance-only-30d-boundaries.json \ --output references/binance-reconstruction-evaluation-rerun.json ``` The evaluator refuses to overwrite either a report or its freeze sidecar. It verifies the generator source and recipe against the included frozen manifest. It performs no network requests or parameter selection. Every run after the initial evaluation is labeled a **reproduction**, not a fresh holdout. ## Frozen recipe For each completed 15-minute candle, calculate the change between its opening and ending Binance OI observations. Compare that change with the mean absolute OI change over the previous 12 candles. A change above 0.5 times that mean creates 100× and 50× levels; a change above 5 times the mean also creates a 25× level. The first 12 candles are warmup. Each level has size `round(quoteVolume / open, 2)`. A close at or above the open produces long levels; a lower close produces short levels. Price is `open × (1 − 1/leverage)` for longs or `open × (1 + 1/leverage)` for shorts. The first subsequent Binance trade-candle high/low touch closes the level. The recovered public client then computes the 520-row grid, CLLD, zones, key levels, and retrospective pivots. The OI gate is an inference frozen from the derivation period. It is **not recovered CoinGlass server code**. Differences in the server's upstream candle/OI sampling and remaining rule differences have not been separated. ## Held-out result The comparison contains 2,999 closed candles, from September 30, 2026 at 10:45 UTC through October 31 at 16:15 UTC. Indices below 2,400 were used for derivation; the last 599 candles were reserved for this frozen evaluation. Target levels ending outside the closed-candle crop remain open in the comparison. The captured snapshot had previously been used for a separate client replay, so this is a chronological holdout for this generator rather than a wholly unseen research dataset. | Held-out check | Result | |---|---:| | Births | 187 matched, 4 extra, 9 missed | | Birth precision / recall | 97.91% / 95.41% | | Level identities: candle, side, leverage | 388 matched, 8 extra, 18 missed | | Exact prices on matched levels | 368 / 388; mean error $0.00515 | | Exact Float32 sizes on matched levels | 341 / 388; mean error 0.07641 | | Exact sweep state and endpoint on matched levels | 388 / 388 | | Exact arrow timestamp and side | 1 / 1; only one reference arrow | Across the whole window, 12 of 13 reference arrows match exactly, with 16 arrows predicted. Allowing a one-candle timing tolerance adds no matches. This is arrow correspondence, not trading accuracy. Held-out normalized CLLD RMSE is **50.216**. The last predicted value is **−474.885**, versus **−549.512** in the reference. No scale or offset was fitted: each result uses the recovered client's own active-grid normalization. The report also contains raw CLLD errors and every aligned curve point. The original research level generator, evaluated through the same recovered client, has held-out normalized RMSE 275.231; that baseline does not use its old display normalization, decay, or confirmation-arrow logic. At the shared final endpoint, all six zone centers match within the declared 50-basis-point tolerance, with mean interval overlap of 0.931. **None of the six zones matches every compared value exactly.** Final zones include earlier levels and are not partitioned by birth date. ## Timing and scope Levels are anchored to candle-open timestamps, but candle volume and ending OI are only available after the candle closes. Historical OI timestamps do not establish publication latency. Arrows use the recovered client's retrospective whole-window threshold and pivot timestamps; later data can change them. After the first evaluation, a validation-only fix made the generator respect the earliest recorded cutoff, including `comparisonCutoff` and `serverTime`, instead of using only `fetchedAt`. The original report and freeze are preserved with the `-initial` suffix. The corrected reproduction checks that the generated payload hash and every comparison metric remain unchanged. This fix does not create a new unseen evaluation. The report is valid only for its recorded input, generator, and client hashes. The frozen recipe was not tuned after the held-out result was revealed. The 3-day and 7-day captures remain unevaluated because matching 1-minute and 3-minute Binance inputs were not prepared.