feat(selection): 集成 B1 FastDTW 图形评分
This commit is contained in:
@@ -2,17 +2,19 @@
|
||||
|
||||
from collections.abc import Generator
|
||||
from contextlib import contextmanager
|
||||
from datetime import date
|
||||
from datetime import date, timedelta
|
||||
from decimal import Decimal
|
||||
from typing import cast
|
||||
|
||||
import psycopg
|
||||
import pytest
|
||||
|
||||
from zhixing_server.modules.selection.domain.pattern_scoring import ZHIXING_B1_PATTERN_CASES
|
||||
from zhixing_server.modules.selection.domain.runs import SelectionStock
|
||||
from zhixing_server.modules.selection.infrastructure.postgres_pool import SelectionPostgresPool
|
||||
from zhixing_server.modules.selection.infrastructure.postgres_reader import (
|
||||
PostgresMarketDataReader,
|
||||
PostgresPatternCaseLibraryLoader,
|
||||
SelectionMarketDataNotReady,
|
||||
)
|
||||
|
||||
@@ -237,3 +239,34 @@ def test_reader_rejects_date_without_eligible_market_batch(monkeypatch: pytest.M
|
||||
"zhixing_b1",
|
||||
date(2026, 8, 8),
|
||||
)
|
||||
|
||||
|
||||
def test_pattern_case_loader_reads_one_complete_exclusive_qfq_library() -> None:
|
||||
rows: list[tuple[object, ...]] = []
|
||||
for definition in ZHIXING_B1_PATTERN_CASES:
|
||||
for offset in range(definition.lookback_days, 0, -1):
|
||||
rows.append(
|
||||
(
|
||||
definition.id,
|
||||
definition.ts_code,
|
||||
definition.breakout_date - timedelta(days=offset),
|
||||
"10",
|
||||
"11",
|
||||
"9",
|
||||
str(10 + offset / 100),
|
||||
str(1000 + offset),
|
||||
)
|
||||
)
|
||||
connection = FakeConnection(rows)
|
||||
pool = Pool(connection)
|
||||
owner = SelectionPostgresPool("postgresql://test", max_connections=2, pool=pool)
|
||||
|
||||
cases = PostgresPatternCaseLibraryLoader("postgresql://test", pool=owner).load()
|
||||
|
||||
assert tuple(case.definition for case in cases) == ZHIXING_B1_PATTERN_CASES
|
||||
assert all(len(case.history.bars) == 25 for case in cases)
|
||||
assert all(case.history.bars[-1].trade_date < case.definition.breakout_date for case in cases)
|
||||
assert "bar.trade_date < definition.breakout_date" in cast(str, connection.query)
|
||||
assert "bar.source_adj = 'qfq'" in cast(str, connection.query)
|
||||
assert connection.parameters is not None
|
||||
assert connection.parameters[0] == [definition.id for definition in ZHIXING_B1_PATTERN_CASES]
|
||||
|
||||
Reference in New Issue
Block a user