Ticker normalization (_normalize_ticker): - EUR/USD slash-format → EURUSD=X (was passed raw to yfinance → 500/404 spam) - bare 6-char forex pairs EURUSD/USDJPY etc → append =X - commodity alias table: WHEAT→ZW=F, CORN→ZC=F, WTI→CL=F, BRENT→BZ=F, GOLD→GC=F, SILVER→SI=F, NATGAS→NG=F, SUGAR→SB=F, + 15 others - also normalize underlying at log_trade_entries time so stored tickers are already canonical before MtM lookups GPT-4o 429 rate limit: - _chat() retries up to 3× on rate_limit errors, respects retry-after hint from error message (e.g. "try again in 12.37s"), falls back to 2^n×5s - batch scorer: parallel workers 4→2 to halve the token burst per cycle (2 concurrent batches × ~6K tokens vs 4 × ~6K = 24K burst at 30K limit) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
112 KiB
112 KiB