chore(config): 添加环境变量示例及.gitignore更新
- 新增 .env.example,包含 Tushare API、钉钉机器人和PostgreSQL数据库配置模板 - 更新.gitignore,忽略本地配置文件如 .env.local 和 config_local.py - 添加对报表文件命名规则的支持,保留示例文件不忽略 - 删除废弃的 chart.py 及相关图表模块代码 - 新增 config/settings.py,实现从环境变量读取配置的统一接口 - 设置数据目录及缓存目录,确保目录存在,提高配置管理规范性
This commit is contained in:
0
config/__init__.py
Normal file
0
config/__init__.py
Normal file
100
config/settings.py
Normal file
100
config/settings.py
Normal file
@@ -0,0 +1,100 @@
|
||||
"""
|
||||
ETF策略项目 - 通用配置
|
||||
|
||||
敏感信息通过环境变量读取,非敏感配置直接定义
|
||||
"""
|
||||
|
||||
import os
|
||||
from pathlib import Path
|
||||
|
||||
# 加载 .env 文件
|
||||
try:
|
||||
from dotenv import load_dotenv
|
||||
load_dotenv()
|
||||
except ImportError:
|
||||
pass # python-dotenv 未安装时跳过
|
||||
|
||||
# 项目根目录
|
||||
PROJECT_ROOT = Path(__file__).parent.parent
|
||||
|
||||
# 数据目录
|
||||
DATA_DIR = PROJECT_ROOT / "data"
|
||||
DATA_CACHE_DIR = PROJECT_ROOT / "data_cache"
|
||||
|
||||
# 确保目录存在
|
||||
DATA_CACHE_DIR.mkdir(exist_ok=True)
|
||||
|
||||
|
||||
# ==================== API配置 ====================
|
||||
def get_tushare_token() -> str:
|
||||
"""从环境变量获取Tushare Token"""
|
||||
token = os.getenv("TUSHARE_TOKEN")
|
||||
if not token:
|
||||
raise ValueError("请设置环境变量 TUSHARE_TOKEN")
|
||||
return token
|
||||
|
||||
|
||||
# ==================== 钉钉配置 ====================
|
||||
def get_dingtalk_config() -> dict:
|
||||
"""从环境变量获取钉钉配置"""
|
||||
return {
|
||||
"webhook": os.getenv("DINGTALK_WEBHOOK", ""),
|
||||
"secret": os.getenv("DINGTALK_SECRET", ""),
|
||||
}
|
||||
|
||||
|
||||
# ==================== 数据库配置 ====================
|
||||
def get_db_config() -> dict:
|
||||
"""从环境变量获取数据库配置"""
|
||||
return {
|
||||
"host": os.getenv("DB_HOST", "192.168.0.115"),
|
||||
"port": int(os.getenv("DB_PORT", "5432")),
|
||||
"database": os.getenv("DB_NAME", "etf_db"),
|
||||
"username": os.getenv("DB_USER", "admin"),
|
||||
"password": os.getenv("DB_PASS", "admin"),
|
||||
}
|
||||
|
||||
|
||||
# ==================== 代码映射 ====================
|
||||
CODE_NAME_MAP = {
|
||||
# 宽基
|
||||
"000300.SH": "沪深300",
|
||||
"000905.SH": "中证500",
|
||||
"000852.SH": "中证1000",
|
||||
"399006.SZ": "创业板指",
|
||||
"000015.SH": "上证红利",
|
||||
# 金融
|
||||
"399986.SZ": "中证银行",
|
||||
"399975.SZ": "证券公司",
|
||||
"000934.SH": "中证金融",
|
||||
# 消费
|
||||
"000932.SH": "中证消费",
|
||||
"399997.SZ": "中证白酒",
|
||||
# 医药
|
||||
"000933.SH": "中证医药",
|
||||
"399989.SZ": "中证医疗",
|
||||
# 科技
|
||||
"000935.SH": "中证信息",
|
||||
"399971.SZ": "中证传媒",
|
||||
# 新能源
|
||||
"399808.SZ": "中证新能源",
|
||||
"399976.SZ": "新能源车",
|
||||
# 周期
|
||||
"399395.SZ": "国证有色",
|
||||
"399440.SZ": "中证钢铁",
|
||||
"399998.SZ": "中证煤炭",
|
||||
"399813.SZ": "细分化工",
|
||||
"000937.SH": "中证能源",
|
||||
"000938.SH": "中证材料",
|
||||
# 其他
|
||||
"399967.SZ": "中证军工",
|
||||
"399393.SZ": "国证地产",
|
||||
"000827.SH": "中证环保",
|
||||
"399995.SZ": "中证基建",
|
||||
"000949.SH": "中证农业",
|
||||
"399702.SZ": "中证国债指数",
|
||||
}
|
||||
|
||||
# 基准指数
|
||||
BENCHMARK_CODE = "000300.SH"
|
||||
BENCHMARK_NAME = "沪深300指数"
|
||||
27
config/strategies/cci.yaml
Normal file
27
config/strategies/cci.yaml
Normal file
@@ -0,0 +1,27 @@
|
||||
# CCI技术指标筛选配置
|
||||
|
||||
# ==================== 数据源配置 ====================
|
||||
# 数据来源: "postgresql" 或 "akshare"
|
||||
data_source: "postgresql"
|
||||
|
||||
# ==================== 筛选参数 ====================
|
||||
# CCI指标周期
|
||||
day_period: 14
|
||||
week_period: 14
|
||||
|
||||
# 筛选阈值(低于该值视为超卖信号)
|
||||
threshold: -100
|
||||
|
||||
# 数据获取天数(用于计算CCI)
|
||||
lookback_days: 100
|
||||
|
||||
# ==================== 标的池 ====================
|
||||
# 指数代码列表文件路径(CSV格式,需包含"指数代码"和"指数名称"列)
|
||||
index_fund_info_file: "index_fund_info.csv"
|
||||
|
||||
# ==================== 定时任务 ====================
|
||||
# 运行时间(24小时制)
|
||||
schedule_time: "19:00"
|
||||
|
||||
# 是否跳过周末
|
||||
skip_weekend: true
|
||||
56
config/strategies/rotation.yaml
Normal file
56
config/strategies/rotation.yaml
Normal file
@@ -0,0 +1,56 @@
|
||||
# ETF轮动策略配置
|
||||
|
||||
# ==================== 候选池配置 ====================
|
||||
# A股全行业指数代码列表(Tushare格式:XXXXXX.SH / XXXXXX.SZ)
|
||||
code_list:
|
||||
# 宽基指数
|
||||
- "000300.SH" # 沪深300(大盘蓝筹)
|
||||
- "000905.SH" # 中证500(中盘成长)
|
||||
- "000852.SH" # 中证1000(小盘)
|
||||
- "399006.SZ" # 创业板指(创业板龙头)
|
||||
- "000015.SH" # 上证红利(高股息价值)
|
||||
# 金融
|
||||
- "399986.SZ" # 中证银行
|
||||
# 消费
|
||||
- "399997.SZ" # 中证白酒
|
||||
# 医药健康
|
||||
- "399989.SZ" # 中证医疗
|
||||
# 科技信息
|
||||
- "000935.SH" # 中证信息技术
|
||||
# 新能源
|
||||
- "399976.SZ" # 新能源汽车
|
||||
# 周期资源
|
||||
- "399395.SZ" # 国证有色金属
|
||||
- "399998.SZ" # 中证煤炭
|
||||
- "399813.SZ" # 细分化工
|
||||
- "000937.SH" # 中证能源
|
||||
# 其他行业
|
||||
- "399967.SZ" # 中证军工
|
||||
- "000949.SH" # 中证农业
|
||||
- "399702.SZ" # 中证国债指数
|
||||
|
||||
# ==================== 回测参数 ====================
|
||||
start_date: "2018-01-01"
|
||||
end_date: "2025-03-17"
|
||||
|
||||
# ==================== 因子参数 ====================
|
||||
# 动量/趋势窗口期(天数)
|
||||
n_days: 25
|
||||
# 因子类型:'momentum'(N日涨幅)或 'slope_r2'(斜率×R²)
|
||||
factor_type: "slope_r2"
|
||||
|
||||
# ==================== 轮动参数 ====================
|
||||
# 每次轮动选中的ETF数量(1=全仓单一品种)
|
||||
select_num: 5
|
||||
|
||||
# ==================== 调仓控制 ====================
|
||||
# 最低调仓周期(交易日):持仓至少持有 N 天后才允许换仓
|
||||
rebalance_days: 1
|
||||
# 调仓得分阈值:新组合总得分需超过当前组合 X% 才触发调仓
|
||||
rebalance_threshold: 0.0
|
||||
# 单次换仓成本(双边,含佣金+滑点)
|
||||
trade_cost: 0.001
|
||||
|
||||
# ==================== 数据缓存 ====================
|
||||
# 是否使用本地缓存(True=优先从本地读取)
|
||||
use_cache: true
|
||||
Reference in New Issue
Block a user