Config 架构文档
模块路径: FQBase.Config源码: [FQBase/Config](file:///Users/A.D.189/FQuant/FQuant.Server/FQBase/FQBase/Config)
一、整体架构
┌─────────────────────────────────────────────────────────────────┐
│ 应用层代码 │
│ from FQBase.Config import get_env, Setting, GLOBALMAP │
└─────────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────┐
│ Config 模块 │
│ ┌───────────────────────────────────────────────────────────┐ │
│ │ 核心配置 (core) │ │
│ │ ├── env.py: 环境变量管理 │ │
│ │ ├── setting.py: MongoDB 连接、路径配置 │ │
│ │ ├── cache_config.py: 缓存配置 │ │
│ │ └── config_watcher.py: 配置监听 │ │
│ └───────────────────────────────────────────────────────────┘ │
│ ┌───────────────────────────────────────────────────────────┐ │
│ │ 业务配置 (business) │ │
│ │ ├── constants.py: 交易常量 │ │
│ │ ├── datasource_config.py: 数据源配置 │ │
│ │ ├── financial_mapping.py: 财务指标映射 │ │
│ │ └── ip_list.py: IP 列表配置 │ │
│ └───────────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────────┘二、核心配置架构
2.1 环境变量加载流程
应用启动
│
▼
EnvManager.load_env()
│
▼
┌───────────────────────────────────────────────────────────────┐
│ 1. 检查是否已加载 (_loaded) │
│ 2. 获取 .env 文件路径 │
│ - FQ_ENV_PATH 环境变量 │
│ - 默认: {FQuant}/.env │
│ 3. 调用 load_dotenv() │
│ 4. 设置 _loaded = True │
└───────────────────────────────────────────────────────────────┘
│
▼
get_env() / get_secure_env() 可用2.2 Setting 配置管理
Setting.get_config(section, option, default)
│
▼
┌───────────────────────────────────────────────────────────────┐
│ 1. 尝试从 config.ini 读取 │
│ - 路径: {FQDATA_PATH}/setting/config.ini │
│ - 缓存: 5 秒过期 │
└───────────────────────────────────────────────────────────────┘
│
▼
┌───────────────────────────────────────────────────────────────┐
│ 2. 如果读取失败,从 MongoDB 读取 │
│ - collection: quantaxis.usersetting │
└───────────────────────────────────────────────────────────────┘
│
▼
┌───────────────────────────────────────────────────────────────┐
│ 3. 如果都失败,设置默认值 │
│ - 更新 config.ini │
│ - 更新 MongoDB │
└───────────────────────────────────────────────────────────────┘2.3 GLOBALMAP 路径管理
GLOBALMAP (单例)
│
├── FQDATA_PATH → ~/.fqdata 或 FQUANT_FQDATA_PATH
├── SETTING_PATH → {FQDATA_PATH}/setting
├── CACHE_PATH → {FQDATA_PATH}/cache
├── LOG_PATH → {FQDATA_PATH}/log
├── DOWNLOAD_PATH → {FQDATA_PATH}/downloads
├── STRATEGY_PATH → {FQDATA_PATH}/strategy
├── BIN_PATH → {FQDATA_PATH}/bin
│
└── TODAY → 当前交易日(自动缓存,8:00 更新)三、缓存配置架构
CacheConfig.from_env()
│
▼
┌───────────────────────────────────────────────────────────────┐
│ 从环境变量读取配置 │
│ │
│ CACHE_TYPE: memory/redis/mongo │
│ CACHE_PREFIX: 键前缀 │
│ CACHE_TTL_DEFAULT: 默认过期时间 │
│ │
│ REDIS_HOST/PORT/DB/PASSWORD │
│ MONGO_HOST/PORT/DATABASE/USERNAME/PASSWORD │
└───────────────────────────────────────────────────────────────┘
│
▼
CacheConfig.validate()
│
▼
get_cache_config() → 返回配置实例四、配置监听架构
ConfigWatcher
│
├── 文件状态监控
│ ├── _last_mtime: 修改时间
│ └── _last_size: 文件大小
│
└── 监听模式
├── check_and_reload() # 手动检查
└── start_watching() # 后台线程监控
ConfigWatcherManager
│
├── register() # 注册监听器
├── unregister() # 注销监听器
├── start_all() # 启动所有
└── check_all() # 检查所有五、业务配置架构
business/
│
├── constants.py # 交易常量
│ ├── ORDER_DIRECTION # 订单方向
│ ├── TIME_CONDITION # 时间条件
│ ├── EXCHANGE_ID # 交易所
│ ├── MARKET_TYPE # 市场类型
│ └── ...
│
├── datasource_config.py # 数据源配置
│ ├── DataSourceConfig
│ ├── get_datasource_priority()
│ └── get_health_check_config()
│
├── financial_mapping.py # 财务指标映射
│ ├── FINANCIAL_INDICATORS
│ └── FINANCIAL_CATEGORIES
│
└── ip_list.py # IP 列表
├── TDX_info_ip_list
├── TDX_stock_ip_list
└── TDX_future_ip_list