feat: instrument analysis
This commit is contained in:
@@ -521,10 +521,12 @@ def _get_relevant_events(
|
||||
config: Dict,
|
||||
from_date: Optional[str] = None,
|
||||
to_date: Optional[str] = None,
|
||||
instrument_id: Optional[str] = None,
|
||||
) -> List[Dict]:
|
||||
"""
|
||||
Filter market_events DB rows relevant to the instrument, by date range and keyword/asset match.
|
||||
Returns max 15 events sorted by start_date descending.
|
||||
Also includes events that have a causal analysis for this instrument (regardless of keywords).
|
||||
Returns max 30 events sorted by start_date asc.
|
||||
"""
|
||||
try:
|
||||
from services.database import get_conn
|
||||
@@ -549,6 +551,7 @@ def _get_relevant_events(
|
||||
|
||||
keywords = [kw.lower() for kw in config.get("event_keywords", [])]
|
||||
related = [ra.lower() for ra in config.get("related_assets", [])]
|
||||
inst_upper = (instrument_id or "").upper()
|
||||
|
||||
filtered = []
|
||||
for ev in all_events:
|
||||
@@ -580,9 +583,13 @@ def _get_relevant_events(
|
||||
ev_assets = (ev.get("affected_assets") or "").lower()
|
||||
|
||||
keyword_hit = any(kw in ev_name or kw in ev_desc for kw in keywords)
|
||||
asset_hit = any(ra in ev_assets for ra in related)
|
||||
asset_hit = any(ra in ev_assets for ra in related)
|
||||
|
||||
if keyword_hit or asset_hit:
|
||||
# Always include events that have a causal analysis for this instrument
|
||||
analyzed = ev.get("analyzed_instruments") or ""
|
||||
analysis_hit = inst_upper and inst_upper in [i.strip().upper() for i in analyzed.split(",") if i.strip()]
|
||||
|
||||
if keyword_hit or asset_hit or analysis_hit:
|
||||
filtered.append({
|
||||
"id": ev.get("id"),
|
||||
"template_id": ev.get("template_id"),
|
||||
@@ -669,7 +676,7 @@ async def get_snapshot(
|
||||
try:
|
||||
chart_start = price_data[0]["time"] if price_data else None
|
||||
chart_end = price_data[-1]["time"] if price_data else None
|
||||
events = _get_relevant_events(config, from_date=chart_start, to_date=chart_end)
|
||||
events = _get_relevant_events(config, from_date=chart_start, to_date=chart_end, instrument_id=instrument_id)
|
||||
except Exception as e:
|
||||
logger.warning(f"[instrument_service] Event filtering error: {e}")
|
||||
events = []
|
||||
|
||||
Reference in New Issue
Block a user