When WF filter blocks a ticker, automatically start a virtual (shadow)
position with the same trailing/time stop logic. After WF_SHADOW_WINS
consecutive shadow wins, reset WF history to re-enable real trading.
- trader.py: add _shadow_positions, _shadow_cons_wins state;
_shadow_enter(), get_shadow_positions(), update_shadow_peak(),
close_shadow() functions; trigger shadow entry on WF block in buy()
- monitor.py: add _check_shadow_position() with ATR trailing + time stop;
check shadow positions every 10s in run_monitor()
- Env: WF_SHADOW_WINS=2 (2 consecutive wins to rehabilitate)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>