run fundamentals weekly, not daily — it's quarterly-ish data
Pulled the fundamental collector out of the daily pipeline (where it re-fetched near-identical numbers every day and burned free-tier API quota) and made it an independent weekly job. P/E/market-cap drift with price but the score buckets them coarsely; revenue growth and earnings surprise only change at quarterly earnings. Added "weekly" to the frequency map; fundamental_fetch_frequency now defaults to weekly (configurable). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
+7
-2
@@ -1002,7 +1002,6 @@ async def sync_ticker_universe() -> None:
|
||||
# updates its own runtime status while the pipeline runs.
|
||||
_PIPELINE_STEPS = [
|
||||
("data_collector", "collect_ohlcv"),
|
||||
("fundamental_collector", "collect_fundamentals"),
|
||||
("sentiment_collector", "collect_sentiment"),
|
||||
("rr_scanner", "scan_rr"),
|
||||
("outcome_evaluator", "evaluate_outcomes"),
|
||||
@@ -1049,6 +1048,7 @@ async def run_daily_pipeline() -> None:
|
||||
_FREQUENCY_MAP: dict[str, dict[str, int]] = {
|
||||
"hourly": {"hours": 1},
|
||||
"daily": {"hours": 24},
|
||||
"weekly": {"weeks": 1},
|
||||
}
|
||||
|
||||
|
||||
@@ -1076,7 +1076,6 @@ def configure_scheduler() -> None:
|
||||
# interval job). They stay manually triggerable from Admin → Jobs.
|
||||
_members = [
|
||||
(collect_ohlcv, "data_collector", "Data Collector (OHLCV)"),
|
||||
(collect_fundamentals, "fundamental_collector", "Fundamental Collector"),
|
||||
(collect_sentiment, "sentiment_collector", "Sentiment Collector"),
|
||||
(scan_rr, "rr_scanner", "R:R Scanner"),
|
||||
(evaluate_outcomes, "outcome_evaluator", "Outcome Evaluator"),
|
||||
@@ -1099,6 +1098,12 @@ def configure_scheduler() -> None:
|
||||
sync_ticker_universe, "interval", hours=24,
|
||||
id="ticker_universe_sync", name="Ticker Universe Sync", replace_existing=True,
|
||||
)
|
||||
# Fundamentals — quarterly-ish data; weekly by default (conserves API quota)
|
||||
fund_interval = _parse_frequency(settings.fundamental_fetch_frequency)
|
||||
scheduler.add_job(
|
||||
collect_fundamentals, "interval", **fund_interval,
|
||||
id="fundamental_collector", name="Fundamental Collector", replace_existing=True,
|
||||
)
|
||||
alerts_interval = _parse_frequency(settings.alerts_frequency)
|
||||
scheduler.add_job(
|
||||
dispatch_alerts_job, "interval", **alerts_interval,
|
||||
|
||||
Reference in New Issue
Block a user