feat: market event

This commit is contained in:
OpenSquared
2026-06-29 11:48:52 +02:00
parent 30b478ca72
commit 495ccfdee4

View File

@@ -37,10 +37,11 @@ def _init(conn):
# ── Récupération des prix autour d'un événement ───────────────────────────────
def _fetch_prices(event_date_str: str, instruments: list[str]) -> dict:
def _fetch_prices(event_date_str: str, instruments: list[str], lag_days: int = 0) -> dict:
"""
Télécharge les prix autour de l'événement pour chaque instrument demandé.
Retourne dict { instrument: [{"t": iso, "c": float}, ...] }
Si lag_days > 0, force le mode journalier (la fenêtre doit couvrir N jours après l'event).
"""
YFINANCE_MAP = {
"EURUSD": "EURUSD=X",
@@ -61,8 +62,8 @@ def _fetch_prices(event_date_str: str, instruments: list[str]) -> dict:
event_dt = datetime.strptime(event_date_str[:10], "%Y-%m-%d")
days_ago = (datetime.utcnow() - event_dt).days
# Intraday 5min (< 55 jours) pour les FX / actifs principaux
use_intraday = days_ago < 55
# Intraday 5min (< 55 jours) sauf si lag_days > 0 (besoin fenêtre journalière étendue)
use_intraday = days_ago < 55 and lag_days == 0
for inst in instruments:
sym = YFINANCE_MAP.get(inst)
@@ -88,9 +89,9 @@ def _fetch_prices(event_date_str: str, instruments: list[str]) -> dict:
out["mode"] = "intraday_5m"
continue
# Fallback journalier
# Fallback journalier (ou mode forcé si lag_days > 0)
start = (event_dt - timedelta(days=5)).strftime("%Y-%m-%d")
end = (event_dt + timedelta(days=5)).strftime("%Y-%m-%d")
end = (event_dt + timedelta(days=max(5, lag_days + 3))).strftime("%Y-%m-%d")
df = yf.download(sym, start=start, end=end,
interval="1d", progress=False, auto_adjust=True)
if df is not None and len(df) > 0:
@@ -934,7 +935,7 @@ def analyze_event(body: AnalyzeRequest):
instruments = list(set(tmpl.get("instruments", []))) or ["EURUSD"]
primary_inst = body.instrument or (instruments[0] if instruments else "EURUSD")
prices = _fetch_prices(event["start_date"], instruments)
prices = _fetch_prices(event["start_date"], instruments, lag_days=effective_lag_days)
edate = event["start_date"][:10]
actual_moves: dict = {}