58 lines
3.0 KiB
Markdown
58 lines
3.0 KiB
Markdown
# 入场思路记录(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` 等还原当时决策依据,判断是信号问题、过滤不足还是行情突变。
|
||
|
||
这样就能在「只看结果」之外,用「过程 + 结果」一起评估和优化策略。
|