fix: 4 cycle errors — NameError _log, WHEAT/EUR/USD ticker normalization, 429 serial scoring
- auto_cycle.py: replace _log with logger (NameError at lines 484/489) - auto_cycle.py: normalize underlying via _normalize_ticker before _resolve_ticker so WHEAT→ZW=F→WEAT and EUR/USD→EURUSD=X→FXE reach the IV watchlist correctly - iv_engine.py: _resolve_ticker now strips slash-format forex (EUR/USD→EURUSD=X) before _PROXY lookup, fixing yfinance 500/404 spam from get_atm_iv - database.py: _fetch in log_trade_entries uses _normalize_ticker (not _normalize_yf_ticker) so commodity aliases like WHEAT→ZW=F are applied at price-fetch time - ai_analyzer.py: max_workers=1 for batch scorer — parallel workers both slept and retried simultaneously after 429, causing repeated bursts; sequential fixes the pattern - journal.py + JournalDeBord.tsx: add price_warning field (no_price_data/no_entry_price/ no_live_price) with visible ⚠ badge and amber color on affected ticker/price cells Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -760,13 +760,14 @@ TEMPLATE DE NOTATION:
|
||||
|
||||
BATCH_SIZE = 4 # 4 patterns × ~800 tokens output = ~3200 tokens, safely within gpt-4o limits
|
||||
|
||||
# Score batches with limited parallelism to stay under TPM limits.
|
||||
# 2 concurrent batches × ~6K tokens = ~12K tokens burst, well under 30K TPM.
|
||||
# Score batches sequentially (max_workers=1) — parallel workers both retry on 429
|
||||
# simultaneously, defeating the sleep backoff. Sequential ensures the retry window
|
||||
# is fully cleared before the next batch fires.
|
||||
from concurrent.futures import ThreadPoolExecutor, as_completed
|
||||
batches = [pattern_blocks[i:i+BATCH_SIZE] for i in range(0, len(pattern_blocks), BATCH_SIZE)]
|
||||
_scorer_log.info(f"[Scorer] Scoring {len(pattern_blocks)} patterns in {len(batches)} batches of max {BATCH_SIZE}")
|
||||
all_scored = []
|
||||
with ThreadPoolExecutor(max_workers=min(len(batches), 2)) as executor:
|
||||
with ThreadPoolExecutor(max_workers=1) as executor:
|
||||
futures = [executor.submit(_score_batch, b) for b in batches]
|
||||
for future in as_completed(futures):
|
||||
try:
|
||||
|
||||
Reference in New Issue
Block a user