54 lines
2.9 KiB
Markdown
54 lines
2.9 KiB
Markdown
# 全局配置与数据库同步
|
||
|
||
## 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`)。
|
||
|
||
**结论**:
|
||
- **需要同步到数据库吗?** 若你会在「全局配置」里改这些项并保存,则**不需要**额外同步,保存即写入数据库。
|
||
- **有实现吗?** 有:保存即写入;另提供可选脚本,用于一次性把缺省值写入数据库。
|