ramseshk
|
639dd4fb6d
|
feat: Phase 3 — event-driven market-making simulator + 53 tests
New sim/ module — 7 files + init, replays stored L2/trade data
through a realistic market-making simulation:
sim/engine.py (SimulationEngine):
Event-driven core — processes L2 updates, trades, mark prices
sequentially. Orchestrates queue model, maker quotes, fill sim,
constraints, scenarios. Supports periodic re-quoting and
stale order cancellation.
sim/queue.py (QueueModel):
Price-time FIFO queue per price level. Tracks where maker orders
sit in queue. Simulates order eating by aggressor trades.
fill_probability() — Poisson thinning model for fill odds.
sim/maker.py:
AvellanedaStoikovMaker — stochastic control quoting with
aeta, k, tau parameters. Reservation price based on inventory.
quote() and quote_with_skew() with configurable inventory tilt.
GridMaker — evenly-spaced grid quoting at N levels.
sim/fills.py:
FillSimulator — partial fills, adverse selection probability,
cancel latency (gaussian RTT). FillEvent/CancelEvent tracking.
adverse_selection_intensity() — measures post-fill price moves.
sim/constraints.py:
InventoryConstraint — long/short/net/gross position limits.
FundingConstraint — hourly funding cost estimation.
FeeSchedule — maker/taker fee calculation.
LiquidationRisk — liquidation price and safety distance.
CircuitBreaker — PnL, trade count, toxic rate, slippage trips.
ConstraintManager — unified pre-trade constraint check.
sim/scenario.py:
ScenarioEngine — randomized exchange downtimes, latency spikes,
volatility bursts. State query per sim_time for spread/trade-rate.
sim/reporter.py:
PnLReporter — component-level PnL breakdown:
spread_capture, inventory_pnl, fees, funding, adverse_selection.
SimulationStats — trade counts, fill rates, drawdown, sharpe.
Equity curve tracking and max drawdown computation.
53 new tests across 4 files (all pass):
test_sim_queue.py (12) — order placement, FIFO, fills, cancels
test_sim_maker.py (9) — A-S quotes, inventory skew, grid maker
test_sim_constraints.py (14) — limits, funding, fees, liquidation, breakers
test_sim_reporter.py (12) — PnL components, equity curve, stats
test_sim_engine.py (6) — full engine integration
Total test suite: 134 tests, all passing.
|
2026-08-07 14:39:59 +08:00 |
|
ramseshk
|
fcfc136384
|
feat: Phase 2 — microstructure analytics + 81 tests
New microstructure/ module with pure-function analytics:
microstructure/book.py:
microprice() — depth-weighted mid price
mid_price() — simple bid/ask midpoint
order_book_imbalance() — ranged [-1, 1] volume skew
depth_imbalance() — imbalance at fixed price distance
spread_stats() — spread, spread_bps, mid, bid, ask
depth_resiliency() — bid/ask volume within impact radius
queue_depletion_prob() — Poisson fill probability at level
batch_book_stats() — aggregate stats across snapshots
microstructure/trades.py:
classify_lee_ready() — Lee-Ready aggressor classification
classify_bulk_lee_ready() — batch classification with mids/bids/asks
compute_markouts() — forward mid-price change at configurable horizons
markout_summary() — mean/std/t-stat per side per horizon
trade_volume_profile() — size bucket distribution
trade_arrival_rate() — rolling trades/sec with burst detection
microstructure/toxicity.py:
compute_vpin() — volume-synchronized informed trading probability
compute_vpin_time_series() — rolling VPIN with alarm threshold
fill_toxicity() — adverse price movement post-trade
adverse_selection_ratio() — per-side adverse selection
liquidation_clustering() — cluster detection in liquidation events
microstructure/funding.py:
funding_regime() — classify regime (neutral/positive/negative/high)
funding_predictability() — AR(1) autocorrelation analysis
funding_carry_pnl() — cumulative carry PnL estimation
basis_spread() — perp premium over spot (bps)
basis_convergence_speed() — mean-reversion half-life via AR(1)
microstructure/signals.py:
composite_signal() — weighted OBI + trade + VPIN + funding signal
SignalPipeline — stateful pipeline accumulating book/trade updates
detect_hft_regime() — regime classifier for HFT strategy selection
Bug fixes in Phase 1:
- data/latency.py: proper linear-interpolation percentiles
- data/normalizer.py: UTC timezone for naive datetimes
- data/normalizer.py: detect_sequence_gap returns gap-1 (missing count)
- microstructure/toxicity.py: consistent vpin_value key in compute_vpin
81 tests across 4 test files (store, normalizer, latency, microstructure)
|
2026-08-07 14:34:18 +08:00 |
|
ramseshk
|
50f8f4f970
|
Refactor: review, fix, and test entire codebase
Live node:
- Fix null-handling for open_ords and get_fills requests
- Cap equity_history, strategy_equity at 600-1000 entries (memory leak fix)
- Dynamic strategy count in startup log
- Loop error recovery: catch exceptions, backoff 5s, continue
Dashboard server:
- Fix backtest detail API: check HISTORICAL_DIR first
- This was causing all historical detail views to show zeros
Tests (5 suites, all passing):
1. Signal generation: Mean Reversion VWAP + Momentum + Pairs + OBI
2. Backtest: SPX mean reversion on 500-point series
3. Hurst/VPIN: 15 signals from 280 dollar bars
4. Memory guard: RSS monitoring, GC thresholds
5. Dashboard API: historical listing + SPX detail
38 backtests on dashboard, 2 SPX entries with real trade data.
|
2026-08-06 07:52:02 +00:00 |
|