Instead of generating candidates from Tradovate and matching by price,
now parses Yahoo's continuous contract shortName (e.g. "Gold Jun 26")
to determine the exact month/year, constructs the Tradovate name
(e.g. "GCM6"), and looks it up directly. Falls back to Tradovate
suggest if Yahoo is unavailable.
This eliminates all price comparison, volume comparison, and the
rollcontract API calls entirely — Yahoo already knows the active month.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>