""" 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"), } # ==================== 代码映射(默认,可被策略配置覆盖)==================== DEFAULT_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": "中证国债指数", } # 基准指数(默认,可被策略配置覆盖) DEFAULT_BENCHMARK_CODE = "000300.SH" DEFAULT_BENCHMARK_NAME = "沪深300指数"