chore(config): 添加环境变量示例及.gitignore更新
- 新增 .env.example,包含 Tushare API、钉钉机器人和PostgreSQL数据库配置模板 - 更新.gitignore,忽略本地配置文件如 .env.local 和 config_local.py - 添加对报表文件命名规则的支持,保留示例文件不忽略 - 删除废弃的 chart.py 及相关图表模块代码 - 新增 config/settings.py,实现从环境变量读取配置的统一接口 - 设置数据目录及缓存目录,确保目录存在,提高配置管理规范性
This commit is contained in:
68
strategies/screener/base.py
Normal file
68
strategies/screener/base.py
Normal file
@@ -0,0 +1,68 @@
|
||||
"""
|
||||
标的筛选器基类
|
||||
|
||||
用于基于技术指标筛选符合条件的标的
|
||||
"""
|
||||
|
||||
from abc import ABC, abstractmethod
|
||||
from typing import Any
|
||||
import pandas as pd
|
||||
|
||||
|
||||
class Screener(ABC):
|
||||
"""筛选器抽象基类"""
|
||||
|
||||
def __init__(self, name: str, config: dict = None):
|
||||
self.name = name
|
||||
self.config = config or {}
|
||||
|
||||
@abstractmethod
|
||||
def screen(self, data: Any) -> dict:
|
||||
"""
|
||||
执行筛选
|
||||
|
||||
Args:
|
||||
data: 输入数据(DataFrame或其他格式)
|
||||
|
||||
Returns:
|
||||
dict: 筛选结果,必须包含 'triggered' 键表示是否触发
|
||||
"""
|
||||
pass
|
||||
|
||||
@abstractmethod
|
||||
def screen_batch(self, data_dict: dict) -> list:
|
||||
"""
|
||||
批量筛选多个标的
|
||||
|
||||
Args:
|
||||
data_dict: {code: data} 格式的字典
|
||||
|
||||
Returns:
|
||||
list: 符合条件的标的列表
|
||||
"""
|
||||
pass
|
||||
|
||||
|
||||
class DataFrameScreener(Screener):
|
||||
"""基于DataFrame的筛选器基类"""
|
||||
|
||||
def __init__(self, name: str, config: dict = None):
|
||||
super().__init__(name, config)
|
||||
|
||||
def validate_data(self, df: pd.DataFrame) -> bool:
|
||||
"""验证数据格式"""
|
||||
required_cols = ["open", "high", "low", "close", "volume"]
|
||||
return all(col in df.columns for col in required_cols)
|
||||
|
||||
def screen_batch(self, data_dict: dict) -> list:
|
||||
"""批量筛选"""
|
||||
results = []
|
||||
for code, data in data_dict.items():
|
||||
if isinstance(data, pd.DataFrame) and self.validate_data(data):
|
||||
result = self.screen(data)
|
||||
if result.get("triggered", False):
|
||||
results.append({
|
||||
"code": code,
|
||||
**result
|
||||
})
|
||||
return results
|
||||
Reference in New Issue
Block a user