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 |
|