# 开仓计划

中控顶栏 **开仓计划**(`/plan`)用于记录开仓前的计划,跟踪进行中条目,并在填写结果后归档;支持按币种,趋势周期,入场方案统计胜率.

## 入口

- 顶栏:**资金概况** 与 **监控区** 之间 → **开仓计划**
- 路由:`/plan`

## 页面结构

| 区域 | 功能 |
|------|------|
| 左侧 · 新建计划 | 填写计划字段,保存后进入「进行中」 |
| 左侧 · 进行中 | 修改,删除,填写结果并归档 |
| 右侧 · 计划历史 | 一行一条摘要,点击查看详情 |
| 右侧 · 数据统计 | 胜率表(可切换维度与时间范围) |

## 字段说明

| 字段 | 说明 |
|------|------|
| 日期 | 计划日期(日期选择器,可手输 `YYYY-MM-DD`) |
| 交易所 | 三所:binance / okx / gate(来自 hub 已启用账户) |
| 币种 | 输入 `BTC` 或 `BTC/USDT`,自动规范为 `XXX/USDT` |
| 类型 | 趋势单 / 波段单 / 日内短线 |
| 趋势周期 | 5m / 15m / 30m / 1h / 4h / 1d |
| 入场周期 | 1m / 5m / 15m / 30m / 1h |
| 方向 | 多 / 空 |
| 目标位 | 文本 |
| 当前区间 | 文本 |
| 入场方案 | **仅进行中**填写:突破 / 假突破 / 箱体拐点(根据实际进场选择;归档前必选) |
| 结果 | **仅进行中**可填:盈 / 亏;**必选其一才归档** |
| 盈亏 | **可选**数字(U),不参与是否归档 |
| 备注 | 文本 |

## 业务流程

1. **新建** → 状态 `active`(进行中),**不含入场方案**
2. **进行中** → 选择/修改 **入场方案**(根据实际进场填写),可改备注,价位等
3. **删除** → 仅 **未填结果** 的进行中计划可删
4. **归档** → 在进行中选择 **盈/亏** 并点「填写结果并归档」→ 状态 `archived`,移入计划历史

## 数据统计

- **默认**:全部历史
- **时间**:全部 / 本周 / 本月 / 自选区间
- **维度 Tab**:币种 | 趋势周期 | 入场方案
- **胜率**:盈利 ÷ (盈利 + 亏损),仅统计已归档且结果=盈/亏 的计划

## API

| 方法 | 路径 | 说明 |
|------|------|------|
| GET | `/api/entry-plans/meta` | 枚举项 + 交易所列表 |
| GET | `/api/entry-plans?status=active\|archived` | 列表 |
| GET | `/api/entry-plans/{id}` | 详情 |
| POST | `/api/entry-plans` | 新建 |
| PATCH | `/api/entry-plans/{id}` | 更新;写入 `result` 时自动归档 |
| DELETE | `/api/entry-plans/{id}` | 删除(仅 active) |
| GET | `/api/entry-plans/stats` | 统计;参数 `dimension`,`period`,`date_from`,`date_to` |

## 存储

- SQLite:`manual_trading_hub/data/hub_entry_plans.db`
- 环境变量:`HUB_ENTRY_PLAN_DB_PATH`(可选自定义路径)

## 部署

```bash
git pull
pm2 restart manual-trading-hub
```

浏览器访问 `/plan` 并 **Ctrl+F5** 强刷静态资源.

## 相关代码

| 文件 | 说明 |
|------|------|
| `hub_entry_plan_lib.py` | 库表,CRUD,统计 |
| `manual_trading_hub/hub.py` | REST API |
| `manual_trading_hub/static/plan.js` | 前端逻辑 |
| `manual_trading_hub/static/index.html` | 页面 DOM |
| `tests/test_hub_entry_plan_lib.py` | 单元测试 |
