auto_trade_sys/docs/全局配置与数据库同步.md
薇薇安 0a0bcd941b a
2026-02-01 20:45:18 +08:00

54 lines
2.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 全局配置与数据库同步
## 1. 是否需要“同步到数据库”?
**分两种理解:**
### 1在页面上改完并保存 → 已实现
- **已实现**:在「全局配置」页修改任意配置项并保存时,后端会调用 `update_global_configs_batch`,对每条配置执行 `GlobalStrategyConfig.set(...)`
- `GlobalStrategyConfig.set` 使用 **INSERT ... ON DUPLICATE KEY UPDATE**
- 若该 `config_key` 在表 `global_strategy_config` 中**不存在**,会**插入**一条新记录;
- 若**已存在**,会**更新**该记录的 `config_value`、`config_type`、`category`、`description` 等。
- 因此:**新加的配置项(如 MAX_RSI_FOR_LONG、MIN_RSI_FOR_SHORT 等)只要在页面上改一次并点保存,就会自动写入数据库**,不需要单独“同步到数据库”的步骤。
### 2不打开页面一次性把“缺省值”写入数据库 → 可选脚本
- 若希望新配置项**一开始就出现在数据库里**(方便备份、导出、或不在 UI 改也能看到默认值),可以执行一次**同步缺省脚本**。
- 脚本会检查 `global_strategy_config` 表,对**尚未存在的 key** 插入默认值;**已存在的 key 不会覆盖**。
---
## 2. 已实现的能力小结
| 场景 | 是否已实现 | 说明 |
|------|------------|------|
| 在「全局配置」页修改并保存 | ✅ 是 | 调用 `POST /api/config/global/batch`,写入 `global_strategy_config` 表 |
| 新 key 第一次保存 | ✅ 是 | `GlobalStrategyConfig.set` 用 INSERT ... ON DUPLICATE KEY UPDATE会自动插入新 key |
| 策略/后端读取配置 | ✅ 是 | `config_manager.get_trading_config()` 从全局配置表(及 Redis缺省时用代码里的默认值 |
| 一次性把缺省项写入 DB | ✅ 可选 | 运行 `backend/sync_global_config_defaults.py`(见下) |
---
## 3. 可选:一次性同步缺省到数据库
若希望把**新增的全局配置项默认值**一次性写入 `global_strategy_config` 表(不覆盖已有记录),可在项目根目录或 backend 目录执行:
```bash
# 在项目根目录
cd backend && python sync_global_config_defaults.py
# 或(若 PYTHONPATH 已含 backend
python backend/sync_global_config_defaults.py
```
脚本会:
- 只插入**当前在表中不存在的** `config_key`
- 已存在的 key **不会**被修改;
- 默认会同步的项包括:`MAX_RSI_FOR_LONG`、`MAX_CHANGE_PERCENT_FOR_LONG`、`MIN_RSI_FOR_SHORT`、`MAX_CHANGE_PERCENT_FOR_SHORT`、`TAKE_PROFIT_1_PERCENT`、`SCAN_EXTRA_SYMBOLS_FOR_SUPPLEMENT`、`BETA_FILTER_ENABLED`、`BETA_FILTER_THRESHOLD` 等(见脚本内 `DEFAULTS_TO_SYNC`)。
**结论**
- **需要同步到数据库吗?** 若你会在「全局配置」里改这些项并保存,则**不需要**额外同步,保存即写入数据库。
- **有实现吗?** 有:保存即写入;另提供可选脚本,用于一次性把缺省值写入数据库。