- buy() now always loads WF history from trade_results DB directly
(not lazy-cached in memory) → restart-safe, no stale-history issue
- Added WF_VOL_BYPASS_THRESH (default 10.0x): if vol_ratio at entry
exceeds this threshold, WF filter is skipped regardless of win rate
- buy() now accepts vol_ratio param; runner.py passes it from
get_active_signals() for both fast-poll and main scan loops
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>