chore(config): 添加环境变量示例及.gitignore更新

- 新增 .env.example,包含 Tushare API、钉钉机器人和PostgreSQL数据库配置模板
- 更新.gitignore,忽略本地配置文件如 .env.local 和 config_local.py
- 添加对报表文件命名规则的支持,保留示例文件不忽略
- 删除废弃的 chart.py 及相关图表模块代码
- 新增 config/settings.py,实现从环境变量读取配置的统一接口
- 设置数据目录及缓存目录,确保目录存在,提高配置管理规范性
This commit is contained in:
2026-03-18 23:33:40 +08:00
parent 7c93be4b41
commit 988c2335fb
39 changed files with 2983 additions and 1011 deletions

View 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