rebuild(stage-9): deliver deterministic intelligent screening

This commit is contained in:
leefer
2026-07-30 05:15:17 +08:00
parent 6cb52e864a
commit 158257ebb8
46 changed files with 7322 additions and 34 deletions
+17 -3
View File
@@ -20,6 +20,7 @@ from backend.data.policy import DataSourcePolicy
from backend.data.providers.base import MarketDataProvider, ProviderError
from backend.data.quality import DataQualityError, require_quality
from backend.data.repository import MarketRepository
from backend.data.screener_gateway import assemble_screener_inputs
from backend.database.connection import Database
SHANGHAI = ZoneInfo("Asia/Shanghai")
@@ -108,9 +109,7 @@ class DataGateway:
row = self._repository.latest_summary(connection, context.actual_date)
return {"context": context, "values": json.loads(str(row["payload_json"])) if row else None}
def snapshot_inputs(
self, trade_date: str, previous_trade_date: str
) -> dict[str, Any]:
def snapshot_inputs(self, trade_date: str, previous_trade_date: str) -> dict[str, Any]:
provider = self._provider(DataSource.TUSHARE)
self._policy.assert_allowed(provider.source, DataUsage.CALCULATION)
return provider.snapshot_inputs(trade_date, previous_trade_date)
@@ -136,6 +135,21 @@ class DataGateway:
self._policy.assert_allowed(provider.source, DataUsage.CALCULATION)
return provider.market_insight(kind, trade_date, previous_trade_date, identifier)
def screener_inputs(
self, trade_date: str, history_days: int = 260
) -> tuple[dict[str, Any], dict[str, float], list[str]]:
dates = self.trading_dates(trade_date, history_days)
if len(dates) < 21:
raise MarketDataUnavailable("历史交易日不足21日,无法生成选股因子")
chronological = tuple(reversed(dates))
provider = self._provider(DataSource.TUSHARE)
self._policy.assert_allowed(provider.source, DataUsage.CALCULATION)
raw = provider.screener_inputs(chronological)
inputs, coverage = assemble_screener_inputs(
self._database, self._repository, trade_date, chronological, raw
)
return inputs, coverage, [provider.source.value, DataSource.LOCAL.value]
def dynamic_auction(
self, identifiers: tuple[str, ...], start_time: str, end_time: str
) -> ProviderResult: