feat: market event
This commit is contained in:
@@ -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 = {}
|
||||
|
||||
Reference in New Issue
Block a user