rebuild(stage-9): deliver deterministic intelligent screening
This commit is contained in:
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user