# 开仓计划

中控顶栏 **开仓计划**（`/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` | 单元测试 |
