# 入场思路记录（entry_context）

## 目的

把「入场原因 + 经历的思路/过程」写入每笔订单，便于事后综合分析策略执行效果：  
不仅看结果（盈/亏、止盈/止损），还能看过程（当时信号强度、市场状态、过滤是否通过等），分析更准确、优化更有依据。

## 实现方式

- **数据库**：`trades` 表新增字段 `entry_context`（JSON，可为空）。
- **写入时机**：自动开仓且订单成交后，在保存交易记录时一并写入。
- **内容**：由策略在开仓前构建一个字典，经 `position_manager` 传给 `Trade.create`，以 JSON 存入。

## entry_context 字段说明

每笔自动开仓订单的 `entry_context` 目前包含（示例）：

| 键 | 类型 | 说明 |
|----|------|------|
| `signal_strength` | int | 信号强度 0–10 |
| `market_regime` | str | 市场状态，如 trending / ranging |
| `trend_4h` | str | 4H 趋势方向（来自策略） |
| `change_percent` | float | 24h 涨跌幅（%） |
| `direction` | str | 交易方向 BUY/SELL |
| `reason` | str | 入场原因文本（与 entry_reason 一致） |
| `rsi` | float | 入场时 RSI（若有） |
| `volume_confirmed` | bool | 是否通过成交量确认 |
| `filters_passed` | list | 通过的过滤项，如 only_trending, should_trade, volume_ok, signal_ok |
| `macd_histogram` | float | 可选，MACD 柱状值 |
| `atr` | float | 可选，入场时 ATR |

后续如需增加「经历的思路」（例如：短周期方向、趋势过滤结果、是否在冷却等），可在 strategy 里往同一 dict 里追加，再写入即可。

## 数据库迁移

首次使用需执行迁移，为 `trades` 表增加 `entry_context` 列：

```bash
# 在 backend 目录或项目根目录执行（按你当前 DB 配置）
mysql -u your_user -p your_db < backend/database/add_entry_context.sql
```

若库中已有该列，脚本会跳过，不会重复添加。

## API 与导出

- **GET /api/trades**：返回的每条交易里会带 `entry_context`；若 DB 驱动返回的是 JSON 字符串，接口会先解析成对象再返回，便于前端或分析脚本使用。
- **导出/统计**：凡基于该 API 或直接查 `trades` 的导出（如「交易记录_xxx.json」），只要包含 `entry_context` 字段，即可用于按「入场思路」做统计与归因分析。

## 分析时怎么用

- **按信号强度**：统计 `entry_context.signal_strength` 与胜率/盈亏比的关系（例如 8 分 vs 9 分的表现）。
- **按市场状态**：对比 `market_regime=trending` 与 `ranging` 下的胜率和平均盈亏。
- **按过滤通过情况**：看 `filters_passed` 与最终结果是否一致（例如 volume_ok 通过后是否仍常止损）。
- **归因单笔**：某笔止损/止盈时，结合 `reason`、`trend_4h`、`rsi` 等还原当时决策依据，判断是信号问题、过滤不足还是行情突变。

这样就能在「只看结果」之外，用「过程 + 结果」一起评估和优化策略。
