9e210b5a020651ace3405a143eb49e429a9b92d5
Two related accounting fixes: 1. _calibrate_fee_model startup guard: before calling calibrate_fee, compute raw deviation from the published taker/maker rate (ignoring any stale calibration_ratio). If >15%, skip and log WARNING rather than letting a bad REST fill set calibration_ratio to ~0.8 and cause ESTIMATED fees to understate actuals by 20% for the entire session. 2. fee_settled_events trade_id: BingX WS does not echo back our clientOrderId in fill events (field "c" is empty). Was falling back to BingX's internal orderId (p-e-mq5.../p-x-mq5...) which can't be joined to trade_events. Now reads trade_id from kernel slot 0 (which retains the trade_id until the next ENTER) so fee_settled_events.trade_id = BTCUSDT-T-N. Added venue_order_id field to persist_fee_settled for bidirectional reconciliation. 128/128 tests green. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Description
No description provided
Languages
Python
100%