Implement a self-contained IMC Prosperity 4 Round 5 pair-trading strategy for exactly two Translator pairs: (TRANSLATOR_ECLIPSE_CHARCOAL, TRANSLATOR_SPACE_GRAY) and (TRANSLATOR_GRAPHITE_MIST, TRANSLATOR_ASTRO_BLACK), following the Trader class interface and datamodel usage in overall.py. For each pair, compute mid prices from order_depths, define the spread as an OLS/log residual, e.g. spread_CG = log(mid_CHARCOAL) - alpha_CG - beta_CG * log(mid_GRAY), and z_CG = (spread_CG - mean_CG) / std_CG; similarly spread_MB = log(mid_MIST) - alpha_MB - beta_MB * log(mid_BLACK), z_MB = (spread_MB - mean_MB) / std_MB. Use alpha, beta, mean, and std from my EDA outputs if available; otherwise fit/derive reasonable constants from outputs/product_residuals.csv or residual_diagnostics.csv and hardcode them into the strategy. Direction: if z > entry_z, the first product is expensive, so short first product and long second product; if z < -entry_z, long first product and short second product; if abs(z) < exit_z, flatten both legs. Start with entry_z around 2.0–2.25, exit_z around 0.4–0.6, and pair size 3–7, respecting position limit 10 for every product. Use taker execution as the default: sell at best_bid and buy at best_ask, clipping by visible volume and remaining position capacity; only try maker/passive orders if backtests show taker spread costs dominate and leg risk is manageable. After implementing round5_v1_claude.py, run the rust backtester with rust_backtester --trader "/Users/geraldchai/Documents/01-Study(notes:pdf:courseworks)/NYU/imc prosperity/imc4_codex_round5/round5_v1_claude.py" --dataset round5 --persist, inspect the persisted logbook/results, then grid-search entry_z, exit_z, pair size, direct reversal vs flatten-first behavior, and optionally taker-only vs hybrid maker/taker execution; keep only parameter regions that produce stable product-level PnL and do not rely on one lucky day or excessive churn.