From 90f0b68ce248ca516aa02a40739e8236dfe90605 Mon Sep 17 00:00:00 2001 From: claude_dev Date: Sun, 5 Jul 2026 11:41:57 +0800 Subject: [PATCH] =?UTF-8?q?feat(data):=20=E8=84=9A=E6=89=8B=E6=9E=B6=20+?= =?UTF-8?q?=20YAML=20=E9=85=8D=E7=BD=AE=E5=8A=A0=E8=BD=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config/data_platform.yaml | 34 ++++++++++++++++++ sanguo_data/__init__.py | 3 ++ sanguo_data/config.py | 20 +++++++++++ tests/data/__init__.py | 1 + .../data/__pycache__/__init__.cpython-314.pyc | Bin 0 -> 177 bytes .../test_config.cpython-314-pytest-9.1.1.pyc | Bin 0 -> 3490 bytes tests/data/test_config.py | 27 ++++++++++++++ 7 files changed, 85 insertions(+) create mode 100644 config/data_platform.yaml create mode 100644 sanguo_data/config.py create mode 100644 tests/data/__init__.py create mode 100644 tests/data/__pycache__/__init__.cpython-314.pyc create mode 100644 tests/data/__pycache__/test_config.cpython-314-pytest-9.1.1.pyc create mode 100644 tests/data/test_config.py 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 0000000000000000000000000000000000000000..f849e1a8606122be9d3b804f8799802a6ec49ffd GIT binary patch literal 177 zcmdPq zSU)+VG%YnRU0*N1AT=*JC$U_=I5981G(WzeC_gJTxuh7zFUu>aj4w0NFG(#13Z^8M uBIGKav;%+HZ4l+Ag{>Q0wk5tu^ipY;roY#FS+=AB zLa9oZ9cOsl!c;Z2nDmM9s#K2AQBY%Z@K(zRshSewq7T!xf!=7kmJ@P0-uUXxOEGjy zYJ3X7dAdy_ZOAoF85>$06h8fa43uMqx`4(Q^Q#Ss@x>ED>i1)yMt2)E5t~@Ke(r$( zu(0g+hxvac8M2WvvPX*b!hy98jkTJ7BgQia{0@z=??+?H8Use|NU{At9{V|rYvG7I zzTr<}%^CSb{tn-pEI29289|P5lm_zg{lA(lhHNAMYZzm)} z9e+>Abe*g*xcWs^{$v4w)rVrwjrM`OBs_%g7%)y%2c{+C^f&eCR9TL2Ba?{s@EvDG zlt*GGwVxg1m@!n%l%#!V?g*UaL=>WDoL!Z|>{SV3%G`Oe&wg(lPcnBOBsJqiQlqS% ze9J0h?f|Rr_t_MZF}$C-`{}pL9c0c>=m&AcI!6DRlsf(XnW2SO(5#|qb<6eIX5EFe zS_wD964xo-bo~}~%*mO=*yIdF>DZbdQkSLJW3^@ZxL9AJ0|*E9x2ESJ9FK9JXrr}g zRTQ+K?ey1W0chGsnr}6oSpUo6P*LKV>KrVLI=zQEQbl`FTo0e}o%%*8QGNFT^OQX=Hm31|`6%^Z6(_5dh z5ON^aKD->Z%Q{lNiv?|tLlZi>%#cYPjdNg1N4oMoNr&wTqPWQQ5oYT!V3MTm!)=Mo$RYV2IYdqDL6`nb&CTi3`fwbWHW$T8 z!`Dv`W-W==|Uc# z(+--U1syWT%Q7wyq9)R&=ShxMCNEhs$P&e_a@g@PkwVBmn?z;%h&Y^%lqi6itP95exntbAq*ZkHbz3{2V!li z#8^Z02w{th@s+a}w#h|KXyP8qs;~upWHRfh2;pTK1^WylLeJ?2c$GSSTHd(xN(1?m zn{%CUX8IB8* z6;Uy+B6iUE@#gjPJAgU^*v*XOK5GW`mgmgF397PtDq>fxS7}L-{sQ0!&;^x$