2399d0cb0c427173a91c64a01e7c39308c752fb4
- signal_booster.py: _compute_rates() now also computes a per-symbol win rate (not just system-wide/direction aggregates); trade_executor.py's Kelly sizing prefers it when the symbol has enough closed-trade history. Added _as_datetime() to normalize closed_at across backends/drivers that return either a real datetime or a string from raw SQL. - trade_executor.py: volatility-filter and Kelly-sizing exception handlers now log at warning level with the actual exception instead of silently swallowing failures that affect how much money a trade risks. - risk_manager.py: compute_partial_tp_levels() now returns all 3 levels its docstring always promised (TP1 25% + TP2 35% + 40% trailing remainder) instead of silently dropping the last 40%. - trade_executor.py: compute_volatility_adjusted_size() was dead code; now applied as a multiplier on the Kelly-derived trade_size (using max_risk_pct=100 to reinterpret it as "scale the already-sized trade" rather than "% of a bankroll", which would always collapse to this pipeline's $5 floor at its actual dollar scale). - walk_forward.py: grid-search fallback (when every combo is too sparse to trust) now picks the combo with the most trades/highest PnL instead of always the grid's arbitrary first entry. Raised MIN_TRADES_PER_FOLD 5 -> 15 for a more defensible statistical minimum. 219 backend tests pass (+10). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Description
Test repo