diff --git a/docs/ETH时段振幅统计-开发方案.md b/docs/ETH时段振幅统计-开发方案.md new file mode 100644 index 0000000..da73438 --- /dev/null +++ b/docs/ETH时段振幅统计-开发方案.md @@ -0,0 +1,262 @@ +# 标的时段振幅统计 — 开发方案 + +> 状态:**方案冻结**(按本文实现;改需求先改本文). +> 范围:**中控**新增只读统计工具;不改开平仓、不接 AI 教练(首版). +> 数据源:**仅 OKX**. +> 相关:[交易执行手册-期权与Gate.md](./交易执行手册-期权与Gate.md)(16:00 会话窗纪律) · [振幅统计说明.md](./振幅统计说明.md)(实现后用户说明) + +--- + +## 1. 目标 + +在中控提供 **自定义时段、固定 16:00 收窗** 的历史振幅档案: + +- **标的下拉**:`ETH` / `BTC`(默认 ETH) +- 按整点起点 + **终点固定北京时间 16:00** 切出每日统计窗 +- 回溯周期可选(1 月 / 2 月 / 3 月 / 半年 / 1 年 / 自定义) +- 日表明细分页展示;下方为汇总统计 +- 每次有效计算可写入 **历史**;支持 **下载**(明细 + 统计摘要) + +定位:服务一天期期权开仓前的「空间」判断(已实现波动点数档案),**不算 IV / 权利金 / Greeks**. + +--- + +## 2. 不做(首版外) + +- 币安 / Gate 等非 OKX 价源 +- 百分比振幅列(可后加「参考 %」,不进必须统计) +- 未完成窗(当天尚未到 16:00)计入样本 +- 自动推送企业微信 / 注入交易教练 +- 中控代下单或改期权仓 + +--- + +## 3. 时间与样本规则 + +### 3.1 时区与终点 + +- 时区:**Asia/Shanghai(北京时间)** +- **到期/收窗时刻固定 `16:00`**,不可改 +- 起点时刻:**仅整点** `00:00`~`23:00`(下拉选择) + +### 3.2 跨天切窗(结算日 D) + +对每个结算日 **D**(窗终点 = `D 日 16:00`): + +| 起点整点 T | 窗起点 | 窗终点 | +|------------|--------|--------| +| `T >= 16:00` | **D-1 日 T:00** | D 日 16:00 | +| `T < 16:00` | **D 日 T:00** | D 日 16:00 | + +示例: + +| 用户选择 | 某一结算日 D 的实际窗 | +|----------|------------------------| +| 16:00 → 16:00 | D-1 16:00 → D 16:00 | +| 22:00 → 16:00 | D-1 22:00 → D 16:00 | +| 08:00 → 16:00 | D 08:00 → D 16:00 | + +### 3.3 回溯周期 + +| 选项 | 含义(完整收窗个数,约) | +|------|------------------------| +| 1 个月 | 约 30 个结算日 | +| 2 个月 | 约 60 个结算日(默认推荐) | +| 3 个月 | 约 90 个结算日 | +| 半年 | 约 180 个结算日 | +| 1 年 | 约 365 个结算日 | +| 自定义 | 用户输入天数 N(`7`~`400`,可配置上下限) | + +说明: + +- 「月」按 **日历回溯 + 完整 16:00 收窗** 计数,不足整天的末日不入样 +- 仅纳入 **已结束** 的窗(`now >= D 16:00`);进行中的今天不入样 + +### 3.4 标的与价源(OKX) + +| UI 下拉 | 价源(优先) | 降级(仅指数失败时) | +|---------|------------|---------------------| +| **ETH** | OKX **ETH-USD 指数** | OKX `ETH/USDT` 永续标记 | +| **BTC** | OKX **BTC-USD 指数** | OKX `BTC/USDT` 永续标记 | + +约束: + +- **交易所固定 OKX**,UI 不提供其它所 +- 具体指数/合约符号以实现时 OKX 接口与 `hub_ohlcv` 对齐为准;结果与下载须标注 `exchange=okx` + 实际价源 +- K 线粒度:**1H**(与整点起止对齐,优先);同一作业内不得混用粒度.若后续要更细高低点,可升 5m/1m(P2) + +--- + +## 4. 指标口径(点数,非百分比) + +全部为 **绝对价格点数**(标的报价差;BTC/ETH 各自用自身价格刻度). + +设窗内: + +- `O` = 起点时刻价(或起点分钟 K 的 open) +- `H` = 窗内最高 +- `L` = 窗内最低 +- `C` = 终点 16:00 价(或该分钟 close) + +| 字段 | 算法 | 例(O=2000,H=2500,L=1800) | +|------|------|---------------------------| +| 开盘价 | `O` | 2000 | +| 最高价 | `H` | 2500 | +| 最低价 | `L` | 1800 | +| 收盘/窗末价 | `C` | (另算) | +| 开→高距离 | `H − O` | **500** | +| 开→低距离 | `O − L` | **200** | +| **振幅** | `(H−O)+(O−L)` = **`H−L`** | **700** | +| 涨跌值 | `C − O`(可正负) | 可选列,首版建议保留 | + +**必须统计(汇总层):** + +- **最大振幅**(值 + 对应结算日) +- **开→高距离**:最大、均值(建议) +- **开→低距离**:最大、均值(建议) + +可选汇总(首版建议带上,成本低): + +- 振幅均值 / 中位数 +- 上涨窗占比(`C>O`)、下跌窗占比 +- 振幅 ≥ 用户阈值 X 点数的天数(X 可填,默认空=不算) + +--- + +## 5. 界面(中控) + +### 5.1 入口 + +- 顶栏新增导航项:**「振幅统计」**或 **「期权统计」**(最终文案实现时定一处;设置里可隐藏) +- 手机端进「更多」 + +### 5.2 Tab + +| Tab | 作用 | +|-----|------| +| **统计** | 配参数 → 计算 → 看日表+汇总 → 下载 / 存历史 | +| **历史** | 过往作业列表;打开复看;再下载 | + +### 5.3 「统计」页布局 + +1. **参数区** + - **标的**:下拉 `ETH` / `BTC`(默认 ETH) + - 数据源:只读展示 `OKX` + - 起点整点:下拉 `00`~`23`(默认 `16`) + - 终点:固定展示 `16:00`(不可改) + - 周期:单选 `1月 / 2月 / 3月 / 半年 / 1年 / 自定义` + - 自定义天数:仅自定义时显示 + - 按钮:`计算` · `保存到历史` · `下载` +2. **日表明细**(分页,如每页 20 行;排序默认结算日倒序) +3. **下方汇总区**(本次全样本,不是当前页) + +### 5.4 「历史」页 + +每条记录至少: + +- 创建时间、**标的**、起点整点、周期/天数、价源(OKX+指数/标记)、样本数 +- 最大振幅(+日期) +- 操作:查看 / 下载 / 删除 + +**写入规则(建议):** 用户点击 **「保存到历史」** 才入库;仅点「计算」不自动灌历史(避免误点刷屏).若产品坚持「输入一次就算进历史」,可改为计算成功自动写入——实现前在本文改为冻结口径. + +> 当前方案冻结倾向:**显式「保存到历史」**. + +--- + +## 6. 下载 + +格式:优先 **CSV**(UTF-8 BOM,Excel 可开);或单文件双段. + +必须包含: + +1. **日表明细**(本次全部结算日,非当前页) +2. **统计摘要**:标的、交易所 OKX、价源、最大振幅(+日)、开→高最大/均值、开→低最大/均值、样本数、起点整点、终点 16:00、周期、生成时间 + +文件名示例:`okx_eth_amp_22to16_60d_20260723.csv` / `okx_btc_amp_16to16_90d_20260723.csv` + +--- + +## 7. 数据与实现要点 + +### 7.1 复用 + +- 优先复用中控 `hub_ohlcv` / `hub_kline_store`,按 `exchange_key=okx` + 标的对应指数/合约拉齐历史 K 线并本地缓存 +- 首次 1 年 × 1m 数据量较大:计算前检查缓存覆盖;缺口再增量拉取;UI 显示进度/耗时提示 +- BTC / ETH 缓存键分离 + +### 7.2 后端模块(建议) + +| 路径 | 职责 | +|------|------| +| `lib/hub/amp_stats_lib.py` | 标的映射、切窗、算日行、汇总 | +| `manual_trading_hub/` 路由 + 静态页 | UI / API | +| `manual_trading_hub/amp_stats_history.json`(或 sqlite) | 历史作业 | + +### 7.3 API 草稿 + +| 方法 | 路径 | 说明 | +|------|------|------| +| `POST` | `/api/amp-stats/compute` | body: `symbol`(eth\|btc), start_hour, period\|days → 日表+汇总 | +| `GET` | `/api/amp-stats/history` | 历史列表(可按 symbol 筛选) | +| `POST` | `/api/amp-stats/history` | 保存当前结果 | +| `GET` | `/api/amp-stats/history/{id}` | 详情 | +| `DELETE` | `/api/amp-stats/history/{id}` | 删除 | +| `GET` | `/api/amp-stats/export` | query 或 history id → 文件下载 | + +### 7.4 性能 + +- 2 个月 × 1m:可接受同步(数十秒级需有 loading) +- 1 年:建议异步任务或分块拉齐后再算;首版可限制「自定义 > 180 天」需确认二次点击 + +--- + +## 8. 验收清单 + +- [ ] 标的下拉 ETH / BTC 可切换;数据源固定 OKX +- [ ] 起点仅整点;终点 UI 固定 16:00 +- [ ] `22→16` / `16→16` / `08→16` 跨天规则与 §3.2 一致 +- [ ] 周期六档 + 自定义天数生效;默认 2 个月 +- [ ] 日表含:开高低收、开→高、开→低、振幅(点数)、涨跌值 +- [ ] 例:O=2000,H=2500,L=1800 → 开→高 500、开→低 200、振幅 700 +- [ ] 汇总含最大振幅(+日)、开→高/开→低统计 +- [ ] 分页只影响展示;汇总与下载用全样本 +- [ ] 未到 16:00 的当日不入样 +- [ ] 保存历史含标的字段 / 回看 / 删除 +- [ ] 下载含明细 + 统计摘要(含标的与 OKX) +- [ ] 电脑与手机均可完成计算与下载(手机下载走系统分享/保存即可) + +--- + +## 9. 分期 + +| 阶段 | 内容 | +|------|------| +| **P0** | 统计 Tab:标的下拉(ETH/BTC) + 参数 + 计算 + 日表分页 + 汇总 + 下载(不经历史) | +| **P1** | 历史 Tab:保存 / 列表 / 回看 / 再下载 / 删除 | +| **P2** | 缓存加速、长周期异步、振幅阈值天数、可选 % 参考列 | + +--- + +## 10. 待冻结(实现前确认) + +| # | 问题 | 当前倾向 | +|---|------|----------| +| 1 | 历史写入:自动 vs 点保存 | **点保存** | +| 2 | 下载 CSV vs Excel | **CSV** | +| 3 | 价源 | **OKX 指数优先**(ETH-USD / BTC-USD);失败再降级永续标记 | +| 4 | K 线 1m vs 5m vs 1H | **1H**(整点窗) | +| 5 | 导航文案 | **「振幅统计」** | + +**已冻结(开工口径):** 点保存进历史 · CSV · OKX 指数优先 · **1H K 线**(整点对齐,降低拉取量;与整点窗一致) · 导航「振幅统计」. + +确认后将本文状态改为 **方案冻结**,再开工实现. + +--- + +## 11. 修订记录 + +| 日期 | 说明 | +|------|------| +| 2026-07-23 | 初稿:中控 ETH 时段振幅统计;点数口径;周期档位;16:00 固定收窗;历史+下载 | +| 2026-07-23 | 支持 BTC/ETH 下拉;数据源固定 OKX 指数(可降级永续标记);模块/API 改名为 amp-stats | diff --git a/docs/快照备份.md b/docs/快照备份.md index 60b6717..24f3918 100644 --- a/docs/快照备份.md +++ b/docs/快照备份.md @@ -6,6 +6,7 @@ | 标签 | 指向提交 | 说明 | |------|----------|------| +| `snapshot/20260723-pre-amp-stats` | (打标签后填入) | 2026-07-23:振幅统计开发前;含执行手册进教练、日亏损冻结、手机监控 UI、振幅统计开发方案等 | | `snapshot/20260721-2` | `a721642` | 2026-07-21 晚:日亏损次数冻结、交易执行手册入中控策略说明、期权/Gate 执行手册文档等 | | `snapshot/20260721` | `1a163c0` | 2026-07-21:仓库代码统计文档、期权复盘亮色主题、对冲腿盈亏时区修复、本快照说明等 | @@ -26,11 +27,10 @@ git tag -l 'snapshot/*' # 检出快照(只读查看,勿在此分支直接开发) -git checkout snapshot/20260721-2 +git checkout snapshot/20260723-pre-amp-stats # 回到主线 git checkout main ``` 数据备份(SQLite / 中控 JSON)走中控备份或各所 `scripts/backup_data.sh`,**不要**把含密钥的 `.env` 与库文件提交进 Git。 -