This fixture is a compact deterministic dataset for testing the replay pipeline without refetching CoW or Binance data.
Solver: Rizzolver
Solver ID: rizzolver
Solver addr: 0x8f5835e9d756c9bd934bce527157a4b0ef3c5cb7
Network: Ethereum mainnet
Candles: 2026-06-09T14:02:00Z -> 2026-06-11T14:11:00Z
Settlements: 2026-06-09T14:03:11Z -> 2026-06-11T14:11:47Z
Interval: 1m ETHUSDC candles
settlement_events.csv CoW WETH/USDC settlement deltas attributed to Rizzolver.
candles.csv ETHUSDC one-minute candles used by replay_with_avellaneda.py.
expected_summary.json Expected output summary for the default fixture command below.
tuned_expected_summary.json Expected output summary for the tuned reward-aware Rizzolver command below.
The fixture is intentionally small enough to commit, but still covers a realistic replay path:
571 loaded settlement events
570 applied settlement events
2,890 one-minute candles
2,869 simulated Avellaneda trades in the default expected run
1,425 simulated Avellaneda trades in the tuned reward-aware run
The settlement CSV includes CoW competition reward metadata, including solver_score_wei, reference_score_wei, total_winning_score_wei, and estimated_reward_native.
Both profiles below use the same Rizzolver settlement events and the same ETHUSDC candles.
Original default = old generic Avellaneda parameters on Rizzolver data.
Tuned Rizzolver = adjusted Avellaneda parameters plus reward-aware gating on the same Rizzolver data.
This is not a comparison between Rizzolver and another solver. It is a comparison between two Avellaneda configurations applied to the same Rizzolver inventory path.
From the repo root:
python3 replay_with_avellaneda.py \
--settlements fixtures/ethereum-rizzolver-2026-06-09-2d/settlement_events.csv \
--candles-csv fixtures/ethereum-rizzolver-2026-06-09-2d/candles.csv \
--initial-base 10000 \
--initial-quote 30000000 \
--inventory-target-base-pct 60 \
--order-amount 0.2 \
--risk-factor 1.0 \
--min-spread 0.05 \
--out-dir results/fixture_ethereum_rizzolver_2dExpected headline:
settlement_only_pnl_pct: 31.6506697718
pnl_pct: 31.6515912748
avellaneda_vs_settlement_only_pct: 0.0009215030
avellaneda_vs_settlement_only_quote: 430.3124104589
avellaneda_vs_settlement_only_result: better
trades: 2869
solver_reward_quote: 13297.2158681541
settlement_only_base_pct: 51.1933596860
settlement_only_imbalance: -8.8066403140 pp
final_base_pct: 52.6644748278
final_imbalance: -7.3355251722 pp
imbalance_closed_pct: 16.7046125344
The tuned profile keeps the target close to Rizzolver's observed WETH inventory, increases order size so the strategy can correct inventory with fewer fills, enables transaction-cost-adjusted quotes, and uses Rizzolver reward estimates as a budget for locally negative rebalancing trades.
python3 replay_with_avellaneda.py \
--settlements fixtures/ethereum-rizzolver-2026-06-09-2d/settlement_events.csv \
--candles-csv fixtures/ethereum-rizzolver-2026-06-09-2d/candles.csv \
--initial-base 10000 \
--initial-quote 30000000 \
--inventory-target-base-pct 40 \
--order-amount 1.0 \
--risk-factor 3.0 \
--min-spread 0.2 \
--add-transaction-costs \
--reward-aware \
--out-dir results/fixture_ethereum_rizzolver_2d_tunedExpected headline:
settlement_only_pnl_pct: 31.6506697718
pnl_pct: 31.6028255214
avellaneda_vs_settlement_only_pct: -0.0478442504
avellaneda_vs_settlement_only_quote: -22341.7339137867
avellaneda_vs_settlement_only_result: worse
trades: 1425
solver_reward_quote: 13297.2158681541
reward_budget_after_avellaneda_quote: -9044.5180456326
reward_coverage_ratio: 0.5951738535
reward_aware_skipped_trades: 364
settlement_only_base_pct: 51.1933596860
settlement_only_imbalance: +11.1933596860 pp
final_base_pct: 47.9910933966
final_imbalance: +7.9910933966 pp
imbalance_closed_pct: 28.6086249283