Run reale phase1-real-001 ha rivelato due problemi:
1. 67% parse_error perche' qwen3 nestava indicatori non supportati
(es. "(sma (indicator realized_vol 30) 150)"). Il prompt SYSTEM
ora esplicita le regole strette: indicator non e' annidabile,
sma/rsi/etc. esistono solo come 1o argomento di indicator,
crossover/crossunder accetta espressioni-serie come (feature close)
o (indicator sma N).
2. max_drawdown calcolato su equity assoluta (P&L in unita' BTC) +1.0
produceva drawdown nominali enormi (>89000) per strategie con
posizioni perdenti su BTC a $96k. Normalizziamo dividendo per il
notional iniziale (close[0]), cosi' max_dd diventa drawdown
relativo al wealth iniziale.
Test suite resta 122 PASSED, ruff e mypy clean.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Aggiunge HypothesisAgent che invoca LLMClient con system/user template
parametrizzati sul genoma e sul MarketSummary, poi estrae la S-expression
(da fence markdown lisp/scheme/sexp o testo nudo), la parsa e la valida.
Restituisce HypothesisProposal con strategy=None + parse_error in caso di
output malformato, mantenendo sempre il CompletionResult per accounting.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>