Published with frozen evidence.
The receipt binds the published result to the verified evidence snapshot and keeps its original limitations visible.
- Receipt
- assay-001-spot-grid-btc-eth-2026h1-v1
- Markets
- BTC/USD and ETH/USD
- Accounts
- 4
- Result
- 4 negative
- Evidence state
- Frozen
- Publication
- 3 July 2026
What the receipt binds.
- Evidence root
~/assay-evidence/teardown1/- Evidence engine commit
a88bf0d738f2a1dc037785b5ee1da6410e6a306e- Evaluation window
- 1 January to 30 June 2026, H1
- Markets
- BTC/USD and ETH/USD
- Original manifest
SHA256SUMS- Manifest SHA-256
ae05eadbbb75f865d9ac7ac2ffa114011c9cdae2ef3abec8b53e4c2418e3ca25- Manifest verification
- All 16 listed files passed on 2 July 2026
- Engine purpose
- Deterministic spot-grid generator and Assay data engine
The original manifest stores absolute Mainframe paths, and keel_commit.txt was not included in that manifest. The receipt records both limitations rather than silently repairing the frozen snapshot.
Four accounts. Four negative outcomes.
| Configuration | Completed cycles | Open tranches | Full-account net total | Verdict |
|---|---|---|---|---|
| BTC 25-grid | 107 | 24 | −43,108.5014 bps | negative_after_costs |
| BTC 50-grid | 423 | 49 | −106,623.6450 bps | negative_after_costs |
| ETH 25-grid | 74 | 24 | −60,817.9748 bps | negative_after_costs |
| ETH 50-grid | 319 | 48 | −135,484.1469 bps | negative_after_costs |
Closed cycles often looked profitable. The whole-account result changed once unsold inventory was marked and liquidated at the final close.
Inspect the sealed record.
Open the article, measured account timeline and public verification records attached to this receipt.
The frozen test frame.
- Grid spacing
- Arithmetic
- Grid counts
- 25 and 50
- Entry
- One tranche per downward line crossing
- Exit
- One grid line above entry
- Initial inventory
- None
- Range selection
- Realised low and high, selected with hindsight
- Cost model
- 40 bps fee per side, 2 bps spread and 1 bp slippage per side
- Final treatment
- Open inventory liquidated at the last close
Price paths use public Binance H1 klines while fees use Kraken assumptions. This is a venue-representative path assumption, not a reconstruction of Kraken execution.
Show reproduction commands
These commands reproduce the generator and verdict stages from the retained candles without overwriting the frozen snapshot.
repo="$HOME/keel"
evidence="$HOME/assay-evidence/teardown1"
out="$HOME/tmp/assay-001-reproduction"
rm -rf "$out"
mkdir -p "$out"
cd "$repo"
.venv/bin/python -m app.assay.gridgen run --candles "$evidence/candles_h1.json" --lower 58115.01 --upper 97924.49 --grids 25 --spacing-mode arithmetic > "$out/fills_g25.json"
.venv/bin/python -m app.assay.gridgen run --candles "$evidence/candles_h1.json" --lower 58115.01 --upper 97924.49 --grids 25 --spacing-mode arithmetic --no-liquidate > "$out/fills_g25_cycles.json"
.venv/bin/python -m app.assay.gridgen run --candles "$evidence/candles_h1.json" --lower 58115.01 --upper 97924.49 --grids 50 --spacing-mode arithmetic > "$out/fills_g50.json"
.venv/bin/python -m app.assay.gridgen run --candles "$evidence/candles_h1.json" --lower 58115.01 --upper 97924.49 --grids 50 --spacing-mode arithmetic --no-liquidate > "$out/fills_g50_cycles.json"
.venv/bin/python -m app.assay.gridgen run --candles "$evidence/eth_candles_h1.json" --lower 1505.68 --upper 3402.89 --grids 25 --spacing-mode arithmetic > "$out/eth_fills_g25.json"
.venv/bin/python -m app.assay.gridgen run --candles "$evidence/eth_candles_h1.json" --lower 1505.68 --upper 3402.89 --grids 25 --spacing-mode arithmetic --no-liquidate > "$out/eth_fills_g25_cycles.json"
.venv/bin/python -m app.assay.gridgen run --candles "$evidence/eth_candles_h1.json" --lower 1505.68 --upper 3402.89 --grids 50 --spacing-mode arithmetic > "$out/eth_fills_g50.json"
.venv/bin/python -m app.assay --fills "$out/fills_g25.json" --venue kraken --market XBTUSD --spread-bps 2 --slippage-bps 1 --floor-bps 5 --min-sample 20 > "$out/verdict_g25.json"
.venv/bin/python -m app.assay --fills "$out/fills_g25_cycles.json" --venue kraken --market XBTUSD --spread-bps 2 --slippage-bps 1 --floor-bps 5 --min-sample 20 > "$out/verdict_g25_cycles.json"
.venv/bin/python -m app.assay --fills "$out/fills_g50.json" --venue kraken --market XBTUSD --spread-bps 2 --slippage-bps 1 --floor-bps 5 --min-sample 20 > "$out/verdict_g50.json"
.venv/bin/python -m app.assay --fills "$out/fills_g50_cycles.json" --venue kraken --market XBTUSD --spread-bps 2 --slippage-bps 1 --floor-bps 5 --min-sample 20 > "$out/verdict_g50_cycles.json"
.venv/bin/python -m app.assay --fills "$out/eth_fills_g25.json" --venue kraken --market ETHUSD --spread-bps 2 --slippage-bps 1 --floor-bps 5 --min-sample 20 > "$out/eth_verdict_g25.json"
.venv/bin/python -m app.assay --fills "$out/eth_fills_g25_cycles.json" --venue kraken --market ETHUSD --spread-bps 2 --slippage-bps 1 --floor-bps 5 --min-sample 20 > "$out/eth_verdict_g25_cycles.json"
.venv/bin/python -m app.assay --fills "$out/eth_fills_g50.json" --venue kraken --market ETHUSD --spread-bps 2 --slippage-bps 1 --floor-bps 5 --min-sample 20 > "$out/eth_verdict_g50.json"The original evidence was produced at the recorded engine commit. Reproduction from a later commit must first establish that the relevant generator, fee and Assay code is unchanged, or use a clean checkout of the evidence commit.
What this receipt supports.
A paper-only finding about four frozen BTC and ETH spot-grid accounts over the recorded H1 window after the stated cost model.
A claim that every grid strategy fails, a live-money result, or a recommendation to buy, sell or use a trading system.
The frozen snapshot retains its original path and manifest limitations. No missing file or host-specific path is silently repaired inside the evidence.
The frozen record remains independently verifiable.
| File | SHA-256 |
|---|---|
candles_h1.json | f9f2de3d1e80d932c67dde010f4336d3eee0d071122b803faa362650d334a0e6 |
eth_candles_h1.json | 1661c12557c937e22d248e72a00aa647671265478e0fac8979c3de35642db8df |
fills_g25_cycles.json | 4af4c8da77855d4fba55da6817da7427b9a39bb2ab5262be896ae1563c30038d |
fills_g25.json | c041abd051cae880a43bb672340311c95bd0616e202bbf9dc13746d9bc4c2afa |
fills_g50_cycles.json | 53fcd3457c5f9e3c7cbe37b29590e9cc8ee0d1b37dd7c44af439f6fa8cda3e33 |
fills_g50.json | 40fd7fad845c444bb9bf6ceb807c60c20dc048399b0ebb39cdd548bf46996196 |
verdict_g25_cycles.json | 691713503caaa77c48b97d3508b4123fe9513e8ded926f8b0df906f7d993c8c0 |
verdict_g25.json | 063f0c46c274e6eaef5e84ffcce8183108eacb86254ad69f35684d03bd95d8b4 |
verdict_g50_cycles.json | bcdacd8b352e7e4a1f041528cb5e0e4340491beb103450304a1dee886a2bc37 |
verdict_g50.json | aa66a41eec3ae3413488f73af6a60e83fa3fd3d978f67c8b34cff52790318b45 |
eth_fills_g25_cycles.json | 34e6688269dbe7e1293514efbd46b8a99df77bdb65e3a4bcf9dbbc5f5bf43621 |
eth_fills_g25.json | b69a30a951bd17e6b66a1bdfb5e48f9074bab2bd7981b1159d7b6429ccea80e4 |
eth_fills_g50.json | 3cdc52e92a0f173b23699e531b40fed9be19505d97901b6c6031295ba5738383 |
eth_verdict_g25_cycles.json | 225f522563a487d05af540f346ec01253858ee40fae417e1b40a33e09eec34dc |
eth_verdict_g25.json | 30ab068bdf3f6151810b3aabb3f776f2c237b6cacff2b13bc2400afad4fe28b1 |
eth_verdict_g50.json | d9aed272d6a3fb487d58c533a4a27ef3bf222e6027e1f714c88a339370f5a581 |
No standalone eth_verdict_g50_cycles.json was frozen. The ETH 50-grid completed-cycle figures are taken from the grid_cycle rows inside eth_verdict_g50.json.
Publication record.
| Date | Review | Result |
|---|---|---|
| 2026-07-02 | Mainframe manifest verification | All 16 manifest entries passed sha256sum -c |
| 2026-07-02 | Candle and verdict reconciliation | ETH marker closed; ETH 50-grid cycle rows recovered from the frozen full-account verdict |
| 2026-07-03 | Owner publication gate | Published with the frozen limitations retained |