refactor(archive): move unused modules to archive/
Archive legacy framework and utility modules that are no longer referenced by the active core (datasource/ and rotation/): - framework/ -> archive/framework/ - framework_v2/ -> archive/framework_v2/ - strategies/ -> archive/strategies/ - config/ -> archive/config/ - visualization/ -> archive/visualization/ - scripts/ -> archive/scripts/ - tests/ -> archive/tests/ - run_rotation.py, run_us_rotation.py -> archive/single_files/ - compare_*.py, test_api_dates.py -> archive/single_files/
This commit is contained in:
126
archive/framework/data/__init__.py
Normal file
126
archive/framework/data/__init__.py
Normal file
@@ -0,0 +1,126 @@
|
||||
"""
|
||||
数据层抽象接口(通用)
|
||||
|
||||
只提供数据获取抽象接口,具体实现在strategies/shared/data/
|
||||
"""
|
||||
|
||||
from abc import ABC, abstractmethod
|
||||
from typing import Dict, List, Optional, Any
|
||||
import pandas as pd
|
||||
from dataclasses import dataclass
|
||||
from datetime import datetime
|
||||
|
||||
|
||||
@dataclass
|
||||
class OHLCVData:
|
||||
"""
|
||||
OHLCV数据结构(通用)
|
||||
|
||||
标准化的K线数据格式
|
||||
"""
|
||||
code: str
|
||||
name: str = ""
|
||||
start_date: datetime = None
|
||||
end_date: datetime = None
|
||||
|
||||
# OHLCV数据DataFrame
|
||||
data: pd.DataFrame = None
|
||||
|
||||
@property
|
||||
def length(self) -> int:
|
||||
"""数据长度"""
|
||||
return len(self.data) if self.data is not None else 0
|
||||
|
||||
def validate(self) -> bool:
|
||||
"""验证数据完整性"""
|
||||
if self.data is None or self.data.empty:
|
||||
return False
|
||||
|
||||
required_cols = ['close']
|
||||
return all(col in self.data.columns for col in required_cols)
|
||||
|
||||
def __repr__(self) -> str:
|
||||
return f"OHLCVData(code={self.code}, name={self.name}, length={self.length})"
|
||||
|
||||
|
||||
class DataSource(ABC):
|
||||
"""
|
||||
数据源抽象接口
|
||||
|
||||
所有数据源必须实现fetch方法
|
||||
"""
|
||||
|
||||
name: str = "base"
|
||||
|
||||
def __init__(self, **params):
|
||||
"""初始化数据源参数"""
|
||||
self._params = params
|
||||
|
||||
@abstractmethod
|
||||
def fetch(self, code: str, start: str, end: str) -> OHLCVData:
|
||||
"""
|
||||
获取单个标的的OHLCV数据
|
||||
|
||||
Args:
|
||||
code: 标的代码
|
||||
start: 开始日期 (YYYY-MM-DD)
|
||||
end: 结束日期 (YYYY-MM-DD)
|
||||
|
||||
Returns:
|
||||
OHLCVData对象
|
||||
"""
|
||||
pass
|
||||
|
||||
@abstractmethod
|
||||
def fetch_batch(self, codes: List[str], start: str, end: str) -> Dict[str, OHLCVData]:
|
||||
"""
|
||||
批量获取多个标的的OHLCV数据
|
||||
|
||||
Args:
|
||||
codes: 标的代码列表
|
||||
start: 开始日期
|
||||
end: 结束日期
|
||||
|
||||
Returns:
|
||||
{code: OHLCVData}字典
|
||||
"""
|
||||
pass
|
||||
|
||||
def get_supported_codes(self) -> List[str]:
|
||||
"""获取支持的数据源代码列表"""
|
||||
return []
|
||||
|
||||
def __repr__(self) -> str:
|
||||
return f"{self.__class__.__name__}(name={self.name})"
|
||||
|
||||
|
||||
class DataCache(ABC):
|
||||
"""
|
||||
数据缓存抽象接口(通用)
|
||||
|
||||
支持本地缓存管理
|
||||
"""
|
||||
|
||||
@abstractmethod
|
||||
def get(self, code: str, start: str, end: str) -> Optional[OHLCVData]:
|
||||
"""从缓存获取数据"""
|
||||
pass
|
||||
|
||||
@abstractmethod
|
||||
def set(self, code: str, data: OHLCVData) -> None:
|
||||
"""写入缓存"""
|
||||
pass
|
||||
|
||||
@abstractmethod
|
||||
def is_fresh(self, code: str, max_age_days: int = 1) -> bool:
|
||||
"""检查缓存是否新鲜"""
|
||||
pass
|
||||
|
||||
@abstractmethod
|
||||
def clear(self, code: Optional[str] = None) -> None:
|
||||
"""清空缓存"""
|
||||
pass
|
||||
|
||||
|
||||
# 导出抽象接口
|
||||
__all__ = ['OHLCVData', 'DataSource', 'DataCache']
|
||||
BIN
archive/framework/data/__pycache__/__init__.cpython-312.pyc
Normal file
BIN
archive/framework/data/__pycache__/__init__.cpython-312.pyc
Normal file
Binary file not shown.
Reference in New Issue
Block a user