7.2 KiB
7.2 KiB
全局配置独立化迁移说明
📋 概述
将全局策略配置从依赖 account_id=1 改为独立的配置系统,使用独立的 global_strategy_config 表和 Redis 缓存。
🎯 目标
- ✅ 全局配置不再依赖任何账户(account_id)
- ✅ 独立的数据库表
global_strategy_config - ✅ 独立的 Redis 缓存键
global_strategy_config - ✅ 只有管理员可以查看和修改全局配置
- ✅ 所有账户自动使用全局配置(通过
config_manager.py读取)
📦 数据库变更
1. 创建新表
执行迁移脚本:
mysql -u your_user -p auto_trade_sys < backend/database/add_global_strategy_config.sql
新表结构:
CREATE TABLE `global_strategy_config` (
`id` INT PRIMARY KEY AUTO_INCREMENT,
`config_key` VARCHAR(100) NOT NULL,
`config_value` TEXT NOT NULL,
`config_type` VARCHAR(50) NOT NULL,
`category` VARCHAR(50) NOT NULL,
`description` TEXT,
`updated_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`updated_by` VARCHAR(50),
UNIQUE KEY `uk_config_key` (`config_key`)
)
2. 数据迁移
迁移脚本会自动将 account_id=1 的核心策略配置迁移到 global_strategy_config 表。
迁移规则:
- 只迁移非风险旋钮的配置
- 风险旋钮(
MIN_MARGIN_USDT,MAX_POSITION_PERCENT等)不迁移 - API密钥(
BINANCE_API_KEY,BINANCE_API_SECRET)不迁移
🔧 代码变更
1. 数据库模型 (backend/database/models.py)
新增:GlobalStrategyConfig 类
get_all()- 获取所有全局配置get(key)- 获取单个配置set(key, value, ...)- 设置配置get_value(key, default)- 获取配置值(自动转换类型)delete(key)- 删除配置
2. 配置管理器 (backend/config_manager.py)
新增:GlobalStrategyConfigManager 类
- 独立的 Redis 缓存键:
global_strategy_config - 独立的数据库表:
global_strategy_config - 单例模式,确保全局唯一
修改:ConfigManager.get_trading_config()
- 从
GlobalStrategyConfigManager读取全局配置 - 不再依赖
account_id=1 - 风险旋钮仍从当前账户读取
3. API 路由 (backend/api/routes/config.py)
新增端点:
GET /api/config/global- 获取全局配置(仅管理员)PUT /api/config/global/{key}- 更新单个全局配置(仅管理员)POST /api/config/global/batch- 批量更新全局配置(仅管理员)
修改端点:
GET /api/config/meta- 移除global_strategy_account_id字段
权限控制:
- 所有全局配置端点都检查管理员权限
- 非管理员访问返回 403 错误
4. 前端 API 服务 (frontend/src/services/api.js)
修改:
getGlobalConfigs()- 不再需要globalAccountId参数updateGlobalConfigsBatch()- 不再需要globalAccountId参数
5. 前端组件 (frontend/src/components/GlobalConfig.jsx)
移除:
- 所有对
configMeta.global_strategy_account_id的引用 - 所有对
globalAccountId的计算和使用
简化:
loadConfigs()- 直接调用api.getGlobalConfigs(),无需 account_idhandleApplyPreset()- 直接调用api.updateGlobalConfigsBatch(),无需 account_idbuildConfigSnapshot()- 直接调用api.getGlobalConfigs(),无需 account_id
🔄 迁移步骤
步骤1:执行数据库迁移
cd /path/to/auto_trade_sys
mysql -u your_user -p auto_trade_sys < backend/database/add_global_strategy_config.sql
步骤2:重启后端服务
# 重启 FastAPI 后端
systemctl restart your-backend-service
# 或
supervisorctl restart backend
步骤3:重启交易系统
# 重启所有交易进程,使新配置生效
supervisorctl restart all
步骤4:验证
- 管理员登录,进入"全局配置"页面
- 检查配置项:应该能看到所有核心策略配置
- 修改配置:尝试修改一个配置项,确认保存成功
- 检查数据库:确认
global_strategy_config表中有数据 - 检查 Redis:确认
global_strategy_config键中有缓存
⚠️ 注意事项
1. 向后兼容
- 如果
global_strategy_config表不存在,系统会回退到从account_id=1读取(兼容旧系统) - 迁移脚本会自动迁移现有配置,不会丢失数据
2. Redis 缓存
- 全局配置使用独立的 Redis 键:
global_strategy_config - 账户配置仍使用:
trading_config:{account_id} - 修改全局配置后,会自动更新 Redis 缓存
3. 权限控制
- 管理员:可以查看和修改全局配置
- 普通用户:无法访问全局配置 API(返回 403)
- 普通用户只能修改自己账户的风险旋钮
4. 配置读取优先级
- 风险旋钮:从当前账户的
trading_config表读取 - 核心策略参数:从
global_strategy_config表读取 - API密钥:从
accounts表读取(每个账户独立)
📊 配置分类
全局配置(管理员专用)
ATR_STOP_LOSS_MULTIPLIERATR_TAKE_PROFIT_MULTIPLIERRISK_REWARD_RATIOUSE_FIXED_RISK_SIZINGFIXED_RISK_PERCENTUSE_DYNAMIC_ATR_MULTIPLIERMIN_SIGNAL_STRENGTHSCAN_INTERVALTOP_N_SYMBOLS- ... 等等所有非风险旋钮的配置
账户配置(每个账户独立)
MIN_MARGIN_USDTMIN_POSITION_PERCENTMAX_POSITION_PERCENTMAX_TOTAL_POSITION_PERCENTAUTO_TRADE_ENABLEDMAX_OPEN_POSITIONSMAX_DAILY_ENTRIES
账号私有配置(每个账户独立)
BINANCE_API_KEYBINANCE_API_SECRETUSE_TESTNET
🐛 故障排查
问题1:全局配置无法加载
检查:
- 确认
global_strategy_config表已创建 - 确认表中有数据(执行迁移脚本)
- 检查后端日志,查看是否有错误
解决:
-- 检查表是否存在
SHOW TABLES LIKE 'global_strategy_config';
-- 检查表中是否有数据
SELECT COUNT(*) FROM global_strategy_config;
问题2:管理员无法修改全局配置
检查:
- 确认用户角色是
admin - 检查 API 返回的错误信息
- 检查后端日志
解决:
-- 检查用户角色
SELECT id, username, role FROM users WHERE username = 'your_username';
问题3:交易系统仍使用旧配置
检查:
- 确认 Redis 缓存已更新
- 确认交易系统已重启
- 检查
config_manager.py是否正确读取全局配置
解决:
# 清除 Redis 缓存(可选)
redis-cli DEL global_strategy_config
# 重启交易系统
supervisorctl restart all
✅ 验证清单
- 数据库迁移脚本已执行
global_strategy_config表已创建- 配置数据已迁移
- 后端服务已重启
- 交易系统已重启
- 管理员可以查看全局配置
- 管理员可以修改全局配置
- 普通用户无法访问全局配置
- 所有账户使用相同的全局配置
- Redis 缓存正常工作
📝 总结
全局配置已完全独立化,不再依赖任何账户。所有核心策略参数由管理员统一管理,存储在独立的 global_strategy_config 表中,使用独立的 Redis 缓存键。普通用户只能修改自己账户的风险旋钮,无法影响全局策略。