diff --git a/config/data_platform.yaml b/config/data_platform.yaml new file mode 100644 index 0000000..3269559 --- /dev/null +++ b/config/data_platform.yaml @@ -0,0 +1,34 @@ +# config/data_platform.yaml +data_paths: + daily_dir: /volume1/stock/A股数据/日线数据/daily + minute_15_dir: /volume1/stock/minute_kline/15min + vnpy_db: /volume1/stock/sanguo_vnpy/data/quant_trading.db + stock_list: /volume1/stock/A股数据/stock_info/stock_basic_info_raw_20260326_113530.csv + +data_sources: + daily: + - name: eastmoney + enabled: true + interval: 4.0 + - name: baostock + enabled: true + interval: 0.0 + timeout: 30 + - name: tencent + enabled: true + interval: 0.0 + minute_15: + - name: eastmoney + enabled: true + interval: 4.0 + +validation: + price_positive: true + ohlc_consistency: true + no_future_dates: true + +performance: + request_interval: 0.3 + max_retries: 3 + fail_window: 100 + fail_threshold: 0.8 diff --git a/sanguo_data/__init__.py b/sanguo_data/__init__.py index e69de29..cc749f9 100644 --- a/sanguo_data/__init__.py +++ b/sanguo_data/__init__.py @@ -0,0 +1,3 @@ +# sanguo_data/__init__.py +from .config import DataConfig, load_config +__all__ = ["DataConfig", "load_config"] diff --git a/sanguo_data/config.py b/sanguo_data/config.py new file mode 100644 index 0000000..2815fcf --- /dev/null +++ b/sanguo_data/config.py @@ -0,0 +1,20 @@ +# sanguo_data/config.py +from dataclasses import dataclass +import yaml + +@dataclass(frozen=True) +class DataConfig: + data_paths: dict + data_sources: dict + validation: dict + performance: dict + +def load_config(path: str) -> DataConfig: + with open(path, "r", encoding="utf-8") as f: + raw = yaml.safe_load(f) + return DataConfig( + data_paths=raw.get("data_paths", {}), + data_sources=raw.get("data_sources", {}), + validation=raw.get("validation", {}), + performance=raw.get("performance", {}), + ) diff --git a/tests/data/__init__.py b/tests/data/__init__.py new file mode 100644 index 0000000..29e9380 --- /dev/null +++ b/tests/data/__init__.py @@ -0,0 +1 @@ +# tests/data/__init__.py diff --git a/tests/data/__pycache__/__init__.cpython-314.pyc b/tests/data/__pycache__/__init__.cpython-314.pyc new file mode 100644 index 0000000..f849e1a Binary files /dev/null and b/tests/data/__pycache__/__init__.cpython-314.pyc differ diff --git a/tests/data/__pycache__/test_config.cpython-314-pytest-9.1.1.pyc b/tests/data/__pycache__/test_config.cpython-314-pytest-9.1.1.pyc new file mode 100644 index 0000000..dca3eb8 Binary files /dev/null and b/tests/data/__pycache__/test_config.cpython-314-pytest-9.1.1.pyc differ diff --git a/tests/data/test_config.py b/tests/data/test_config.py new file mode 100644 index 0000000..5ea5934 --- /dev/null +++ b/tests/data/test_config.py @@ -0,0 +1,27 @@ +# tests/data/test_config.py +from sanguo_data.config import load_config, DataConfig + +def test_load_config_returns_dataconfig(tmp_path): + yaml_content = """ +data_paths: + daily_dir: /tmp/daily + minute_15_dir: /tmp/15min + vnpy_db: /tmp/quant.db + stock_list: /tmp/stock.csv +data_sources: + daily: + - name: eastmoney + enabled: true + interval: 4.0 +validation: + price_positive: true +performance: + max_retries: 3 +""" + p = tmp_path / "config.yaml" + p.write_text(yaml_content) + cfg = load_config(str(p)) + assert isinstance(cfg, DataConfig) + assert cfg.data_paths["daily_dir"] == "/tmp/daily" + assert cfg.data_sources["daily"][0]["name"] == "eastmoney" + assert cfg.performance["max_retries"] == 3