# 后续方向实施说明

本文档说明「策略与信号评估及改进建议」中未实现或部分实现的方向，以及固定内容入库的用法。

---

## 一、已完成的改动

### 1. 固定内容入库（交易对 / 费率规则）

- **表**：`market_cache`（见 `backend/database/add_market_cache.sql`）
  - 字段：`cache_key`（如 `exchange_info`、`funding_info`）、`cache_value`（JSON）、`updated_at`
- **模型**：`backend/database/models.py` 中的 `MarketCache`
  - `get_exchange_info(max_age_seconds=86400)` / `set_exchange_info(data)`
  - `get_funding_info(max_age_seconds=86400)` / `set_funding_info(data)`
- **使用**：`trading_system/binance_client.py`
  - `get_all_usdt_pairs()`：优先从 DB 读 `exchange_info`（24 小时内有效），命中则直接解析返回；否则请求 API 并回写 DB。
  - `get_symbol_info(symbol)`：在内存/Redis 未命中时，尝试从 DB 的 `exchange_info` 解析该 symbol；API 拉取后也会回写 DB。

**部署**：执行 `mysql -u root -p auto_trade_sys < backend/database/add_market_cache.sql` 创建表。无需改配置即可生效。

### 2. 扫描阶段资金费率过滤

- **配置**（`trading_system/config.py` 与 DB `trading_config`）：
  - `SCAN_FUNDING_RATE_FILTER_ENABLED`：是否启用（默认 True）
  - `SCAN_FUNDING_RATE_MAX_ABS`：阈值，默认 0.001（即 \|lastFundingRate\| > 0.1% 的标的从扫描候选剔除）
- **逻辑**：在 `market_scanner.scan_market()` 中，在得到「初步筛选后」的 `pre_filtered_symbols` 后，若启用则调用 `get_premium_index(None)` 取全量费率，剔除 \|lastFundingRate\| > 阈值的 symbol，再进入详细分析（K 线/技术指标）。

---

## 二、建议实现顺序（未实现部分）

| 顺序 | 方向           | 说明 |
|------|----------------|------|
| 1    | 跟踪止损       | 浮盈达到 X% 后，用 `TRAILING_STOP_MARKET` 替代或补充固定止盈；配置：`TRAILING_STOP_ENABLED`、`TRAILING_ACTIVATION_PCT`、`TRAILING_CALLBACK_RATE`；在 position_manager 挂完固定 SL/TP 后，达标则下跟踪止损单。 |
| 2    | 时间/无盈利止损 | 持仓时长 > N 小时且浮盈 < 某阈值（或浮亏）→ 市价平仓或提高止损优先级；配置：`MAX_HOLD_HOURS`、`MIN_PNL_PCT_TO_HOLD`；在 position_manager 的检查循环里按 `entry_time` 与当前 pnl% 判断。 |
| 3    | WS 订单/成交优化 | 下单后根据 ORDER_TRADE_UPDATE/TRADE 做快速反馈、部分成交后的加仓/减仓逻辑；实现成本较高，可排在跟踪止损和时间止损之后。 |

---

## 三、跟踪止损（待实现）要点

- **币安**：条件单类型 `TRAILING_STOP_MARKET`，需 `callbackRate`、`activationPrice`（或由系统按比例计算）。
- **配置建议**：与现有 `USE_TRAILING_STOP`、`TRAILING_STOP_ACTIVATION`、`TRAILING_STOP_PROTECT` 对齐，或新增 `TRAILING_ACTIVATION_PCT`、`TRAILING_CALLBACK_RATE` 从 config/DB 读取。
- **位置**：`trading_system/position_manager.py` 中，在挂完固定 SL/TP 后（或定时检查持仓时），若启用且当前浮盈% ≥ 激活比例，则下 `TRAILING_STOP_MARKET`；若已有跟踪止损单则跳过。

---

## 四、时间/无盈利止损（待实现）要点

- **逻辑**：在 position_manager 的持仓检查循环中，读取每仓的 `entry_time` 和当前 pnl%；若 `持仓时长 > MAX_HOLD_HOURS` 且 `pnl_percent < MIN_PNL_PCT_TO_HOLD`（或为负），则触发市价平仓或标记为「建议平仓」。
- **配置**：`MAX_HOLD_HOURS`、`MIN_PNL_PCT_TO_HOLD`，从 config/DB 读。

---

## 五、手续费等固定费率（可选）

若后续要做「预估盈亏」或「最小盈利目标」，可将 maker/taker 费率存入 config 或单独表（如 `symbol_fee`），在算目标价/预期收益时读取。当前未实现。
