feat: Specialist Desks v2 — COT, Forward Curves, Surprise Index, Hawk/Dove scorer
- COT Positioning: CFTC disaggregated + financial futures (19 markets) via Socrata free API net MM position % OI + weekly change stored in cot_data table - Forward Curves: yfinance front-month vs +3M slope (8 commodities) contango/backwardation/flat stored in forward_curve_data table - Surprise Index: consensus_estimate + actual_value on specialist_reports auto-computes surprise_score = actual - consensus on save - Hawk/Dove Text Scorer: GPT-4o-mini endpoint for CB statements score -1..+1, label, summary, key_phrases (forex/bonds: hawk/dove; commodities: bull/bear) - AI context injection: COT net positioning, forward curve structure, surprise scores, upcoming consensus estimates injected into all desk blocks - Frontend: COT panel (net% bars), Forward Curves panel, SurpriseInput on report cards, Hawk/Dove scorer in forex/bonds config tab - auto_cycle.py: non-blocking COT + curve refresh before each cycle Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -594,6 +594,21 @@ def run_cycle_once(trigger: str = "auto") -> Dict[str, Any]:
|
||||
except Exception as _ibe:
|
||||
logger.warning(f"[Cycle] Institutional block failed (non-blocking): {_ibe}")
|
||||
|
||||
# ── COT + Forward Curves (background refresh, non-blocking) ───────────────
|
||||
try:
|
||||
from services.cot_fetcher import fetch_all_cot
|
||||
from services.forward_curve import fetch_forward_curves
|
||||
from services.database import save_cot_data, save_forward_curves as _sfc
|
||||
cot_data = fetch_all_cot()
|
||||
if cot_data:
|
||||
save_cot_data(cot_data)
|
||||
curve_data = fetch_forward_curves()
|
||||
if curve_data:
|
||||
_sfc(curve_data)
|
||||
except Exception as _e:
|
||||
import logging as _logging
|
||||
_logging.getLogger(__name__).warning(f"COT/Curve refresh failed (non-blocking): {_e}")
|
||||
|
||||
suggestions = suggest_patterns_from_market_context(
|
||||
news, quotes, calendar, macro_regime=macro_regime, geo_score=geo_score_obj,
|
||||
portfolio_lessons=portfolio_lessons,
|
||||
|
||||
Reference in New Issue
Block a user