Normalize fullwidth punctuation to ASCII across codebase.
Add scripts/normalize_ambiguous_unicode.py; fix corrupted patch_instance_theme_templates.py. Preserves curly quotes in string literals; removes Git homoglyph warnings on .env.example. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
+130
-130
@@ -1,130 +1,130 @@
|
||||
# 账户冷静期 / 日冻结风控
|
||||
|
||||
三所实例(币安 / OKX / Gate / Gate)共用 `account_risk_lib.py`。
|
||||
**仅用户主动平仓**计入风控;交易所止盈/止损、空仓同步、改保本/改委托等**不触发**冷静期。
|
||||
|
||||
## 状态展示
|
||||
|
||||
实例页顶、中控监控卡片账户名旁显示风控徽章:
|
||||
|
||||
| 状态 | 含义 | 倒计时 |
|
||||
|------|------|--------|
|
||||
| 正常 | 可新开仓 | 无 |
|
||||
| 1h冻结 | 冷静期中(通常为复盘后缩短的 1 小时) | 剩余时间,如 `1h冻结 · 52m 08s` |
|
||||
| 4h冻结 | 冷静期中(默认 4 小时) | 剩余时间,如 `4h冻结 · 3h 12m` |
|
||||
| 日冻结 | 当日禁止一切新开仓 | 至下一 **交易日切点**(`TRADING_DAY_RESET_HOUR`) |
|
||||
|
||||
- 倒计时每秒刷新;到期后徽章自动恢复为 **正常**(下次轮询/API 刷新会再次对齐服务端状态)。
|
||||
- 鼠标悬停徽章可见完整说明(含解除时刻,如有)。
|
||||
|
||||
## 什么算「手动平仓」(计入风控)
|
||||
|
||||
以下操作通过 `close_source` 登记为 **用户主动平仓**:
|
||||
|
||||
| 来源标识 | 操作 |
|
||||
|----------|------|
|
||||
| `user_instance` | 实例页删单/手动平仓(`del_order`) |
|
||||
| `user_hub` | 中控「平仓」「全平」「紧急全平」 |
|
||||
| `user_trend_stop` | 趋势计划 **「结束计划」**(手动结束) |
|
||||
|
||||
**不算**手动平仓(不触发风控):
|
||||
|
||||
- 趋势 **「保本移交下单监控」**
|
||||
- 中控/实例修改委托、挂止盈止损、移动保本
|
||||
- 交易所止盈/止损/条件单成交
|
||||
- 后台 `reconcile_external_closes` 空仓同步(即使记账为「外部平仓」)
|
||||
- 监控轮询自动止盈/止损/保本
|
||||
|
||||
## 触发规则
|
||||
|
||||
| 事件 | 行为 |
|
||||
|------|------|
|
||||
| 第 1 次用户主动平仓 | 默认 **4h** 冷静期 |
|
||||
| 第 2 次用户主动平仓(同一交易日) | **日冻结** |
|
||||
| 复盘勾选任意情绪标签 | **日冻结** |
|
||||
| 复盘:离场=手动平仓 且说明非空 | 将当前冷静期降为 **1h**(须处于 4h 档冷静期中) |
|
||||
|
||||
情绪标签:怕踏空、报复开仓、盈利飘了、拿不住单、扛单、重仓违规。
|
||||
|
||||
### 复盘缩短为 1h
|
||||
|
||||
任选一种方式,并填写说明:
|
||||
|
||||
| 方式 | 必填 |
|
||||
|------|------|
|
||||
| **复盘表单**提交 | 离场触发 = **手动平仓**;**离场补充** 非空(不是下方「备注」) |
|
||||
| **核对修改**保存 | 结果 = **手动平仓**;**备注** 非空 |
|
||||
|
||||
说明:
|
||||
|
||||
- 中控全平 / 实例手动平仓后,只要在 4h 窗口内完成上述操作即可降为 1h。
|
||||
- 复盘保存后会同步更新 `last_close_at_ms`,倒计时以 **最后一次手动平仓 + 当前档位数** 为准,不会继续读库内旧 4h 结束时间。
|
||||
- 1h 窗口已结束后,即使库里残留旧 `cooloff_until_ms`,状态也会恢复 **正常**。
|
||||
- 若超过「平仓 + 1h」才复盘,则从 **保存复盘时刻** 起再计 1h(不延长原 4h)。
|
||||
- **止盈 / 保本止盈 / 止损** 等自动平仓不触发风控,也不会刷新冷静期。
|
||||
- 代码更新后需 **重启对应实例** 并硬刷新页面。
|
||||
|
||||
### 倒计时与标签
|
||||
|
||||
- 结束时刻 = `last_close_at_ms + cooloff_hours`(`APP_TIMEZONE` 默认北京时间)
|
||||
- 1h / 4h 标签按实际剩余时长判断,与倒计时一致
|
||||
- 切交易日后,若冷静期已过期,自动清库内残留字段
|
||||
|
||||
## 环境变量
|
||||
|
||||
```env
|
||||
RISK_CONTROL_ENABLED=true
|
||||
RISK_COOLING_HOURS_MANUAL=4
|
||||
RISK_COOLING_HOURS_MANUAL_JOURNAL=1
|
||||
RISK_MANUAL_CLOSE_DAILY_LIMIT=2
|
||||
RISK_MOOD_ISSUES_DAILY_FREEZE=true
|
||||
TRADING_DAY_RESET_HOUR=8
|
||||
APP_TIMEZONE=Asia/Shanghai
|
||||
```
|
||||
|
||||
`RISK_COOLING_HOURS_EXTERNAL` 已废弃(外部平仓不再触发风控)。
|
||||
|
||||
## API 与 `risk_status` 字段
|
||||
|
||||
| 接口 | 说明 |
|
||||
|------|------|
|
||||
| `GET /api/account_snapshot` | 实例页轮询,含 `risk_status` |
|
||||
| `GET /api/account_risk_status` | hub_bridge 专用 |
|
||||
| `GET /api/hub/monitor` | 中控监控板,每账户含 `risk_status` |
|
||||
| `POST /api/hub/account-risk/user-close` | 中控登记用户平仓,`body: { source, count }` |
|
||||
|
||||
`risk_status` 主要字段:
|
||||
|
||||
| 字段 | 说明 |
|
||||
|------|------|
|
||||
| `status` | `normal` / `freeze_1h` / `freeze_4h` / `freeze_daily` / `freeze_position` |
|
||||
| `status_label` | 中文标签 |
|
||||
| `can_trade` | 是否允许新开仓(仅风控维度) |
|
||||
| `reason` | 悬停提示文案 |
|
||||
| `active_count` / `max_active_positions` | 当前活跃持仓与 `.env` 中 `MAX_ACTIVE_POSITIONS` |
|
||||
| `cooloff_until_ms` | 1h/4h 冷静期结束时间戳(毫秒) |
|
||||
| `freeze_until_ms` | 倒计时结束时间戳(日冻结为下一交易日切点) |
|
||||
| `freeze_remaining_sec` | 服务端计算的剩余秒数(供调试) |
|
||||
|
||||
**仓位上限冻结**:当 **计入上限的** 活跃持仓数(不含趋势回调)≥ 实例 `.env` 的 `MAX_ACTIVE_POSITIONS`(默认 1)且账户无时间类冻结时,徽章显示 **仓位上限冻结**;此时 **新开仓** 被禁止,但 **顺势加仓**(在已有同向监控持仓上加仓)仍可用。仅存在趋势回调持仓时不触发该冻结。时间冻结(1h/4h/日)优先展示。
|
||||
|
||||
`risk_status.can_roll`:仓位上限冻结时为 `true`,表示顺势加仓不受该冻结限制。
|
||||
|
||||
## 前端倒计时
|
||||
|
||||
- 共用脚本:`static/account_risk_badge.js?v=4`
|
||||
- 样式:`static/account_risk_badge.css`
|
||||
- 展示格式:`4h冻结 · 3h 12m`;日冻结为距下一交易日切点剩余时间
|
||||
- 倒计时优先用服务端 `freeze_remaining_sec` 推算结束时刻,避免绝对时间戳与时区/脏数据偏差
|
||||
- 服务端在冷静期**已结束**或锚点无效时**自动清库**,避免重启后误读旧 `account_risk_state` 仍显示冻结
|
||||
- 无效的未来 `last_close_at_ms` **不会**被当作「现在」重启计时
|
||||
- 若当日手动平仓**已复盘**(journal 有说明)且 1h 窗口已过,即使 risk 表被误写也会强制恢复 **正常**
|
||||
- 勿与交易记录列表中的历史平仓时间混淆:风控只看 `account_risk_state` 表内 **最后一次用户主动平仓** 及其复盘结果
|
||||
|
||||
## 相关代码
|
||||
|
||||
- `account_risk_lib.py` — 状态机、`enrich_risk_status_countdown`、`apply_position_limit_risk`、`on_user_initiated_close`
|
||||
- `hub_bridge.py` — `/api/hub/account-risk/user-close`
|
||||
- `manual_trading_hub/hub.py` — 中控平仓成功后调用 user-close
|
||||
- `strategy_trend_register.py` — `stop_trend_pullback` 结束计划时登记风控
|
||||
- `tests/test_account_risk_lib.py`
|
||||
# 账户冷静期 / 日冻结风控
|
||||
|
||||
三所实例(币安 / OKX / Gate / Gate)共用 `account_risk_lib.py`.
|
||||
**仅用户主动平仓**计入风控;交易所止盈/止损,空仓同步,改保本/改委托等**不触发**冷静期.
|
||||
|
||||
## 状态展示
|
||||
|
||||
实例页顶,中控监控卡片账户名旁显示风控徽章:
|
||||
|
||||
| 状态 | 含义 | 倒计时 |
|
||||
|------|------|--------|
|
||||
| 正常 | 可新开仓 | 无 |
|
||||
| 1h冻结 | 冷静期中(通常为复盘后缩短的 1 小时) | 剩余时间,如 `1h冻结 · 52m 08s` |
|
||||
| 4h冻结 | 冷静期中(默认 4 小时) | 剩余时间,如 `4h冻结 · 3h 12m` |
|
||||
| 日冻结 | 当日禁止一切新开仓 | 至下一 **交易日切点**(`TRADING_DAY_RESET_HOUR`) |
|
||||
|
||||
- 倒计时每秒刷新;到期后徽章自动恢复为 **正常**(下次轮询/API 刷新会再次对齐服务端状态).
|
||||
- 鼠标悬停徽章可见完整说明(含解除时刻,如有).
|
||||
|
||||
## 什么算「手动平仓」(计入风控)
|
||||
|
||||
以下操作通过 `close_source` 登记为 **用户主动平仓**:
|
||||
|
||||
| 来源标识 | 操作 |
|
||||
|----------|------|
|
||||
| `user_instance` | 实例页删单/手动平仓(`del_order`) |
|
||||
| `user_hub` | 中控「平仓」「全平」「紧急全平」 |
|
||||
| `user_trend_stop` | 趋势计划 **「结束计划」**(手动结束) |
|
||||
|
||||
**不算**手动平仓(不触发风控):
|
||||
|
||||
- 趋势 **「保本移交下单监控」**
|
||||
- 中控/实例修改委托,挂止盈止损,移动保本
|
||||
- 交易所止盈/止损/条件单成交
|
||||
- 后台 `reconcile_external_closes` 空仓同步(即使记账为「外部平仓」)
|
||||
- 监控轮询自动止盈/止损/保本
|
||||
|
||||
## 触发规则
|
||||
|
||||
| 事件 | 行为 |
|
||||
|------|------|
|
||||
| 第 1 次用户主动平仓 | 默认 **4h** 冷静期 |
|
||||
| 第 2 次用户主动平仓(同一交易日) | **日冻结** |
|
||||
| 复盘勾选任意情绪标签 | **日冻结** |
|
||||
| 复盘:离场=手动平仓 且说明非空 | 将当前冷静期降为 **1h**(须处于 4h 档冷静期中) |
|
||||
|
||||
情绪标签:怕踏空,报复开仓,盈利飘了,拿不住单,扛单,重仓违规.
|
||||
|
||||
### 复盘缩短为 1h
|
||||
|
||||
任选一种方式,并填写说明:
|
||||
|
||||
| 方式 | 必填 |
|
||||
|------|------|
|
||||
| **复盘表单**提交 | 离场触发 = **手动平仓**;**离场补充** 非空(不是下方「备注」) |
|
||||
| **核对修改**保存 | 结果 = **手动平仓**;**备注** 非空 |
|
||||
|
||||
说明:
|
||||
|
||||
- 中控全平 / 实例手动平仓后,只要在 4h 窗口内完成上述操作即可降为 1h.
|
||||
- 复盘保存后会同步更新 `last_close_at_ms`,倒计时以 **最后一次手动平仓 + 当前档位数** 为准,不会继续读库内旧 4h 结束时间.
|
||||
- 1h 窗口已结束后,即使库里残留旧 `cooloff_until_ms`,状态也会恢复 **正常**.
|
||||
- 若超过「平仓 + 1h」才复盘,则从 **保存复盘时刻** 起再计 1h(不延长原 4h).
|
||||
- **止盈 / 保本止盈 / 止损** 等自动平仓不触发风控,也不会刷新冷静期.
|
||||
- 代码更新后需 **重启对应实例** 并硬刷新页面.
|
||||
|
||||
### 倒计时与标签
|
||||
|
||||
- 结束时刻 = `last_close_at_ms + cooloff_hours`(`APP_TIMEZONE` 默认北京时间)
|
||||
- 1h / 4h 标签按实际剩余时长判断,与倒计时一致
|
||||
- 切交易日后,若冷静期已过期,自动清库内残留字段
|
||||
|
||||
## 环境变量
|
||||
|
||||
```env
|
||||
RISK_CONTROL_ENABLED=true
|
||||
RISK_COOLING_HOURS_MANUAL=4
|
||||
RISK_COOLING_HOURS_MANUAL_JOURNAL=1
|
||||
RISK_MANUAL_CLOSE_DAILY_LIMIT=2
|
||||
RISK_MOOD_ISSUES_DAILY_FREEZE=true
|
||||
TRADING_DAY_RESET_HOUR=8
|
||||
APP_TIMEZONE=Asia/Shanghai
|
||||
```
|
||||
|
||||
`RISK_COOLING_HOURS_EXTERNAL` 已废弃(外部平仓不再触发风控).
|
||||
|
||||
## API 与 `risk_status` 字段
|
||||
|
||||
| 接口 | 说明 |
|
||||
|------|------|
|
||||
| `GET /api/account_snapshot` | 实例页轮询,含 `risk_status` |
|
||||
| `GET /api/account_risk_status` | hub_bridge 专用 |
|
||||
| `GET /api/hub/monitor` | 中控监控板,每账户含 `risk_status` |
|
||||
| `POST /api/hub/account-risk/user-close` | 中控登记用户平仓,`body: { source, count }` |
|
||||
|
||||
`risk_status` 主要字段:
|
||||
|
||||
| 字段 | 说明 |
|
||||
|------|------|
|
||||
| `status` | `normal` / `freeze_1h` / `freeze_4h` / `freeze_daily` / `freeze_position` |
|
||||
| `status_label` | 中文标签 |
|
||||
| `can_trade` | 是否允许新开仓(仅风控维度) |
|
||||
| `reason` | 悬停提示文案 |
|
||||
| `active_count` / `max_active_positions` | 当前活跃持仓与 `.env` 中 `MAX_ACTIVE_POSITIONS` |
|
||||
| `cooloff_until_ms` | 1h/4h 冷静期结束时间戳(毫秒) |
|
||||
| `freeze_until_ms` | 倒计时结束时间戳(日冻结为下一交易日切点) |
|
||||
| `freeze_remaining_sec` | 服务端计算的剩余秒数(供调试) |
|
||||
|
||||
**仓位上限冻结**:当 **计入上限的** 活跃持仓数(不含趋势回调)≥ 实例 `.env` 的 `MAX_ACTIVE_POSITIONS`(默认 1)且账户无时间类冻结时,徽章显示 **仓位上限冻结**;此时 **新开仓** 被禁止,但 **顺势加仓**(在已有同向监控持仓上加仓)仍可用.仅存在趋势回调持仓时不触发该冻结.时间冻结(1h/4h/日)优先展示.
|
||||
|
||||
`risk_status.can_roll`:仓位上限冻结时为 `true`,表示顺势加仓不受该冻结限制.
|
||||
|
||||
## 前端倒计时
|
||||
|
||||
- 共用脚本:`static/account_risk_badge.js?v=4`
|
||||
- 样式:`static/account_risk_badge.css`
|
||||
- 展示格式:`4h冻结 · 3h 12m`;日冻结为距下一交易日切点剩余时间
|
||||
- 倒计时优先用服务端 `freeze_remaining_sec` 推算结束时刻,避免绝对时间戳与时区/脏数据偏差
|
||||
- 服务端在冷静期**已结束**或锚点无效时**自动清库**,避免重启后误读旧 `account_risk_state` 仍显示冻结
|
||||
- 无效的未来 `last_close_at_ms` **不会**被当作「现在」重启计时
|
||||
- 若当日手动平仓**已复盘**(journal 有说明)且 1h 窗口已过,即使 risk 表被误写也会强制恢复 **正常**
|
||||
- 勿与交易记录列表中的历史平仓时间混淆:风控只看 `account_risk_state` 表内 **最后一次用户主动平仓** 及其复盘结果
|
||||
|
||||
## 相关代码
|
||||
|
||||
- `account_risk_lib.py` — 状态机,`enrich_risk_status_countdown`,`apply_position_limit_risk`,`on_user_initiated_close`
|
||||
- `hub_bridge.py` — `/api/hub/account-risk/user-close`
|
||||
- `manual_trading_hub/hub.py` — 中控平仓成功后调用 user-close
|
||||
- `strategy_trend_register.py` — `stop_trend_pullback` 结束计划时登记风控
|
||||
- `tests/test_account_risk_lib.py`
|
||||
|
||||
+45
-45
@@ -1,45 +1,45 @@
|
||||
# 每日自动划转(三所统一)
|
||||
|
||||
## 行为
|
||||
|
||||
在 `.env` 开启 `AUTO_TRANSFER_ENABLED=true` 后,监控轮询在**北京时间 `AUTO_TRANSFER_BJ_HOUR` 整点所在小时**内(默认 8:00–8:59)执行一次(按 **UTC 自然日** 去重):
|
||||
|
||||
| 交易账户 (`AUTO_TRANSFER_TO`,默认 swap) | 动作 |
|
||||
|------------------------------------------|------|
|
||||
| 余额 **低于** `AUTO_TRANSFER_AMOUNT` | 从 `AUTO_TRANSFER_FROM`(默认 funding)划入差额 |
|
||||
| 余额 **高于** `AUTO_TRANSFER_AMOUNT` | 将多余划回 `AUTO_TRANSFER_FROM` |
|
||||
| 与目标相差 < 0.01U | 跳过,不写划转 |
|
||||
| 存在 **active** 持仓(`order_monitors`,或 Gate回调已开仓计划) | **不划转**,写账簿 `skipped`,并**企业微信**说明「持仓中,本次资金无划转」 |
|
||||
|
||||
## 配置示例(目标 50U)
|
||||
|
||||
```env
|
||||
AUTO_TRANSFER_ENABLED=true
|
||||
AUTO_TRANSFER_AMOUNT=50
|
||||
AUTO_TRANSFER_FROM=funding
|
||||
AUTO_TRANSFER_TO=swap
|
||||
AUTO_TRANSFER_BJ_HOUR=8
|
||||
```
|
||||
|
||||
`AUTO_TRANSFER_AMOUNT` 与 `DAILY_START_CAPITAL`(每日开仓基数)**独立**。
|
||||
|
||||
API Key 须具备万向划转权限(与手动划转相同)。
|
||||
|
||||
## 用脚本更新三所 `.env`
|
||||
|
||||
详见 **[env-sync-scripts.md](./env-sync-scripts.md)**。常用命令:
|
||||
|
||||
```bash
|
||||
git pull
|
||||
|
||||
# 仅补全划转相关项
|
||||
python scripts/sync_four_exchange_transfer_env.py
|
||||
|
||||
# 目标 50U 并开启自动划转
|
||||
python scripts/sync_four_exchange_transfer_env.py --set-amount 50 --enable-auto-transfer
|
||||
|
||||
# 计仓 + 划转一并补全
|
||||
python scripts/sync_four_exchange_env.py --set-transfer-amount 50 --enable-auto-transfer
|
||||
|
||||
pm2 restart crypto-monitor-binance crypto-monitor-okx crypto-monitor-gate
|
||||
```
|
||||
# 每日自动划转(三所统一)
|
||||
|
||||
## 行为
|
||||
|
||||
在 `.env` 开启 `AUTO_TRANSFER_ENABLED=true` 后,监控轮询在**北京时间 `AUTO_TRANSFER_BJ_HOUR` 整点所在小时**内(默认 8:00–8:59)执行一次(按 **UTC 自然日** 去重):
|
||||
|
||||
| 交易账户 (`AUTO_TRANSFER_TO`,默认 swap) | 动作 |
|
||||
|------------------------------------------|------|
|
||||
| 余额 **低于** `AUTO_TRANSFER_AMOUNT` | 从 `AUTO_TRANSFER_FROM`(默认 funding)划入差额 |
|
||||
| 余额 **高于** `AUTO_TRANSFER_AMOUNT` | 将多余划回 `AUTO_TRANSFER_FROM` |
|
||||
| 与目标相差 < 0.01U | 跳过,不写划转 |
|
||||
| 存在 **active** 持仓(`order_monitors`,或 Gate回调已开仓计划) | **不划转**,写账簿 `skipped`,并**企业微信**说明「持仓中,本次资金无划转」 |
|
||||
|
||||
## 配置示例(目标 50U)
|
||||
|
||||
```env
|
||||
AUTO_TRANSFER_ENABLED=true
|
||||
AUTO_TRANSFER_AMOUNT=50
|
||||
AUTO_TRANSFER_FROM=funding
|
||||
AUTO_TRANSFER_TO=swap
|
||||
AUTO_TRANSFER_BJ_HOUR=8
|
||||
```
|
||||
|
||||
`AUTO_TRANSFER_AMOUNT` 与 `DAILY_START_CAPITAL`(每日开仓基数)**独立**.
|
||||
|
||||
API Key 须具备万向划转权限(与手动划转相同).
|
||||
|
||||
## 用脚本更新三所 `.env`
|
||||
|
||||
详见 **[env-sync-scripts.md](./env-sync-scripts.md)**.常用命令:
|
||||
|
||||
```bash
|
||||
git pull
|
||||
|
||||
# 仅补全划转相关项
|
||||
python scripts/sync_four_exchange_transfer_env.py
|
||||
|
||||
# 目标 50U 并开启自动划转
|
||||
python scripts/sync_four_exchange_transfer_env.py --set-amount 50 --enable-auto-transfer
|
||||
|
||||
# 计仓 + 划转一并补全
|
||||
python scripts/sync_four_exchange_env.py --set-transfer-amount 50 --enable-auto-transfer
|
||||
|
||||
pm2 restart crypto-monitor-binance crypto-monitor-okx crypto-monitor-gate
|
||||
```
|
||||
|
||||
+81
-81
@@ -1,81 +1,81 @@
|
||||
# 单日开仓次数限制(三所统一)
|
||||
|
||||
各交易实例(Binance / OKX / Gate)在 `.env` 中独立配置,互不影响。
|
||||
|
||||
## 交易日口径
|
||||
|
||||
- 以 **北京时间** `TRADING_DAY_RESET_HOUR`(默认 **8:00**)切分交易日,与统计、顶栏「交易日」一致。
|
||||
- **次日恢复**:过了切日时刻后 `session_date` 变为新日期,计数自动归零,无需清库。
|
||||
|
||||
## 计数口径
|
||||
|
||||
每成功新建一条 `order_monitors` 记录计 **1 次**,包括:
|
||||
|
||||
- 人工「实盘下单」
|
||||
- 关键位自动开仓
|
||||
- 其他写入 `order_monitors` 的成功开仓
|
||||
|
||||
平仓后再开仍算新的一单。当日总次数到硬上限后 **当天不再允许新开**(即使已空仓)。
|
||||
|
||||
## 环境变量
|
||||
|
||||
在「交易执行 / 人工风控」段配置:
|
||||
|
||||
```env
|
||||
# 【单日开仓 AI 提醒】本交易日开仓次数达到该值时,企业微信推送 AI 克制提醒(不拦单)
|
||||
DAILY_OPEN_ALERT_THRESHOLD=5
|
||||
|
||||
# 【单日开仓硬上限】本交易日开仓次数 >= 该值后,禁止一切新开仓直至下一交易日;0=不启用
|
||||
DAILY_OPEN_HARD_LIMIT=0
|
||||
```
|
||||
|
||||
### 配置示例
|
||||
|
||||
```env
|
||||
# 保守户:3 次提醒,5 次封死
|
||||
DAILY_OPEN_ALERT_THRESHOLD=3
|
||||
DAILY_OPEN_HARD_LIMIT=5
|
||||
|
||||
# 仅提醒、不封(与旧版行为接近)
|
||||
DAILY_OPEN_ALERT_THRESHOLD=5
|
||||
DAILY_OPEN_HARD_LIMIT=0
|
||||
|
||||
# 严格户:到 3 次即封
|
||||
DAILY_OPEN_ALERT_THRESHOLD=2
|
||||
DAILY_OPEN_HARD_LIMIT=3
|
||||
```
|
||||
|
||||
建议 `DAILY_OPEN_ALERT_THRESHOLD <= DAILY_OPEN_HARD_LIMIT`(硬上限为 0 时除外)。
|
||||
|
||||
## 程序行为
|
||||
|
||||
| 次数 | 行为 |
|
||||
|------|------|
|
||||
| 未达提醒阈值 | 正常开仓 |
|
||||
| 达到 `DAILY_OPEN_ALERT_THRESHOLD` | 成功开仓后 AI 企业微信提醒 |
|
||||
| 达到 `DAILY_OPEN_HARD_LIMIT`(>0) | `precheck_risk` 拒绝人工/关键位开仓;顶栏 `can_trade=false` |
|
||||
|
||||
硬限制与以下规则 **同时生效**(取交集):
|
||||
|
||||
- `TRADING_DAY_RESET_OPEN_GUARD_ENABLED`:切日前禁止新开
|
||||
- `MAX_ACTIVE_POSITIONS`:同时持仓上限
|
||||
- Gate:`precheck_trend_pullback_start` 同样校验单日硬上限
|
||||
|
||||
## 页面与接口
|
||||
|
||||
- 顶栏 / `api/account_snapshot` 返回 `opens_today`、`daily_open_hard_limit`、`daily_open_alert_threshold`。
|
||||
- 达硬上限时提示:`本交易日开仓 N/M 已达上限,次日 8:00 后恢复`(`M` 为配置的硬上限)。
|
||||
|
||||
## 部署
|
||||
|
||||
修改各实例 `.env` 后重启对应 pm2 进程,例如:
|
||||
|
||||
```bash
|
||||
pm2 restart crypto_binance crypto_okx crypto_gate
|
||||
```
|
||||
|
||||
## 实现位置
|
||||
|
||||
- 共享逻辑:`daily_open_limit_lib.py`
|
||||
- 三所 `app.py`:`precheck_risk`、`can_trade`、`api/account_snapshot`、开仓成功后的 AI 提醒文案
|
||||
- 单元测试:`tests/test_daily_open_limit_lib.py`
|
||||
# 单日开仓次数限制(三所统一)
|
||||
|
||||
各交易实例(Binance / OKX / Gate)在 `.env` 中独立配置,互不影响.
|
||||
|
||||
## 交易日口径
|
||||
|
||||
- 以 **北京时间** `TRADING_DAY_RESET_HOUR`(默认 **8:00**)切分交易日,与统计,顶栏「交易日」一致.
|
||||
- **次日恢复**:过了切日时刻后 `session_date` 变为新日期,计数自动归零,无需清库.
|
||||
|
||||
## 计数口径
|
||||
|
||||
每成功新建一条 `order_monitors` 记录计 **1 次**,包括:
|
||||
|
||||
- 人工「实盘下单」
|
||||
- 关键位自动开仓
|
||||
- 其他写入 `order_monitors` 的成功开仓
|
||||
|
||||
平仓后再开仍算新的一单.当日总次数到硬上限后 **当天不再允许新开**(即使已空仓).
|
||||
|
||||
## 环境变量
|
||||
|
||||
在「交易执行 / 人工风控」段配置:
|
||||
|
||||
```env
|
||||
# 【单日开仓 AI 提醒】本交易日开仓次数达到该值时,企业微信推送 AI 克制提醒(不拦单)
|
||||
DAILY_OPEN_ALERT_THRESHOLD=5
|
||||
|
||||
# 【单日开仓硬上限】本交易日开仓次数 >= 该值后,禁止一切新开仓直至下一交易日;0=不启用
|
||||
DAILY_OPEN_HARD_LIMIT=0
|
||||
```
|
||||
|
||||
### 配置示例
|
||||
|
||||
```env
|
||||
# 保守户:3 次提醒,5 次封死
|
||||
DAILY_OPEN_ALERT_THRESHOLD=3
|
||||
DAILY_OPEN_HARD_LIMIT=5
|
||||
|
||||
# 仅提醒,不封(与旧版行为接近)
|
||||
DAILY_OPEN_ALERT_THRESHOLD=5
|
||||
DAILY_OPEN_HARD_LIMIT=0
|
||||
|
||||
# 严格户:到 3 次即封
|
||||
DAILY_OPEN_ALERT_THRESHOLD=2
|
||||
DAILY_OPEN_HARD_LIMIT=3
|
||||
```
|
||||
|
||||
建议 `DAILY_OPEN_ALERT_THRESHOLD <= DAILY_OPEN_HARD_LIMIT`(硬上限为 0 时除外).
|
||||
|
||||
## 程序行为
|
||||
|
||||
| 次数 | 行为 |
|
||||
|------|------|
|
||||
| 未达提醒阈值 | 正常开仓 |
|
||||
| 达到 `DAILY_OPEN_ALERT_THRESHOLD` | 成功开仓后 AI 企业微信提醒 |
|
||||
| 达到 `DAILY_OPEN_HARD_LIMIT`(>0) | `precheck_risk` 拒绝人工/关键位开仓;顶栏 `can_trade=false` |
|
||||
|
||||
硬限制与以下规则 **同时生效**(取交集):
|
||||
|
||||
- `TRADING_DAY_RESET_OPEN_GUARD_ENABLED`:切日前禁止新开
|
||||
- `MAX_ACTIVE_POSITIONS`:同时持仓上限
|
||||
- Gate:`precheck_trend_pullback_start` 同样校验单日硬上限
|
||||
|
||||
## 页面与接口
|
||||
|
||||
- 顶栏 / `api/account_snapshot` 返回 `opens_today`,`daily_open_hard_limit`,`daily_open_alert_threshold`.
|
||||
- 达硬上限时提示:`本交易日开仓 N/M 已达上限,次日 8:00 后恢复`(`M` 为配置的硬上限).
|
||||
|
||||
## 部署
|
||||
|
||||
修改各实例 `.env` 后重启对应 pm2 进程,例如:
|
||||
|
||||
```bash
|
||||
pm2 restart crypto_binance crypto_okx crypto_gate
|
||||
```
|
||||
|
||||
## 实现位置
|
||||
|
||||
- 共享逻辑:`daily_open_limit_lib.py`
|
||||
- 三所 `app.py`:`precheck_risk`,`can_trade`,`api/account_snapshot`,开仓成功后的 AI 提醒文案
|
||||
- 单元测试:`tests/test_daily_open_limit_lib.py`
|
||||
|
||||
+139
-139
@@ -1,139 +1,139 @@
|
||||
# 三所 `.env` 同步脚本说明
|
||||
|
||||
在**仓库根目录**执行。仅处理三所实例目录下的 `.env`,**不覆盖** API 密钥与已存在的自定义值;若某目录无 `.env` 会 `SKIP`(需先 `cp .env.example .env`)。
|
||||
|
||||
| 目录 |
|
||||
|------|
|
||||
| `crypto_monitor_binance` |
|
||||
| `crypto_monitor_okx` |
|
||||
| `crypto_monitor_gate` |
|
||||
| `crypto_monitor_gate` |
|
||||
|
||||
修改 `.env` 后须 **`pm2 restart`** 对应实例后生效。
|
||||
|
||||
---
|
||||
|
||||
## 一键同步(推荐)
|
||||
|
||||
`scripts/sync_four_exchange_env.py`:依次执行**计仓** + **自动划转** 两个子脚本。
|
||||
|
||||
```bash
|
||||
cd /path/to/crypto_monitor
|
||||
git pull
|
||||
|
||||
# 仅补全缺失项(已有值保留)
|
||||
python scripts/sync_four_exchange_env.py
|
||||
|
||||
# 预览,不写文件
|
||||
python scripts/sync_four_exchange_env.py --dry-run
|
||||
|
||||
# 划转目标 50U 并开启自动划转(计仓仍只补缺失项)
|
||||
python scripts/sync_four_exchange_env.py --set-transfer-amount 50 --enable-auto-transfer
|
||||
|
||||
# 无仓后切换全仓杠杆(须先确认交易所无持仓)
|
||||
python scripts/sync_four_exchange_env.py --set-mode full_margin
|
||||
```
|
||||
|
||||
| 参数 | 说明 |
|
||||
|------|------|
|
||||
| `--dry-run` | 只打印将做的变更,不写 `.env` |
|
||||
| `--set-mode risk\|full_margin` | 强制三所 `POSITION_SIZING_MODE` |
|
||||
| `--set-transfer-amount U` | 强制三所 `AUTO_TRANSFER_AMOUNT` |
|
||||
| `--enable-auto-transfer` | 强制三所 `AUTO_TRANSFER_ENABLED=true` |
|
||||
|
||||
---
|
||||
|
||||
## 仅自动划转
|
||||
|
||||
`scripts/sync_four_exchange_transfer_env.py`
|
||||
|
||||
行为说明见 [auto-transfer-daily.md](./auto-transfer-daily.md)。
|
||||
|
||||
```bash
|
||||
# 补全缺失项
|
||||
python scripts/sync_four_exchange_transfer_env.py
|
||||
python scripts/sync_four_exchange_transfer_env.py --dry-run
|
||||
|
||||
# 目标 50U 并开启
|
||||
python scripts/sync_four_exchange_transfer_env.py --set-amount 50 --enable-auto-transfer
|
||||
```
|
||||
|
||||
| 参数 | 说明 |
|
||||
|------|------|
|
||||
| `--dry-run` | 预览 |
|
||||
| `--set-amount U` | 强制 `AUTO_TRANSFER_AMOUNT` |
|
||||
| `--enable-auto-transfer` | 强制 `AUTO_TRANSFER_ENABLED=true` |
|
||||
|
||||
**缺项默认**(未使用 `--set-amount` 且文件中无该键时):
|
||||
|
||||
1. 若已有 `AUTO_TRANSFER_AMOUNT` → 保留
|
||||
2. 否则若存在 `DAILY_START_CAPITAL` → 沿用其值
|
||||
3. 否则 → **50**
|
||||
|
||||
补全时会写入(若缺失):`AUTO_TRANSFER_FROM=funding`、`AUTO_TRANSFER_TO=swap`、`TRANSFER_CCY=USDT`、`AUTO_TRANSFER_BJ_HOUR=8`;币安额外补 `BINANCE_FUNDING_INCLUDE_SPOT=false`。
|
||||
|
||||
---
|
||||
|
||||
## 仅计仓模式
|
||||
|
||||
`scripts/sync_four_exchange_position_sizing_env.py`
|
||||
|
||||
行为说明见 [position-sizing-mode.md](./position-sizing-mode.md)。
|
||||
|
||||
```bash
|
||||
# 补全缺失项(默认 risk、FULL_MARGIN_BUFFER_RATIO=0.98)
|
||||
python scripts/sync_four_exchange_position_sizing_env.py
|
||||
python scripts/sync_four_exchange_position_sizing_env.py --dry-run
|
||||
|
||||
# 无仓后切全仓
|
||||
python scripts/sync_four_exchange_position_sizing_env.py --set-mode full_margin
|
||||
|
||||
# 无仓后切回以损定仓
|
||||
python scripts/sync_four_exchange_position_sizing_env.py --set-mode risk
|
||||
|
||||
# 强制缓冲比例
|
||||
python scripts/sync_four_exchange_position_sizing_env.py --set-buffer 0.98
|
||||
```
|
||||
|
||||
| 参数 | 说明 |
|
||||
|------|------|
|
||||
| `--dry-run` | 预览 |
|
||||
| `--set-mode risk\|full_margin` | 强制 `POSITION_SIZING_MODE`(**须无持仓**后 restart) |
|
||||
| `--set-buffer RATIO` | 强制 `FULL_MARGIN_BUFFER_RATIO` |
|
||||
|
||||
---
|
||||
|
||||
## 共用交易 / 关键位 / 轮询项
|
||||
|
||||
`scripts/sync_common_trading_env.py`:以 Gate `.env.example` 为基准,向**币安、OKX** 的 `.env` **追加缺失项**(不覆盖 API 密钥与已有自定义值)。
|
||||
|
||||
```bash
|
||||
python scripts/sync_common_trading_env.py
|
||||
python scripts/sync_common_trading_env.py --dry-run
|
||||
python scripts/sync_common_trading_env.py --instances crypto_monitor_okx
|
||||
python scripts/sync_common_trading_env.py --apply-force-close-policy
|
||||
```
|
||||
|
||||
补全项含:`RECONCILE_*`、`PRICE_REFRESH_SECONDS`、`KEY_*` 门控、`KEY_SIZING_USE_ZERO_POSITION_SNAPSHOT` 等(**不含** `FORCE_CLOSE_*`,由 `--apply-force-close-policy` 单独处理)。
|
||||
|
||||
**强制清仓策略**(仅 Gate 开启):
|
||||
|
||||
```bash
|
||||
python scripts/sync_common_trading_env.py --apply-force-close-policy
|
||||
```
|
||||
|
||||
或服务器一键:`bash deploy/pull_and_restart.sh`
|
||||
|
||||
---
|
||||
|
||||
## 部署后重启
|
||||
|
||||
```bash
|
||||
pm2 restart crypto-monitor-binance crypto-monitor-okx crypto-monitor-gate
|
||||
```
|
||||
|
||||
## 相关文档
|
||||
|
||||
- [计仓模式](./position-sizing-mode.md)
|
||||
- [每日自动划转](./auto-transfer-daily.md)
|
||||
- [部署说明](../deploy/README.md)
|
||||
# 三所 `.env` 同步脚本说明
|
||||
|
||||
在**仓库根目录**执行.仅处理三所实例目录下的 `.env`,**不覆盖** API 密钥与已存在的自定义值;若某目录无 `.env` 会 `SKIP`(需先 `cp .env.example .env`).
|
||||
|
||||
| 目录 |
|
||||
|------|
|
||||
| `crypto_monitor_binance` |
|
||||
| `crypto_monitor_okx` |
|
||||
| `crypto_monitor_gate` |
|
||||
| `crypto_monitor_gate` |
|
||||
|
||||
修改 `.env` 后须 **`pm2 restart`** 对应实例后生效.
|
||||
|
||||
---
|
||||
|
||||
## 一键同步(推荐)
|
||||
|
||||
`scripts/sync_four_exchange_env.py`:依次执行**计仓** + **自动划转** 两个子脚本.
|
||||
|
||||
```bash
|
||||
cd /path/to/crypto_monitor
|
||||
git pull
|
||||
|
||||
# 仅补全缺失项(已有值保留)
|
||||
python scripts/sync_four_exchange_env.py
|
||||
|
||||
# 预览,不写文件
|
||||
python scripts/sync_four_exchange_env.py --dry-run
|
||||
|
||||
# 划转目标 50U 并开启自动划转(计仓仍只补缺失项)
|
||||
python scripts/sync_four_exchange_env.py --set-transfer-amount 50 --enable-auto-transfer
|
||||
|
||||
# 无仓后切换全仓杠杆(须先确认交易所无持仓)
|
||||
python scripts/sync_four_exchange_env.py --set-mode full_margin
|
||||
```
|
||||
|
||||
| 参数 | 说明 |
|
||||
|------|------|
|
||||
| `--dry-run` | 只打印将做的变更,不写 `.env` |
|
||||
| `--set-mode risk\|full_margin` | 强制三所 `POSITION_SIZING_MODE` |
|
||||
| `--set-transfer-amount U` | 强制三所 `AUTO_TRANSFER_AMOUNT` |
|
||||
| `--enable-auto-transfer` | 强制三所 `AUTO_TRANSFER_ENABLED=true` |
|
||||
|
||||
---
|
||||
|
||||
## 仅自动划转
|
||||
|
||||
`scripts/sync_four_exchange_transfer_env.py`
|
||||
|
||||
行为说明见 [auto-transfer-daily.md](./auto-transfer-daily.md).
|
||||
|
||||
```bash
|
||||
# 补全缺失项
|
||||
python scripts/sync_four_exchange_transfer_env.py
|
||||
python scripts/sync_four_exchange_transfer_env.py --dry-run
|
||||
|
||||
# 目标 50U 并开启
|
||||
python scripts/sync_four_exchange_transfer_env.py --set-amount 50 --enable-auto-transfer
|
||||
```
|
||||
|
||||
| 参数 | 说明 |
|
||||
|------|------|
|
||||
| `--dry-run` | 预览 |
|
||||
| `--set-amount U` | 强制 `AUTO_TRANSFER_AMOUNT` |
|
||||
| `--enable-auto-transfer` | 强制 `AUTO_TRANSFER_ENABLED=true` |
|
||||
|
||||
**缺项默认**(未使用 `--set-amount` 且文件中无该键时):
|
||||
|
||||
1. 若已有 `AUTO_TRANSFER_AMOUNT` → 保留
|
||||
2. 否则若存在 `DAILY_START_CAPITAL` → 沿用其值
|
||||
3. 否则 → **50**
|
||||
|
||||
补全时会写入(若缺失):`AUTO_TRANSFER_FROM=funding`,`AUTO_TRANSFER_TO=swap`,`TRANSFER_CCY=USDT`,`AUTO_TRANSFER_BJ_HOUR=8`;币安额外补 `BINANCE_FUNDING_INCLUDE_SPOT=false`.
|
||||
|
||||
---
|
||||
|
||||
## 仅计仓模式
|
||||
|
||||
`scripts/sync_four_exchange_position_sizing_env.py`
|
||||
|
||||
行为说明见 [position-sizing-mode.md](./position-sizing-mode.md).
|
||||
|
||||
```bash
|
||||
# 补全缺失项(默认 risk,FULL_MARGIN_BUFFER_RATIO=0.98)
|
||||
python scripts/sync_four_exchange_position_sizing_env.py
|
||||
python scripts/sync_four_exchange_position_sizing_env.py --dry-run
|
||||
|
||||
# 无仓后切全仓
|
||||
python scripts/sync_four_exchange_position_sizing_env.py --set-mode full_margin
|
||||
|
||||
# 无仓后切回以损定仓
|
||||
python scripts/sync_four_exchange_position_sizing_env.py --set-mode risk
|
||||
|
||||
# 强制缓冲比例
|
||||
python scripts/sync_four_exchange_position_sizing_env.py --set-buffer 0.98
|
||||
```
|
||||
|
||||
| 参数 | 说明 |
|
||||
|------|------|
|
||||
| `--dry-run` | 预览 |
|
||||
| `--set-mode risk\|full_margin` | 强制 `POSITION_SIZING_MODE`(**须无持仓**后 restart) |
|
||||
| `--set-buffer RATIO` | 强制 `FULL_MARGIN_BUFFER_RATIO` |
|
||||
|
||||
---
|
||||
|
||||
## 共用交易 / 关键位 / 轮询项
|
||||
|
||||
`scripts/sync_common_trading_env.py`:以 Gate `.env.example` 为基准,向**币安,OKX** 的 `.env` **追加缺失项**(不覆盖 API 密钥与已有自定义值).
|
||||
|
||||
```bash
|
||||
python scripts/sync_common_trading_env.py
|
||||
python scripts/sync_common_trading_env.py --dry-run
|
||||
python scripts/sync_common_trading_env.py --instances crypto_monitor_okx
|
||||
python scripts/sync_common_trading_env.py --apply-force-close-policy
|
||||
```
|
||||
|
||||
补全项含:`RECONCILE_*`,`PRICE_REFRESH_SECONDS`,`KEY_*` 门控,`KEY_SIZING_USE_ZERO_POSITION_SNAPSHOT` 等(**不含** `FORCE_CLOSE_*`,由 `--apply-force-close-policy` 单独处理).
|
||||
|
||||
**强制清仓策略**(仅 Gate 开启):
|
||||
|
||||
```bash
|
||||
python scripts/sync_common_trading_env.py --apply-force-close-policy
|
||||
```
|
||||
|
||||
或服务器一键:`bash deploy/pull_and_restart.sh`
|
||||
|
||||
---
|
||||
|
||||
## 部署后重启
|
||||
|
||||
```bash
|
||||
pm2 restart crypto-monitor-binance crypto-monitor-okx crypto-monitor-gate
|
||||
```
|
||||
|
||||
## 相关文档
|
||||
|
||||
- [计仓模式](./position-sizing-mode.md)
|
||||
- [每日自动划转](./auto-transfer-daily.md)
|
||||
- [部署说明](../deploy/README.md)
|
||||
|
||||
+75
-75
@@ -1,8 +1,8 @@
|
||||
# env 配置页说明
|
||||
|
||||
本文档描述各交易实例 Web 端 **「env 配置」** 页展示项、含义、生效方式,以及与系统设置、中控密钥的分工。
|
||||
本文档描述各交易实例 Web 端 **「env 配置」** 页展示项,含义,生效方式,以及与系统设置,中控密钥的分工.
|
||||
|
||||
> **不在本页展示的配置**(服务端口、数据库路径、关键位门控、轮询间隔等)仍保存在实例目录 `.env` 中,需 SSH 编辑或部署脚本维护,见文末「隐藏项」。
|
||||
> **不在本页展示的配置**(服务端口,数据库路径,关键位门控,轮询间隔等)仍保存在实例目录 `.env` 中,需 SSH 编辑或部署脚本维护,见文末「隐藏项」.
|
||||
|
||||
---
|
||||
|
||||
@@ -10,66 +10,66 @@
|
||||
|
||||
| 原则 | 说明 |
|
||||
|------|------|
|
||||
| **只展示运营相关项** | 不暴露全量 `.env`,避免误改基础设施 |
|
||||
| **前端仅中文** | 页面只显示中文标签与说明,不显示 `APP_XXX` 等变量名 |
|
||||
| **只展示运营相关项** | 不暴露全量 `.env`,避免误改基础设施 |
|
||||
| **前端仅中文** | 页面只显示中文标签与说明,不显示 `APP_XXX` 等变量名 |
|
||||
| **账户密码不进本页** | 登录用户名/密码在 **系统设置 → 账户密码修改** 中维护 |
|
||||
| **密钥自动托管** | 中控通信密钥、登录会话密钥由 **首次部署脚本自动生成并写入**(一次生成、不轮换),本页不提供编辑 |
|
||||
| **AI 仅中控配置** | OpenAI / Ollama 等 AI 项已从中控 **系统设置 → AI 配置** 统一维护并同步三所,本页不再展示 |
|
||||
| **保存标注** | 每项标注「保存即生效」或「需重启」;含需重启项时可用「保存并重启」 |
|
||||
| **密钥自动托管** | 中控通信密钥,登录会话密钥由 **首次部署脚本自动生成并写入**(一次生成,不轮换),本页不提供编辑 |
|
||||
| **AI 仅中控配置** | OpenAI / Ollama 等 AI 项已从中控 **系统设置 → AI 配置** 统一维护并同步三所,本页不再展示 |
|
||||
| **保存标注** | 每项标注「保存即生效」或「需重启」;含需重启项时可用「保存并重启」 |
|
||||
|
||||
---
|
||||
|
||||
## 2. 密钥分工(自动生成,本页不可见)
|
||||
## 2. 密钥分工(自动生成,本页不可见)
|
||||
|
||||
部署时由脚本统一生成并写入对应 `.env`(已有值则跳过,避免覆盖生产环境)。
|
||||
部署时由脚本统一生成并写入对应 `.env`(已有值则跳过,避免覆盖生产环境).
|
||||
|
||||
| 类型 | 环境变量 | 写入位置 | 用途 |
|
||||
|------|----------|----------|------|
|
||||
| **中控通信密钥** | `HUB_BRIDGE_TOKEN` | 中控 `manual_trading_hub/.env` + 三实例 `.env`(**相同值**) | 中控调用实例 API(`X-Hub-Token`)、iframe SSO 签发与校验 |
|
||||
| **登录会话密钥** | `FLASK_SECRET_KEY` | 三实例 `.env`(**三所相同**) | Flask Session 签名;与网页登录态相关,与中控密钥 **分离** |
|
||||
| **中控通信密钥** | `HUB_BRIDGE_TOKEN` | 中控 `manual_trading_hub/.env` + 三实例 `.env`(**相同值**) | 中控调用实例 API(`X-Hub-Token`),iframe SSO 签发与校验 |
|
||||
| **登录会话密钥** | `FLASK_SECRET_KEY` | 三实例 `.env`(**三所相同**) | Flask Session 签名;与网页登录态相关,与中控密钥 **分离** |
|
||||
| **中控会话密钥** | `HUB_SESSION_SECRET` | 中控 `.env` | 中控登录 Cookie 签名 |
|
||||
| **登录账号** | `APP_USERNAME` / `APP_PASSWORD` | 三实例 `.env`(建议三所统一) | 直链实例 `/login` 使用;**仅在系统设置中修改** |
|
||||
| **中控登录** | `HUB_USERNAME` / `HUB_PASSWORD` | 中控 `.env` | 中控网页登录;**仅在中控系统设置改密** |
|
||||
| **登录账号** | `APP_USERNAME` / `APP_PASSWORD` | 三实例 `.env`(建议三所统一) | 直链实例 `/login` 使用;**仅在系统设置中修改** |
|
||||
| **中控登录** | `HUB_USERNAME` / `HUB_PASSWORD` | 中控 `.env` | 中控网页登录;**仅在中控系统设置改密** |
|
||||
|
||||
说明:
|
||||
说明:
|
||||
|
||||
- **长期密钥一次生成、不轮换**:`setup_env.sh` 末尾调用 `scripts/bootstrap_deploy_secrets.py`;已有非占位值不会被覆盖。
|
||||
- **SSO 链接不变**:仍为中控每次签发、默认 2 小时有效、单次使用(`HUB_SSO_TTL_SEC`),与长期 `HUB_BRIDGE_TOKEN` 分离。
|
||||
- 经中控 iframe / SSO 打开实例时,可免输实例密码;直链 IP/域名仍走 `/login`。
|
||||
- 首次部署可生成随机强密码;用户日后在 **系统设置** 改密,不经过本页。
|
||||
- **长期密钥一次生成,不轮换**:`setup_env.sh` 末尾调用 `scripts/bootstrap_deploy_secrets.py`;已有非占位值不会被覆盖.
|
||||
- **SSO 链接不变**:仍为中控每次签发,默认 2 小时有效,单次使用(`HUB_SSO_TTL_SEC`),与长期 `HUB_BRIDGE_TOKEN` 分离.
|
||||
- 经中控 iframe / SSO 打开实例时,可免输实例密码;直链 IP/域名仍走 `/login`.
|
||||
- 首次部署可生成随机强密码;用户日后在 **系统设置** 改密,不经过本页.
|
||||
|
||||
---
|
||||
|
||||
## 3. 页面布局(三列卡片)
|
||||
## 3. 页面布局(三列卡片)
|
||||
|
||||
| 列 1 | 列 2 | 列 3 |
|
||||
|------|------|------|
|
||||
| 交易所与实盘 | 企业微信 | 交易执行 |
|
||||
| 交易风控 | 账户冷静期 | 自动划转 |
|
||||
| 当日资金 | 期权账户(仅 OKX) | |
|
||||
| 当日资金 | 期权账户(仅 OKX) | |
|
||||
|
||||
> **AI 复盘**(OpenAI / Ollama)已移至中控 **系统设置 → AI 配置**,保存后强制同步三所 `.env`。详见 [中控AI与密钥配置.md](./中控AI与密钥配置.md)。
|
||||
> **AI 复盘**(OpenAI / Ollama)已移至中控 **系统设置 → AI 配置**,保存后强制同步三所 `.env`.详见 [中控AI与密钥配置.md](./中控AI与密钥配置.md).
|
||||
|
||||
Binance / Gate 无期权模块时,第三列最后一格不显示或显示「本所无期权」。
|
||||
Binance / Gate 无期权模块时,第三列最后一格不显示或显示「本所无期权」.
|
||||
|
||||
---
|
||||
|
||||
## 4. 各卡片字段(中文展示名)
|
||||
## 4. 各卡片字段(中文展示名)
|
||||
|
||||
### 4.1 交易所与实盘
|
||||
|
||||
| 中文名 | 说明 | 重启 |
|
||||
|--------|------|------|
|
||||
| 开启实盘下单 | 关闭时仅走本地流程,不向交易所发单 | 需重启 |
|
||||
| 开启实盘下单 | 关闭时仅走本地流程,不向交易所发单 | 需重启 |
|
||||
| API Key | 永续子账户 API Key | 需重启 |
|
||||
| API Secret | 永续子账户 Secret | 需重启 |
|
||||
| API Passphrase | 仅 OKX 显示 | 需重启 |
|
||||
| 保证金模式 | 全仓 / 逐仓 | 需重启 |
|
||||
| 持仓模式 | 双向 / 单向净持仓等(按所) | 需重启 |
|
||||
| 仓位查询类型 | 仅 OKX:如 SWAP | 需重启 |
|
||||
| 持仓模式 | 双向 / 单向净持仓等(按所) | 需重启 |
|
||||
| 仓位查询类型 | 仅 OKX:如 SWAP | 需重启 |
|
||||
| 账户备注 | 企业微信推送中显示的交易所备注 | 保存即生效 |
|
||||
|
||||
**本卡片不包含**:网页登录账号密码、是否关闭登录校验、中控通信密钥。
|
||||
**本卡片不包含**:网页登录账号密码,是否关闭登录校验,中控通信密钥.
|
||||
|
||||
---
|
||||
|
||||
@@ -77,16 +77,16 @@ Binance / Gate 无期权模块时,第三列最后一格不显示或显示「
|
||||
|
||||
| 中文名 | 说明 |
|
||||
|--------|------|
|
||||
| 机器人 Webhook | 行情、风控、提醒推送地址 |
|
||||
| 推送超时(秒) | 可选,默认 10 |
|
||||
| 机器人 Webhook | 行情,风控,提醒推送地址 |
|
||||
| 推送超时(秒) | 可选,默认 10 |
|
||||
|
||||
---
|
||||
|
||||
### 4.3 AI 复盘(已移至中控)
|
||||
### 4.3 AI 复盘(已移至中控)
|
||||
|
||||
AI 相关环境变量(`AI_PROVIDER`、`OPENAI_*`、`OLLAMA_*`、`AI_MODEL`、`AI_TIMEOUT_SECONDS`)**不再在本页展示**。
|
||||
AI 相关环境变量(`AI_PROVIDER`,`OPENAI_*`,`OLLAMA_*`,`AI_MODEL`,`AI_TIMEOUT_SECONDS`)**不再在本页展示**.
|
||||
|
||||
请在中控 **系统设置 → AI 配置** 修改;保存后写入中控 `.env` 并 **强制同步** 至 OKX / Binance / Gate 三实例。详见 [中控AI与密钥配置.md](./中控AI与密钥配置.md)。
|
||||
请在中控 **系统设置 → AI 配置** 修改;保存后写入中控 `.env` 并 **强制同步** 至 OKX / Binance / Gate 三实例.详见 [中控AI与密钥配置.md](./中控AI与密钥配置.md).
|
||||
|
||||
---
|
||||
|
||||
@@ -103,23 +103,23 @@ AI 相关环境变量(`AI_PROVIDER`、`OPENAI_*`、`OLLAMA_*`、`AI_MODEL`、`
|
||||
| 允许方向 | 多 / 空 / 双向 |
|
||||
| 币种白名单开关 | |
|
||||
| 白名单币种 | 逗号分隔 |
|
||||
| 交易日切点(北京时间) | 默认 8 点 |
|
||||
| 交易日切点(北京时间) | 默认 8 点 |
|
||||
| 切点前禁止新开仓 | |
|
||||
| 最大同时持仓 | |
|
||||
| 人工最低盈亏比 | |
|
||||
| 强制清仓开关 | |
|
||||
| 强制清仓整点(北京) | |
|
||||
| 强制清仓整点(北京) | |
|
||||
|
||||
---
|
||||
|
||||
### 4.5 交易风控(日内开仓)
|
||||
### 4.5 交易风控(日内开仓)
|
||||
|
||||
| 中文名 | 说明 |
|
||||
|--------|------|
|
||||
| 单日开仓提醒阈值 | 达到次数后 AI 克制提醒(不拦单) |
|
||||
| 单日开仓硬上限 | 0 表示不启用;达到后禁止新开仓 |
|
||||
| 单日开仓提醒阈值 | 达到次数后 AI 克制提醒(不拦单) |
|
||||
| 单日开仓硬上限 | 0 表示不启用;达到后禁止新开仓 |
|
||||
|
||||
详见 [daily-open-limit.md](./daily-open-limit.md)。
|
||||
详见 [daily-open-limit.md](./daily-open-limit.md).
|
||||
|
||||
---
|
||||
|
||||
@@ -128,12 +128,12 @@ AI 相关环境变量(`AI_PROVIDER`、`OPENAI_*`、`OLLAMA_*`、`AI_MODEL`、`
|
||||
| 中文名 | 说明 |
|
||||
|--------|------|
|
||||
| 冷静期总开关 | |
|
||||
| 手动平仓冷静(小时) | |
|
||||
| 复盘情绪冷静(小时) | |
|
||||
| 手动平仓冷静(小时) | |
|
||||
| 复盘情绪冷静(小时) | |
|
||||
| 日手动平仓次数上限 | |
|
||||
| 情绪标签日冻结 | |
|
||||
|
||||
详见 [account-risk-cooldown.md](./account-risk-cooldown.md)。
|
||||
详见 [account-risk-cooldown.md](./account-risk-cooldown.md).
|
||||
|
||||
---
|
||||
|
||||
@@ -142,13 +142,13 @@ AI 相关环境变量(`AI_PROVIDER`、`OPENAI_*`、`OLLAMA_*`、`AI_MODEL`、`
|
||||
| 中文名 | 说明 |
|
||||
|--------|------|
|
||||
| 启用自动划转 | |
|
||||
| 目标余额(U) | 交易账户目标 USDT |
|
||||
| 目标余额(U) | 交易账户目标 USDT |
|
||||
| 划出账户 | funding / swap |
|
||||
| 划入账户 | swap / funding |
|
||||
| 执行整点(北京时间) | |
|
||||
| 执行整点(北京时间) | |
|
||||
| 划转币种 | 默认 USDT |
|
||||
|
||||
详见 [auto-transfer-daily.md](./auto-transfer-daily.md)。
|
||||
详见 [auto-transfer-daily.md](./auto-transfer-daily.md).
|
||||
|
||||
---
|
||||
|
||||
@@ -156,53 +156,53 @@ AI 相关环境变量(`AI_PROVIDER`、`OPENAI_*`、`OLLAMA_*`、`AI_MODEL`、`
|
||||
|
||||
| 中文名 | 说明 |
|
||||
|--------|------|
|
||||
| 日起始基数(U) | |
|
||||
| 回撤后基数(U) | |
|
||||
| 盈利后基数(U) | |
|
||||
| 日起始基数(U) | |
|
||||
| 回撤后基数(U) | |
|
||||
| 盈利后基数(U) | |
|
||||
|
||||
与自动划转目标余额相互独立;若需一致请手动对齐。
|
||||
与自动划转目标余额相互独立;若需一致请手动对齐.
|
||||
|
||||
---
|
||||
|
||||
### 4.9 期权账户(仅 OKX)
|
||||
### 4.9 期权账户(仅 OKX)
|
||||
|
||||
| 中文名 | 说明 |
|
||||
|--------|------|
|
||||
| 启用期权模块 | |
|
||||
| 期权 API Key / Secret / Passphrase | 主账户,与永续子账户分离 |
|
||||
| 期权 API Key / Secret / Passphrase | 主账户,与永续子账户分离 |
|
||||
| 期权账户备注 | |
|
||||
| 单笔预算(USDC) | |
|
||||
| 单笔预算(USDC) | |
|
||||
| 预算缓冲比例 | |
|
||||
| 默认标的 | 如 ETH |
|
||||
| 最大到期天数 | 等常用策略参数 |
|
||||
|
||||
高级参数与完整说明见 [期权方案.md](./期权方案.md)、[期权用法.md](./期权用法.md)。
|
||||
高级参数与完整说明见 [期权方案.md](./期权方案.md),[期权用法.md](./期权用法.md).
|
||||
|
||||
---
|
||||
|
||||
## 5. 操作说明
|
||||
|
||||
1. 修改后点 **保存**:即时生效项立即应用;需重启项写入 `.env` 但未重启进程。
|
||||
2. 含需重启项时点 **保存并重启**:写 `.env` 后 PM2 重启当前实例。
|
||||
3. **重新加载**:从磁盘重新读取 `.env` 刷新表单(放弃未保存修改)。
|
||||
4. 敏感项(API、密钥)显示为掩码;**留空提交表示不修改原值**。
|
||||
1. 修改后点 **保存**:即时生效项立即应用;需重启项写入 `.env` 但未重启进程.
|
||||
2. 含需重启项时点 **保存并重启**:写 `.env` 后 PM2 重启当前实例.
|
||||
3. **重新加载**:从磁盘重新读取 `.env` 刷新表单(放弃未保存修改).
|
||||
4. 敏感项(API,密钥)显示为掩码;**留空提交表示不修改原值**.
|
||||
|
||||
---
|
||||
|
||||
## 6. 隐藏项(本页不展示)
|
||||
## 6. 隐藏项(本页不展示)
|
||||
|
||||
以下仍存在于 `.env`,仅供运维或 SSH 修改:
|
||||
以下仍存在于 `.env`,仅供运维或 SSH 修改:
|
||||
|
||||
- 服务:`APP_HOST`、`APP_PORT`、`APP_DEBUG`
|
||||
- 数据:`DB_PATH`、`UPLOAD_DIR`
|
||||
- 关键位门控:全部 `KEY_*`、`KLINE_*`
|
||||
- 轮询与同步:`BALANCE_REFRESH_SECONDS`、`PRICE_REFRESH_SECONDS`、`MONITOR_POLL_SECONDS`、`BREAKEVEN_*`、`RECONCILE_*`
|
||||
- 代理:`OKX_SOCKS_PROXY`、`BINANCE_HTTP_PROXY` 等
|
||||
- 备份:`BACKUP_*`
|
||||
- 中控嵌入细节:`APP_ALLOW_HUB_EMBED`、`HUB_EMBED_*`、`APP_COOKIE_SECURE`
|
||||
- 登录相关:`APP_AUTH_DISABLED`、`APP_USERNAME`、`APP_PASSWORD`、`FLASK_SECRET_KEY`、`HUB_BRIDGE_TOKEN`
|
||||
- 服务:`APP_HOST`,`APP_PORT`,`APP_DEBUG`
|
||||
- 数据:`DB_PATH`,`UPLOAD_DIR`
|
||||
- 关键位门控:全部 `KEY_*`,`KLINE_*`
|
||||
- 轮询与同步:`BALANCE_REFRESH_SECONDS`,`PRICE_REFRESH_SECONDS`,`MONITOR_POLL_SECONDS`,`BREAKEVEN_*`,`RECONCILE_*`
|
||||
- 代理:`OKX_SOCKS_PROXY`,`BINANCE_HTTP_PROXY` 等
|
||||
- 备份:`BACKUP_*`
|
||||
- 中控嵌入细节:`APP_ALLOW_HUB_EMBED`,`HUB_EMBED_*`,`APP_COOKIE_SECURE`
|
||||
- 登录相关:`APP_AUTH_DISABLED`,`APP_USERNAME`,`APP_PASSWORD`,`FLASK_SECRET_KEY`,`HUB_BRIDGE_TOKEN`
|
||||
|
||||
后续若需要可增加「高级模式」折叠区,默认关闭。
|
||||
后续若需要可增加「高级模式」折叠区,默认关闭.
|
||||
|
||||
---
|
||||
|
||||
@@ -211,19 +211,19 @@ AI 相关环境变量(`AI_PROVIDER`、`OPENAI_*`、`OLLAMA_*`、`AI_MODEL`、`
|
||||
| 能力 | env 配置 | 系统设置 | 中控系统设置 |
|
||||
|------|----------|----------|--------------|
|
||||
| 登录用户名/密码 | ❌ | ✅ 账户密码修改 | ✅ 中控账户密码 |
|
||||
| 交易所 API | ✅(各所自配) | ❌ | ❌ |
|
||||
| AI / OpenAI | ❌ | ❌ | ✅ AI 配置(同步三所) |
|
||||
| 交易所 API | ✅(各所自配) | ❌ | ❌ |
|
||||
| AI / OpenAI | ❌ | ❌ | ✅ AI 配置(同步三所) |
|
||||
| 导航/区块显示 | ❌ | ✅ 导航显示 | ✅ 显示与导航 |
|
||||
| 手动资金划转 | ❌ | ✅ 永续资金划转 | ❌ |
|
||||
| 数据导出 | ❌ | ✅ 数据导出 | ❌ |
|
||||
| 期权兑换/划转 UI | ❌ | ✅(OKX,可开关) | ❌ |
|
||||
| 期权兑换/划转 UI | ❌ | ✅(OKX,可开关) | ❌ |
|
||||
|
||||
系统设置说明见 [系统设置说明.md](./系统设置说明.md);中控 AI 与部署密钥见 [中控AI与密钥配置.md](./中控AI与密钥配置.md)。
|
||||
系统设置说明见 [系统设置说明.md](./系统设置说明.md);中控 AI 与部署密钥见 [中控AI与密钥配置.md](./中控AI与密钥配置.md).
|
||||
|
||||
---
|
||||
|
||||
## 8. 实现备注(开发用)
|
||||
## 8. 实现备注(开发用)
|
||||
|
||||
- 白名单分组:`lib/env/env_ui_manifest.py`(按 `exchange_key` 过滤)
|
||||
- 中文标签:`ENV_UI_LABELS` 映射,模板只渲染 `label` / `note`
|
||||
- 全量校验仍基于 `.env.example`;POST 仅接受 manifest 内 key
|
||||
- 白名单分组:`lib/env/env_ui_manifest.py`(按 `exchange_key` 过滤)
|
||||
- 中文标签:`ENV_UI_LABELS` 映射,模板只渲染 `label` / `note`
|
||||
- 全量校验仍基于 `.env.example`;POST 仅接受 manifest 内 key
|
||||
|
||||
+135
-135
@@ -1,135 +1,135 @@
|
||||
# 内照明心与永久 K 线
|
||||
|
||||
## 概述
|
||||
|
||||
「内照明心」页(`/archive`)用于 **复盘语录 + 交易记录回顾 + 按需 K 线**。左侧维护每日复盘语录(最多 100 条);右侧按日期区间列出开仓记录,展示区间统计,并可展开 K 线图表对照单笔交易。
|
||||
|
||||
与行情区 `hub_kline.db`(15 天滚动缓存)**完全独立**:档案库只增不删,从建档起永久保留。
|
||||
|
||||
## 页面布局
|
||||
|
||||
| 区域 | 说明 |
|
||||
|------|------|
|
||||
| **复盘语录** | 左栏;按日期添加/编辑/删除,一日一条 |
|
||||
| **日期与筛选** | 顶栏:本日 / 本周 / 本月 / 自选区间;盈利单、亏损单、犯病、交易所、搜索 |
|
||||
| **区间统计** | 统计栏随日期选择自动更新(见下) |
|
||||
| **K 线图表** | 默认折叠;点「图表」或展开后按需加载 |
|
||||
| **交易记录** | 默认展开;犯病行 **红色字体**(无红底);可编辑标签与备注 |
|
||||
|
||||
## 日期区间
|
||||
|
||||
交易日按北京时间 **8:00** 切日(`TRADING_DAY_RESET_HOUR`)。
|
||||
|
||||
| 模式 | 范围 |
|
||||
|------|------|
|
||||
| **本日** | 可选单个交易日(默认当前交易日) |
|
||||
| **本周** | 当周周一至当前交易日 |
|
||||
| **本月** | 当月 1 日至当前交易日 |
|
||||
| **区间** | 自选 `date_from`~`date_to`(含首尾交易日) |
|
||||
|
||||
## 区间统计(统计栏)
|
||||
|
||||
基于当前 **列表筛选结果**(含盈利/亏损/犯病勾选、合约搜索;交易所下拉仍限定数据源):
|
||||
|
||||
| 指标 | 说明 |
|
||||
|------|------|
|
||||
| 总开仓次数 | 区间内开仓笔数 |
|
||||
| 盈利单 / 亏损单 | 盈亏 > 0 / < 0 的笔数(持平不计) |
|
||||
| 平均盈利 / 平均亏损 | 盈利单、亏损单各自的均值(U) |
|
||||
| 最大盈利 / 最大亏损 | 单笔最大盈利、最大亏损(U) |
|
||||
| 犯病次数 / 占比 | `behavior_tag = sick` 的笔数及占开仓比例 |
|
||||
| 盈亏 | 区间内全部已平仓盈亏合计 |
|
||||
| 剔除犯病盈亏 | 排除犯病单后的盈亏合计 |
|
||||
| 各交易所 | 每所同上分项 |
|
||||
|
||||
在搜索框输入币种(如 `BTC`)后,统计栏与下方列表同步按该条件收窄。
|
||||
|
||||
## 数据约定
|
||||
|
||||
| 项 | 约定 |
|
||||
|----|------|
|
||||
| 交易来源 | 三所 `trade_records` + 未落库的 `strategy_trade_snapshots`,经 `/api/hub/trades/archive` 拉取 |
|
||||
| 犯病标签 | 中控 `trade_overlay.behavior_tag = sick` |
|
||||
| K 线真源 | 仅 **5m** 写入 `hub_symbol_archive.db` |
|
||||
| 建档种子 | 该币 **最早开仓** 向前 **30 天** 5m |
|
||||
| 增量同步 | 默认每 **4 小时** 补新 5m 至当前 |
|
||||
| 展示周期 | Tab:**5m / 15m / 1h / 4h**,默认 **15m** |
|
||||
| 视窗模式 | **持仓过程**(锚平仓,默认)/ **进场决策**(锚开仓) |
|
||||
| 时间跳转 | 输入 `YYYY-MM-DD HH:MM` 后点「跳转」 |
|
||||
|
||||
## 存储
|
||||
|
||||
- 默认路径:`manual_trading_hub/data/hub_symbol_archive.db`
|
||||
- 环境变量:`HUB_ARCHIVE_DB_PATH`
|
||||
- 表:
|
||||
- `archive_meta` — 建档元数据
|
||||
- `archive_bars_5m` — 永久 5m K 线
|
||||
- `archive_trade_cache` — 从实例同步的交易快照
|
||||
- `trade_overlay` — 犯病标签与备注(仅中控)
|
||||
- `archive_review_quotes` — 复盘语录
|
||||
|
||||
## API(中控 FastAPI)
|
||||
|
||||
| 方法 | 路径 | 说明 |
|
||||
|------|------|------|
|
||||
| GET | `/api/archive/meta` | 周期、交易所、同步间隔等 |
|
||||
| GET | `/api/archive/daily-trades` | 区间交易列表与统计(见 query) |
|
||||
| GET | `/api/archive/quotes` | 复盘语录列表 |
|
||||
| POST | `/api/archive/quotes` | 新增语录 |
|
||||
| PATCH | `/api/archive/quotes/{id}` | 更新语录 |
|
||||
| DELETE | `/api/archive/quotes/{id}` | 删除语录 |
|
||||
| GET | `/api/archive/ohlcv` | K 线视窗(`timeframe` / `mode` / `anchor_ms` / `at`) |
|
||||
| PATCH | `/api/archive/trade/{exchange_key}/{trade_id}` | 更新标签/备注 |
|
||||
| POST | `/api/archive/sync` | 立即同步三所交易 + K 线 |
|
||||
|
||||
`GET /api/archive/daily-trades` 主要 query:
|
||||
|
||||
| 参数 | 说明 |
|
||||
|------|------|
|
||||
| `period` | `today` / `week` / `month` / `range` |
|
||||
| `trading_day` | 本日模式下的交易日 `YYYY-MM-DD` |
|
||||
| `date_from` / `date_to` | 区间模式起止日 |
|
||||
| `exchange_key` | 可选,按交易所筛选 |
|
||||
| `filter_profit` / `filter_loss` / `filter_sick` | 过滤列表与统计 |
|
||||
| `search` | 合约 / 交易所 / 备注搜索(同步过滤列表与统计) |
|
||||
|
||||
返回 `stats` 含 `open_count`、`win_count`、`loss_count`、`win_rate`、`avg_win`、`avg_loss`、`profit_loss_ratio`、`max_win`、`max_loss`、`sick_count`、`sick_pct`、`pnl_total`、`pnl_ex_sick`、`by_exchange`。
|
||||
|
||||
实例侧:
|
||||
|
||||
| 方法 | 路径 | 说明 |
|
||||
|------|------|------|
|
||||
| GET | `/api/hub/trades/archive` | 近 N 天已平仓(`days` / `limit`) |
|
||||
|
||||
## 后台任务
|
||||
|
||||
Hub 启动后在 lifespan 中运行 `hub-archive-sync`:
|
||||
|
||||
1. 对各启用交易所调用 `/api/hub/trades/archive`
|
||||
2. 写入 `archive_trade_cache`
|
||||
3. 未建档币种:拉 30 天 5m 种子
|
||||
4. 已建档币种:增量补 5m
|
||||
|
||||
间隔:`HUB_ARCHIVE_SYNC_INTERVAL_SEC`(默认 14400)。
|
||||
|
||||
## 代码位置
|
||||
|
||||
- `hub_symbol_archive_lib.py` — 库表、区间统计、种子、增量、聚合
|
||||
- `hub_trades_lib.py` — `fetch_trades_for_archive`
|
||||
- `hub_bridge.py` — 实例 `/api/hub/trades/archive`
|
||||
- `manual_trading_hub/hub.py` — 路由与后台同步
|
||||
- `manual_trading_hub/static/archive.js` — 内照明心前端
|
||||
|
||||
## 与行情区的区别
|
||||
|
||||
| | 行情区 | 内照明心 |
|
||||
|--|--------|----------|
|
||||
| DB | `hub_kline.db` | `hub_symbol_archive.db` |
|
||||
| 保留 | 15 天滚动删除 | 建档起永久 |
|
||||
| 周期 | 多周期直存/拉取 | 仅存 5m,高周期聚合 |
|
||||
| 用途 | 实时看盘 | 复盘语录与交易回顾 |
|
||||
|
||||
## 相关文档
|
||||
|
||||
- [中控平仓与交易记录](trend-hub-close-and-trade-records.md)
|
||||
- [中控使用说明](../manual_trading_hub/使用说明.md)
|
||||
# 内照明心与永久 K 线
|
||||
|
||||
## 概述
|
||||
|
||||
「内照明心」页(`/archive`)用于 **复盘语录 + 交易记录回顾 + 按需 K 线**.左侧维护每日复盘语录(最多 100 条);右侧按日期区间列出开仓记录,展示区间统计,并可展开 K 线图表对照单笔交易.
|
||||
|
||||
与行情区 `hub_kline.db`(15 天滚动缓存)**完全独立**:档案库只增不删,从建档起永久保留.
|
||||
|
||||
## 页面布局
|
||||
|
||||
| 区域 | 说明 |
|
||||
|------|------|
|
||||
| **复盘语录** | 左栏;按日期添加/编辑/删除,一日一条 |
|
||||
| **日期与筛选** | 顶栏:本日 / 本周 / 本月 / 自选区间;盈利单,亏损单,犯病,交易所,搜索 |
|
||||
| **区间统计** | 统计栏随日期选择自动更新(见下) |
|
||||
| **K 线图表** | 默认折叠;点「图表」或展开后按需加载 |
|
||||
| **交易记录** | 默认展开;犯病行 **红色字体**(无红底);可编辑标签与备注 |
|
||||
|
||||
## 日期区间
|
||||
|
||||
交易日按北京时间 **8:00** 切日(`TRADING_DAY_RESET_HOUR`).
|
||||
|
||||
| 模式 | 范围 |
|
||||
|------|------|
|
||||
| **本日** | 可选单个交易日(默认当前交易日) |
|
||||
| **本周** | 当周周一至当前交易日 |
|
||||
| **本月** | 当月 1 日至当前交易日 |
|
||||
| **区间** | 自选 `date_from`~`date_to`(含首尾交易日) |
|
||||
|
||||
## 区间统计(统计栏)
|
||||
|
||||
基于当前 **列表筛选结果**(含盈利/亏损/犯病勾选,合约搜索;交易所下拉仍限定数据源):
|
||||
|
||||
| 指标 | 说明 |
|
||||
|------|------|
|
||||
| 总开仓次数 | 区间内开仓笔数 |
|
||||
| 盈利单 / 亏损单 | 盈亏 > 0 / < 0 的笔数(持平不计) |
|
||||
| 平均盈利 / 平均亏损 | 盈利单,亏损单各自的均值(U) |
|
||||
| 最大盈利 / 最大亏损 | 单笔最大盈利,最大亏损(U) |
|
||||
| 犯病次数 / 占比 | `behavior_tag = sick` 的笔数及占开仓比例 |
|
||||
| 盈亏 | 区间内全部已平仓盈亏合计 |
|
||||
| 剔除犯病盈亏 | 排除犯病单后的盈亏合计 |
|
||||
| 各交易所 | 每所同上分项 |
|
||||
|
||||
在搜索框输入币种(如 `BTC`)后,统计栏与下方列表同步按该条件收窄.
|
||||
|
||||
## 数据约定
|
||||
|
||||
| 项 | 约定 |
|
||||
|----|------|
|
||||
| 交易来源 | 三所 `trade_records` + 未落库的 `strategy_trade_snapshots`,经 `/api/hub/trades/archive` 拉取 |
|
||||
| 犯病标签 | 中控 `trade_overlay.behavior_tag = sick` |
|
||||
| K 线真源 | 仅 **5m** 写入 `hub_symbol_archive.db` |
|
||||
| 建档种子 | 该币 **最早开仓** 向前 **30 天** 5m |
|
||||
| 增量同步 | 默认每 **4 小时** 补新 5m 至当前 |
|
||||
| 展示周期 | Tab:**5m / 15m / 1h / 4h**,默认 **15m** |
|
||||
| 视窗模式 | **持仓过程**(锚平仓,默认)/ **进场决策**(锚开仓) |
|
||||
| 时间跳转 | 输入 `YYYY-MM-DD HH:MM` 后点「跳转」 |
|
||||
|
||||
## 存储
|
||||
|
||||
- 默认路径:`manual_trading_hub/data/hub_symbol_archive.db`
|
||||
- 环境变量:`HUB_ARCHIVE_DB_PATH`
|
||||
- 表:
|
||||
- `archive_meta` — 建档元数据
|
||||
- `archive_bars_5m` — 永久 5m K 线
|
||||
- `archive_trade_cache` — 从实例同步的交易快照
|
||||
- `trade_overlay` — 犯病标签与备注(仅中控)
|
||||
- `archive_review_quotes` — 复盘语录
|
||||
|
||||
## API(中控 FastAPI)
|
||||
|
||||
| 方法 | 路径 | 说明 |
|
||||
|------|------|------|
|
||||
| GET | `/api/archive/meta` | 周期,交易所,同步间隔等 |
|
||||
| GET | `/api/archive/daily-trades` | 区间交易列表与统计(见 query) |
|
||||
| GET | `/api/archive/quotes` | 复盘语录列表 |
|
||||
| POST | `/api/archive/quotes` | 新增语录 |
|
||||
| PATCH | `/api/archive/quotes/{id}` | 更新语录 |
|
||||
| DELETE | `/api/archive/quotes/{id}` | 删除语录 |
|
||||
| GET | `/api/archive/ohlcv` | K 线视窗(`timeframe` / `mode` / `anchor_ms` / `at`) |
|
||||
| PATCH | `/api/archive/trade/{exchange_key}/{trade_id}` | 更新标签/备注 |
|
||||
| POST | `/api/archive/sync` | 立即同步三所交易 + K 线 |
|
||||
|
||||
`GET /api/archive/daily-trades` 主要 query:
|
||||
|
||||
| 参数 | 说明 |
|
||||
|------|------|
|
||||
| `period` | `today` / `week` / `month` / `range` |
|
||||
| `trading_day` | 本日模式下的交易日 `YYYY-MM-DD` |
|
||||
| `date_from` / `date_to` | 区间模式起止日 |
|
||||
| `exchange_key` | 可选,按交易所筛选 |
|
||||
| `filter_profit` / `filter_loss` / `filter_sick` | 过滤列表与统计 |
|
||||
| `search` | 合约 / 交易所 / 备注搜索(同步过滤列表与统计) |
|
||||
|
||||
返回 `stats` 含 `open_count`,`win_count`,`loss_count`,`win_rate`,`avg_win`,`avg_loss`,`profit_loss_ratio`,`max_win`,`max_loss`,`sick_count`,`sick_pct`,`pnl_total`,`pnl_ex_sick`,`by_exchange`.
|
||||
|
||||
实例侧:
|
||||
|
||||
| 方法 | 路径 | 说明 |
|
||||
|------|------|------|
|
||||
| GET | `/api/hub/trades/archive` | 近 N 天已平仓(`days` / `limit`) |
|
||||
|
||||
## 后台任务
|
||||
|
||||
Hub 启动后在 lifespan 中运行 `hub-archive-sync`:
|
||||
|
||||
1. 对各启用交易所调用 `/api/hub/trades/archive`
|
||||
2. 写入 `archive_trade_cache`
|
||||
3. 未建档币种:拉 30 天 5m 种子
|
||||
4. 已建档币种:增量补 5m
|
||||
|
||||
间隔:`HUB_ARCHIVE_SYNC_INTERVAL_SEC`(默认 14400).
|
||||
|
||||
## 代码位置
|
||||
|
||||
- `hub_symbol_archive_lib.py` — 库表,区间统计,种子,增量,聚合
|
||||
- `hub_trades_lib.py` — `fetch_trades_for_archive`
|
||||
- `hub_bridge.py` — 实例 `/api/hub/trades/archive`
|
||||
- `manual_trading_hub/hub.py` — 路由与后台同步
|
||||
- `manual_trading_hub/static/archive.js` — 内照明心前端
|
||||
|
||||
## 与行情区的区别
|
||||
|
||||
| | 行情区 | 内照明心 |
|
||||
|--|--------|----------|
|
||||
| DB | `hub_kline.db` | `hub_symbol_archive.db` |
|
||||
| 保留 | 15 天滚动删除 | 建档起永久 |
|
||||
| 周期 | 多周期直存/拉取 | 仅存 5m,高周期聚合 |
|
||||
| 用途 | 实时看盘 | 复盘语录与交易回顾 |
|
||||
|
||||
## 相关文档
|
||||
|
||||
- [中控平仓与交易记录](trend-hub-close-and-trade-records.md)
|
||||
- [中控使用说明](../manual_trading_hub/使用说明.md)
|
||||
|
||||
+147
-147
@@ -1,147 +1,147 @@
|
||||
# lib/ 共用模块结构
|
||||
|
||||
三所实例与中控共用的 Python 库、模板与静态资源统一放在仓库根目录的 **`lib/`** 下。部署单元(`crypto_monitor_*`、`manual_trading_hub`)仍保持独立目录与 PM2 配置不变。
|
||||
|
||||
**重构前快照 Git 标签**:`pre-lib-modularization`(可用 `git checkout pre-lib-modularization` 查看旧布局)。
|
||||
**移除 gate_bot 前快照 Git 标签**:`pre-remove-gate-bot`。
|
||||
|
||||
---
|
||||
|
||||
## 顶层目录
|
||||
|
||||
```
|
||||
crypto_monitor/
|
||||
├── crypto_monitor_binance/ # 三所:各自 app + .env + PM2
|
||||
├── crypto_monitor_gate/
|
||||
├── crypto_monitor_okx/
|
||||
├── manual_trading_hub/ # 中控 + 子代理 agent
|
||||
│
|
||||
├── lib/ # 共用模块(本说明)
|
||||
│ ├── strategy/
|
||||
│ ├── key_monitor/
|
||||
│ ├── trade/
|
||||
│ ├── hub/
|
||||
│ ├── ai/
|
||||
│ ├── instance/
|
||||
│ ├── exchange/
|
||||
│ ├── common/
|
||||
│ └── paths.py
|
||||
│
|
||||
├── brand/ # 各所共用图标
|
||||
├── docs/
|
||||
├── deploy/
|
||||
├── scripts/
|
||||
├── tests/
|
||||
├── requirements.txt
|
||||
└── README.md
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## lib/ 子包说明
|
||||
|
||||
| 子包 | 职责 | 主要模块 |
|
||||
|------|------|----------|
|
||||
| **`lib/strategy/`** | 策略交易(顺势加仓、趋势回调、快照与记录) | `strategy_register.py`、`strategy_trend_register.py`、`strategy_db.py`、`strategy_roll_*`、`strategy_trend_*` |
|
||||
| **`lib/strategy/templates/`** | 策略页 Jinja 模板(原 `strategy_templates/`) | `strategy_trading_page.html`、`strategy_roll_panel.html` 等 |
|
||||
| **`lib/key_monitor/`** | 关键位监控、斐波、假突破、止盈止损方案 | `key_monitor_lib.py`、`fib_key_monitor_lib.py`、`key_sl_tp_lib.py` 等 |
|
||||
| **`lib/trade/`** | 下单监控展示、计仓、账户风控、手动 SL/TP | `order_monitor_display_lib.py`、`position_sizing_lib.py`、`account_risk_lib.py` 等 |
|
||||
| **`lib/hub/`** | 中控 API、K 线、归档、计仓器、SSO/Bridge | `hub_bridge.py`、`hub_kline_store.py`、`hub_trades_lib.py` 等 |
|
||||
| **`lib/ai/`** | AI 复盘与文本生成 | `ai_client.py`、`ai_review_lib.py` |
|
||||
| **`lib/instance/`** | 中控 iframe 嵌入、导航、复盘图表 | `instance_embed_lib.py`、`focus_chart_lib.py`、`journal_chart_lib.py` |
|
||||
| **`lib/instance/templates/`** | 嵌入页片段(原 `embed_templates/`) | `embed_page_fragment.html` |
|
||||
| **`lib/exchange/`** | 特定交易所工具 | `gate_transfer_lib.py`、`okx_orders_lib.py` 等 |
|
||||
| **`lib/common/`** | 跨功能小工具 | `form_submit_lib.py`、`wechat_notify_lib.py` 等 |
|
||||
| **`lib/common/static/`** | 三所与中控共用的 JS/CSS(原根目录 `static/`) | `instance_theme.js`、`strategy_roll.js` 等 |
|
||||
|
||||
> **说明**:`hub_*` 命名表示「中控侧能力或行情聚合」,但部分模块(如 `hub_volume_rank_lib`、`hub_market_info_lib`)三所 `app.py` 也会调用,并非中控独占。
|
||||
|
||||
---
|
||||
|
||||
## 路径辅助函数
|
||||
|
||||
`lib/paths.py` 集中维护资源目录,避免硬编码:
|
||||
|
||||
```python
|
||||
from lib.paths import strategy_templates_dir, embed_templates_dir, common_static_dir
|
||||
|
||||
strategy_templates_dir() # .../lib/strategy/templates
|
||||
embed_templates_dir() # .../lib/instance/templates
|
||||
common_static_dir() # .../lib/common/static
|
||||
```
|
||||
|
||||
可选传入 `repo_root`(字符串或 `Path`),默认使用 `lib/` 的上级目录即仓库根。
|
||||
|
||||
---
|
||||
|
||||
## Python 导入约定
|
||||
|
||||
各部署目录在启动时将 **仓库根** 加入 `sys.path`(与重构前相同):
|
||||
|
||||
```python
|
||||
_REPO_ROOT = os.path.dirname(BASE_DIR) # 或 Path(__file__).resolve().parent.parent
|
||||
if _REPO_ROOT not in sys.path:
|
||||
sys.path.insert(0, _REPO_ROOT)
|
||||
```
|
||||
|
||||
之后使用 **`lib.<子包>.<模块>`** 形式导入,例如:
|
||||
|
||||
```python
|
||||
from lib.strategy.strategy_db import init_strategy_tables
|
||||
from lib.key_monitor.key_monitor_lib import check_key_monitors
|
||||
from lib.hub.hub_bridge import install_on_app
|
||||
from lib.ai.ai_client import ai_review
|
||||
```
|
||||
|
||||
策略注册仍在各所 `app.py` 末尾:
|
||||
|
||||
```python
|
||||
from lib.strategy.strategy_register import install_strategy_trading
|
||||
from lib.strategy.strategy_trend_register import install_strategy_trend
|
||||
|
||||
install_strategy_trading(app, _REPO_ROOT, app_module=sys.modules[__name__])
|
||||
install_strategy_trend(app, _REPO_ROOT, app_module=sys.modules[__name__])
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 静态资源与 URL
|
||||
|
||||
- 三所页面仍通过 **`/static/...`** 访问共用脚本;`hub_bridge.install_instance_theme_static` 从 `lib/common/static/` 提供部分根级静态路由。
|
||||
- 各所目录下 **`static/`**(图标、上传图片等)仍为实例私有,未迁入 `lib/`。
|
||||
- 中控 `manual_trading_hub/hub.py` 通过 `_REPO_ROOT / "lib" / "common" / "static"` 挂载与三所共用的 badge、复盘 JS 等。
|
||||
|
||||
---
|
||||
|
||||
## 测试
|
||||
|
||||
在仓库根执行(需将根目录置于 Python 路径,或从根目录运行):
|
||||
|
||||
```bash
|
||||
cd /opt/crypto_monitor
|
||||
python -m unittest discover -s tests -p "test_*.py"
|
||||
```
|
||||
|
||||
测试文件内统一 `from lib.<子包>.<模块> import ...`。使用 `@patch` 时目标写完整模块路径,例如 `lib.hub.hub_calculator_lib._resolve_market`。
|
||||
|
||||
---
|
||||
|
||||
## 迁移脚本
|
||||
|
||||
一次性迁移由 `scripts/migrate_to_lib.py` 完成(移动文件 + 批量改写 import)。**不要在已迁移后的仓库上重复执行**。
|
||||
|
||||
---
|
||||
|
||||
## 后续可选整理
|
||||
|
||||
- 三所 `app.py` 体量接近,可逐步抽取公共 `exchange_app` 基座(改动面大,单独规划)。
|
||||
- `manual_trading_hub/okx_orders_lib.py` 为 agent 本地副本,可与 `lib/exchange/okx_orders_lib.py` 合并去重。
|
||||
- 可引入 `pyproject.toml` + `pip install -e .`,替代 `sys.path.insert`(长期维护更规范)。
|
||||
|
||||
---
|
||||
|
||||
## 相关文档
|
||||
|
||||
- [README.md](../README.md) — 总览与部署
|
||||
- [策略交易说明.md](../策略交易说明.md)
|
||||
- [manual_trading_hub/使用说明.md](../manual_trading_hub/使用说明.md)
|
||||
# lib/ 共用模块结构
|
||||
|
||||
三所实例与中控共用的 Python 库,模板与静态资源统一放在仓库根目录的 **`lib/`** 下.部署单元(`crypto_monitor_*`,`manual_trading_hub`)仍保持独立目录与 PM2 配置不变.
|
||||
|
||||
**重构前快照 Git 标签**:`pre-lib-modularization`(可用 `git checkout pre-lib-modularization` 查看旧布局).
|
||||
**移除 gate_bot 前快照 Git 标签**:`pre-remove-gate-bot`.
|
||||
|
||||
---
|
||||
|
||||
## 顶层目录
|
||||
|
||||
```
|
||||
crypto_monitor/
|
||||
├── crypto_monitor_binance/ # 三所:各自 app + .env + PM2
|
||||
├── crypto_monitor_gate/
|
||||
├── crypto_monitor_okx/
|
||||
├── manual_trading_hub/ # 中控 + 子代理 agent
|
||||
│
|
||||
├── lib/ # 共用模块(本说明)
|
||||
│ ├── strategy/
|
||||
│ ├── key_monitor/
|
||||
│ ├── trade/
|
||||
│ ├── hub/
|
||||
│ ├── ai/
|
||||
│ ├── instance/
|
||||
│ ├── exchange/
|
||||
│ ├── common/
|
||||
│ └── paths.py
|
||||
│
|
||||
├── brand/ # 各所共用图标
|
||||
├── docs/
|
||||
├── deploy/
|
||||
├── scripts/
|
||||
├── tests/
|
||||
├── requirements.txt
|
||||
└── README.md
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## lib/ 子包说明
|
||||
|
||||
| 子包 | 职责 | 主要模块 |
|
||||
|------|------|----------|
|
||||
| **`lib/strategy/`** | 策略交易(顺势加仓,趋势回调,快照与记录) | `strategy_register.py`,`strategy_trend_register.py`,`strategy_db.py`,`strategy_roll_*`,`strategy_trend_*` |
|
||||
| **`lib/strategy/templates/`** | 策略页 Jinja 模板(原 `strategy_templates/`) | `strategy_trading_page.html`,`strategy_roll_panel.html` 等 |
|
||||
| **`lib/key_monitor/`** | 关键位监控,斐波,假突破,止盈止损方案 | `key_monitor_lib.py`,`fib_key_monitor_lib.py`,`key_sl_tp_lib.py` 等 |
|
||||
| **`lib/trade/`** | 下单监控展示,计仓,账户风控,手动 SL/TP | `order_monitor_display_lib.py`,`position_sizing_lib.py`,`account_risk_lib.py` 等 |
|
||||
| **`lib/hub/`** | 中控 API,K 线,归档,计仓器,SSO/Bridge | `hub_bridge.py`,`hub_kline_store.py`,`hub_trades_lib.py` 等 |
|
||||
| **`lib/ai/`** | AI 复盘与文本生成 | `ai_client.py`,`ai_review_lib.py` |
|
||||
| **`lib/instance/`** | 中控 iframe 嵌入,导航,复盘图表 | `instance_embed_lib.py`,`focus_chart_lib.py`,`journal_chart_lib.py` |
|
||||
| **`lib/instance/templates/`** | 嵌入页片段(原 `embed_templates/`) | `embed_page_fragment.html` |
|
||||
| **`lib/exchange/`** | 特定交易所工具 | `gate_transfer_lib.py`,`okx_orders_lib.py` 等 |
|
||||
| **`lib/common/`** | 跨功能小工具 | `form_submit_lib.py`,`wechat_notify_lib.py` 等 |
|
||||
| **`lib/common/static/`** | 三所与中控共用的 JS/CSS(原根目录 `static/`) | `instance_theme.js`,`strategy_roll.js` 等 |
|
||||
|
||||
> **说明**:`hub_*` 命名表示「中控侧能力或行情聚合」,但部分模块(如 `hub_volume_rank_lib`,`hub_market_info_lib`)三所 `app.py` 也会调用,并非中控独占.
|
||||
|
||||
---
|
||||
|
||||
## 路径辅助函数
|
||||
|
||||
`lib/paths.py` 集中维护资源目录,避免硬编码:
|
||||
|
||||
```python
|
||||
from lib.paths import strategy_templates_dir, embed_templates_dir, common_static_dir
|
||||
|
||||
strategy_templates_dir() # .../lib/strategy/templates
|
||||
embed_templates_dir() # .../lib/instance/templates
|
||||
common_static_dir() # .../lib/common/static
|
||||
```
|
||||
|
||||
可选传入 `repo_root`(字符串或 `Path`),默认使用 `lib/` 的上级目录即仓库根.
|
||||
|
||||
---
|
||||
|
||||
## Python 导入约定
|
||||
|
||||
各部署目录在启动时将 **仓库根** 加入 `sys.path`(与重构前相同):
|
||||
|
||||
```python
|
||||
_REPO_ROOT = os.path.dirname(BASE_DIR) # 或 Path(__file__).resolve().parent.parent
|
||||
if _REPO_ROOT not in sys.path:
|
||||
sys.path.insert(0, _REPO_ROOT)
|
||||
```
|
||||
|
||||
之后使用 **`lib.<子包>.<模块>`** 形式导入,例如:
|
||||
|
||||
```python
|
||||
from lib.strategy.strategy_db import init_strategy_tables
|
||||
from lib.key_monitor.key_monitor_lib import check_key_monitors
|
||||
from lib.hub.hub_bridge import install_on_app
|
||||
from lib.ai.ai_client import ai_review
|
||||
```
|
||||
|
||||
策略注册仍在各所 `app.py` 末尾:
|
||||
|
||||
```python
|
||||
from lib.strategy.strategy_register import install_strategy_trading
|
||||
from lib.strategy.strategy_trend_register import install_strategy_trend
|
||||
|
||||
install_strategy_trading(app, _REPO_ROOT, app_module=sys.modules[__name__])
|
||||
install_strategy_trend(app, _REPO_ROOT, app_module=sys.modules[__name__])
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 静态资源与 URL
|
||||
|
||||
- 三所页面仍通过 **`/static/...`** 访问共用脚本;`hub_bridge.install_instance_theme_static` 从 `lib/common/static/` 提供部分根级静态路由.
|
||||
- 各所目录下 **`static/`**(图标,上传图片等)仍为实例私有,未迁入 `lib/`.
|
||||
- 中控 `manual_trading_hub/hub.py` 通过 `_REPO_ROOT / "lib" / "common" / "static"` 挂载与三所共用的 badge,复盘 JS 等.
|
||||
|
||||
---
|
||||
|
||||
## 测试
|
||||
|
||||
在仓库根执行(需将根目录置于 Python 路径,或从根目录运行):
|
||||
|
||||
```bash
|
||||
cd /opt/crypto_monitor
|
||||
python -m unittest discover -s tests -p "test_*.py"
|
||||
```
|
||||
|
||||
测试文件内统一 `from lib.<子包>.<模块> import ...`.使用 `@patch` 时目标写完整模块路径,例如 `lib.hub.hub_calculator_lib._resolve_market`.
|
||||
|
||||
---
|
||||
|
||||
## 迁移脚本
|
||||
|
||||
一次性迁移由 `scripts/migrate_to_lib.py` 完成(移动文件 + 批量改写 import).**不要在已迁移后的仓库上重复执行**.
|
||||
|
||||
---
|
||||
|
||||
## 后续可选整理
|
||||
|
||||
- 三所 `app.py` 体量接近,可逐步抽取公共 `exchange_app` 基座(改动面大,单独规划).
|
||||
- `manual_trading_hub/okx_orders_lib.py` 为 agent 本地副本,可与 `lib/exchange/okx_orders_lib.py` 合并去重.
|
||||
- 可引入 `pyproject.toml` + `pip install -e .`,替代 `sys.path.insert`(长期维护更规范).
|
||||
|
||||
---
|
||||
|
||||
## 相关文档
|
||||
|
||||
- [README.md](../README.md) — 总览与部署
|
||||
- [策略交易说明.md](../策略交易说明.md)
|
||||
- [manual_trading_hub/使用说明.md](../manual_trading_hub/使用说明.md)
|
||||
|
||||
+22
-22
@@ -1,7 +1,7 @@
|
||||
# 宏观关键数据 · 风控前置
|
||||
|
||||
中控 **系统设置** 手动录入 FOMC / CPI / 就业数据发布时间,在 **监控区** 发布前后各 1 小时给出风险提示。
|
||||
**不看公布结果、不解读数据**,仅作波动窗口前的行为提醒;**不拦截下单**(与账户冷静期/日冻结独立)。
|
||||
中控 **系统设置** 手动录入 FOMC / CPI / 就业数据发布时间,在 **监控区** 发布前后各 1 小时给出风险提示.
|
||||
**不看公布结果,不解读数据**,仅作波动窗口前的行为提醒;**不拦截下单**(与账户冷静期/日冻结独立).
|
||||
|
||||
## 支持的数据类型
|
||||
|
||||
@@ -11,15 +11,15 @@
|
||||
| `cpi` | 美国 CPI 通胀 |
|
||||
| `employment` | 就业与劳工数据 |
|
||||
|
||||
每项在设置中 **名称下拉三选一**,**发布时间** 手动输入(北京时间,精确到分钟)。FOMC 只录 **一条**(决议公布时刻即可)。
|
||||
每项在设置中 **名称下拉三选一**,**发布时间** 手动输入(北京时间,精确到分钟).FOMC 只录 **一条**(决议公布时刻即可).
|
||||
|
||||
## 风险窗口
|
||||
|
||||
- 默认:**发布时间 ±1 小时**
|
||||
- 发布前 **30 分钟内**:文案加强为「即将发布」
|
||||
- 窗口结束后横幅自动消失;设置列表中过期记录逐步不再展示
|
||||
- 默认:**发布时间 ±1 小时**
|
||||
- 发布前 **30 分钟内**:文案加强为「即将发布」
|
||||
- 窗口结束后横幅自动消失;设置列表中过期记录逐步不再展示
|
||||
|
||||
环境变量(可选):
|
||||
环境变量(可选):
|
||||
|
||||
```env
|
||||
HUB_MACRO_WINDOW_BEFORE_SEC=3600
|
||||
@@ -30,34 +30,34 @@ HUB_MACRO_LIST_FUTURE_DAYS=60
|
||||
|
||||
## 监控区提示文案
|
||||
|
||||
读取当前监控板:**任意交易所有持仓 = 有仓**,否则 = 无仓。
|
||||
读取当前监控板:**任意交易所有持仓 = 有仓**,否则 = 无仓.
|
||||
|
||||
| 场景 | 提示要点 |
|
||||
|------|----------|
|
||||
| 无仓 · 窗口内 | 建议等待,避免新开仓 |
|
||||
| 有仓 · 窗口内 | 注意仓位,勿加仓,检查止损/减仓 |
|
||||
| 即将发布(30 分钟内) | 在上述基础上标注剩余分钟数 |
|
||||
| 无仓 · 窗口内 | 建议等待,避免新开仓 |
|
||||
| 有仓 · 窗口内 | 注意仓位,勿加仓,检查止损/减仓 |
|
||||
| 即将发布(30 分钟内) | 在上述基础上标注剩余分钟数 |
|
||||
|
||||
## 存储
|
||||
|
||||
- SQLite:`manual_trading_hub/data/hub_macro_calendar.db`
|
||||
- 可覆盖:`HUB_MACRO_CALENDAR_DB_PATH`
|
||||
- SQLite:`manual_trading_hub/data/hub_macro_calendar.db`
|
||||
- 可覆盖:`HUB_MACRO_CALENDAR_DB_PATH`
|
||||
|
||||
表 `macro_events`:`event_type`, `event_at_ms`, `note`, `created_at_ms`, `updated_at_ms`
|
||||
同类型 + 同一发布时间不可重复录入。
|
||||
表 `macro_events`:`event_type`, `event_at_ms`, `note`, `created_at_ms`, `updated_at_ms`
|
||||
同类型 + 同一发布时间不可重复录入.
|
||||
|
||||
## API(均需中控登录)
|
||||
## API(均需中控登录)
|
||||
|
||||
| 方法 | 路径 | 说明 |
|
||||
|------|------|------|
|
||||
| GET | `/api/macro-calendar/meta` | 类型列表与窗口说明 |
|
||||
| GET | `/api/macro-calendar/events` | 设置页列表 |
|
||||
| GET | `/api/macro-calendar/active` | 当前处于窗口内的事件(监控横幅) |
|
||||
| GET | `/api/macro-calendar/active` | 当前处于窗口内的事件(监控横幅) |
|
||||
| POST | `/api/macro-calendar/events` | 新增 |
|
||||
| PATCH | `/api/macro-calendar/events/{id}` | 更新 |
|
||||
| DELETE | `/api/macro-calendar/events/{id}` | 删除 |
|
||||
|
||||
请求体示例:
|
||||
请求体示例:
|
||||
|
||||
```json
|
||||
{
|
||||
@@ -69,15 +69,15 @@ HUB_MACRO_LIST_FUTURE_DAYS=60
|
||||
|
||||
## 使用习惯
|
||||
|
||||
1. 每月在金十/日历查看 **FOMC、CPI、非农** 公布时间
|
||||
1. 每月在金十/日历查看 **FOMC,CPI,非农** 公布时间
|
||||
2. 中控 **系统设置 → 宏观关键数据** 录入 1~3 条
|
||||
3. 到点前后监控区顶栏出现 **宏观风控** 横幅;无操作则窗口结束后自动消失
|
||||
3. 到点前后监控区顶栏出现 **宏观风控** 横幅;无操作则窗口结束后自动消失
|
||||
|
||||
## 与账户风控的关系
|
||||
|
||||
| 模块 | 时机 | 作用 |
|
||||
|------|------|------|
|
||||
| 宏观日历 | **事前** | 已知高波动窗口,提醒等待或管仓 |
|
||||
| 宏观日历 | **事前** | 已知高波动窗口,提醒等待或管仓 |
|
||||
| 账户冷静期/日冻结 | **事后** | 用户主动平仓后的惩罚性限制 |
|
||||
|
||||
宏观提醒 **不触发** 冷静期、不计入手动平仓次数。
|
||||
宏观提醒 **不触发** 冷静期,不计入手动平仓次数.
|
||||
|
||||
@@ -1,31 +1,31 @@
|
||||
# 实盘下单 · 预估盈亏比
|
||||
|
||||
## 功能
|
||||
|
||||
三所(Binance / OKX / Gate)**实盘下单监控**表单中,在「开仓」按钮前显示 **预估盈亏比**。
|
||||
|
||||
- **价格模式**:填完币种、方向、止损价、止盈价后,调用 `GET /api/order_defaults` 取标记价,按几何距离计算 RR。
|
||||
- **百分比模式**:填完币种、方向、止损%、止盈% 后拉快照校验币种,再显示 RR(`止盈% / 止损%`)。
|
||||
- **固定盈亏比模式**:盈亏比由输入框直接指定;下方预览条显示预估风险/盈利/盈亏比(不再在表单行内显示预估止盈价)。
|
||||
|
||||
- **以损定仓**(`POSITION_SIZING_MODE=risk`):预估风险 = 当前交易基数 × `risk%`。
|
||||
- **全仓杠杆**(`full_margin`):预估风险 = 合约可用 × 缓冲比例 × 杠杆(BTC/ETH 与山寨按 `.env` 配置)× 止损距离比例,与开仓时 `calc_risk_amount_from_plan` 一致。
|
||||
|
||||
## 前端实现
|
||||
|
||||
- 共享脚本:`static/manual_order_rr_preview.js`
|
||||
- 各所 `templates/index.html` 引入并在 `MANUAL_MIN_PLANNED_RR` 定义后执行:
|
||||
```js
|
||||
ManualOrderRrPreview.wire({ minRr: MANUAL_MIN_PLANNED_RR });
|
||||
```
|
||||
- 展示元素:`#order-rr-preview`(开仓按钮左侧)
|
||||
- 颜色:≥ 最低要求为绿色,低于为红色,无效/取价失败为红色或灰色
|
||||
|
||||
## 与提交校验
|
||||
|
||||
提交时仍走原有 `calcClientRr` / `calcClientRrFromPct` 与 `rejectManualOrderRr`;预估仅用于下单前参考,不替代服务端风控。
|
||||
|
||||
## 校验记录
|
||||
|
||||
- `node --check static/manual_order_rr_preview.js`
|
||||
- `tests/test_manual_order_rr_preview.py`:RR 公式与三所 `calc_rr_ratio` 口径一致
|
||||
# 实盘下单 · 预估盈亏比
|
||||
|
||||
## 功能
|
||||
|
||||
三所(Binance / OKX / Gate)**实盘下单监控**表单中,在「开仓」按钮前显示 **预估盈亏比**.
|
||||
|
||||
- **价格模式**:填完币种,方向,止损价,止盈价后,调用 `GET /api/order_defaults` 取标记价,按几何距离计算 RR.
|
||||
- **百分比模式**:填完币种,方向,止损%,止盈% 后拉快照校验币种,再显示 RR(`止盈% / 止损%`).
|
||||
- **固定盈亏比模式**:盈亏比由输入框直接指定;下方预览条显示预估风险/盈利/盈亏比(不再在表单行内显示预估止盈价).
|
||||
|
||||
- **以损定仓**(`POSITION_SIZING_MODE=risk`):预估风险 = 当前交易基数 × `risk%`.
|
||||
- **全仓杠杆**(`full_margin`):预估风险 = 合约可用 × 缓冲比例 × 杠杆(BTC/ETH 与山寨按 `.env` 配置)× 止损距离比例,与开仓时 `calc_risk_amount_from_plan` 一致.
|
||||
|
||||
## 前端实现
|
||||
|
||||
- 共享脚本:`static/manual_order_rr_preview.js`
|
||||
- 各所 `templates/index.html` 引入并在 `MANUAL_MIN_PLANNED_RR` 定义后执行:
|
||||
```js
|
||||
ManualOrderRrPreview.wire({ minRr: MANUAL_MIN_PLANNED_RR });
|
||||
```
|
||||
- 展示元素:`#order-rr-preview`(开仓按钮左侧)
|
||||
- 颜色:≥ 最低要求为绿色,低于为红色,无效/取价失败为红色或灰色
|
||||
|
||||
## 与提交校验
|
||||
|
||||
提交时仍走原有 `calcClientRr` / `calcClientRrFromPct` 与 `rejectManualOrderRr`;预估仅用于下单前参考,不替代服务端风控.
|
||||
|
||||
## 校验记录
|
||||
|
||||
- `node --check static/manual_order_rr_preview.js`
|
||||
- `tests/test_manual_order_rr_preview.py`:RR 公式与三所 `calc_rr_ratio` 口径一致
|
||||
|
||||
@@ -1,73 +1,73 @@
|
||||
# 计仓模式(三所统一)
|
||||
|
||||
## 配置
|
||||
|
||||
在各实例 `.env` 中设置(**仅能通过 env 切换,修改后须重启进程**):
|
||||
|
||||
```env
|
||||
# risk(默认)= 以损定仓
|
||||
# full_margin = 全仓杠杆(合约可用保证金 × 比例)
|
||||
POSITION_SIZING_MODE=risk
|
||||
FULL_MARGIN_BUFFER_RATIO=0.98
|
||||
|
||||
# 关键位程序自动单(默认 false,详见各所 关键位自动下单说明.md)
|
||||
KEY_AUTO_ORDER_ENABLED=false
|
||||
```
|
||||
|
||||
切换为全仓杠杆前:**交易所须无持仓**(`MAX_ACTIVE_POSITIONS` 默认 1,全仓模式会强制单仓)。
|
||||
|
||||
## 模式说明
|
||||
|
||||
| 模式 | 保证金计算 | 杠杆 | 允许入口 |
|
||||
|------|------------|------|----------|
|
||||
| `risk` | `RISK_PERCENT` × 交易资金,按止损距离反推 | 表单可选 / 同步交易所 | 实盘人工、关键位自动(须 `KEY_AUTO_ORDER_ENABLED=true`)、趋势回调、顺势加仓 |
|
||||
| `full_margin` | **合约账户可用 USDT × `FULL_MARGIN_BUFFER_RATIO`**(保留 2 位小数) | BTC/ETH **10x**,其它 **5x**(与 `BTC_LEVERAGE`/`ALT_LEVERAGE` 一致) | **实盘人工下单**、**关键位触价**(须 `KEY_AUTO_ORDER_ENABLED=true`);阻力/支撑仅提醒 |
|
||||
|
||||
全仓模式下:
|
||||
|
||||
- **`KEY_AUTO_ORDER_ENABLED=false`(默认)** 时,触价程序自动单也不执行。
|
||||
- **`KEY_AUTO_ORDER_ENABLED=true`** 时,仅触价可程序自动开仓;箱体/斐波等仍禁止。
|
||||
- 仍校验 **计划盈亏比**(实盘用 `MANUAL_MIN_PLANNED_RR`;触价开仓用 `KEY_AUTO_MIN_PLANNED_RR`)。
|
||||
- 下单张数由 `prepare_order_amount` + 交易所 `amount_to_precision` 决定。
|
||||
- `order_monitors.initial_stop_loss` 仍记录**开仓时**止损快照;交易记录复盘以该快照为准。
|
||||
- 已存在的 **箱体突破 / 收敛突破 / 斐波 / 假突破** 监控:进程启动时**自动撤销**并企业微信通知。
|
||||
|
||||
## 不允许(全仓模式)
|
||||
|
||||
- 关键位:箱体突破、收敛突破、斐波、假突破(添加时拒绝;已存在则启动时撤销)。
|
||||
- 趋势回调、顺势加仓(策略入口返回明确错误)。
|
||||
|
||||
**允许(须 `KEY_AUTO_ORDER_ENABLED=true`):** 关键位 **回调触价开仓** / **突破触价开仓**(程序盯价、触达/穿越计划入场后市价成交,无交易所挂单;全仓下仅允许一条待触发)。
|
||||
|
||||
## `KEY_AUTO_ORDER_ENABLED`(三所统一,默认 `false`)
|
||||
|
||||
| 计仓 | 开关 | 效果 |
|
||||
|------|------|------|
|
||||
| `risk` | `false` | 关闭全部关键位程序自动单(含触价);顺势加仓不受影响 |
|
||||
| `risk` | `true` | 关键位全套自动(旧行为) |
|
||||
| `full_margin` | `false` | 关闭触价自动 |
|
||||
| `full_margin` | `true` | 仅触价自动 |
|
||||
|
||||
详见各实例目录 `关键位自动下单说明.md`。
|
||||
|
||||
## 用脚本更新三所 `.env`
|
||||
|
||||
详见 **[env-sync-scripts.md](./env-sync-scripts.md)**。常用命令:
|
||||
|
||||
```bash
|
||||
git pull
|
||||
|
||||
# 仅补全计仓相关项(缺省 risk、缓冲 0.98)
|
||||
python scripts/sync_four_exchange_position_sizing_env.py
|
||||
|
||||
# 无仓后切换全仓
|
||||
python scripts/sync_four_exchange_position_sizing_env.py --set-mode full_margin
|
||||
|
||||
# 无仓后切回以损定仓
|
||||
python scripts/sync_four_exchange_position_sizing_env.py --set-mode risk
|
||||
|
||||
# 计仓 + 划转一并补全
|
||||
python scripts/sync_four_exchange_env.py
|
||||
|
||||
pm2 restart crypto-monitor-binance crypto-monitor-okx crypto-monitor-gate
|
||||
```
|
||||
# 计仓模式(三所统一)
|
||||
|
||||
## 配置
|
||||
|
||||
在各实例 `.env` 中设置(**仅能通过 env 切换,修改后须重启进程**):
|
||||
|
||||
```env
|
||||
# risk(默认)= 以损定仓
|
||||
# full_margin = 全仓杠杆(合约可用保证金 × 比例)
|
||||
POSITION_SIZING_MODE=risk
|
||||
FULL_MARGIN_BUFFER_RATIO=0.98
|
||||
|
||||
# 关键位程序自动单(默认 false,详见各所 关键位自动下单说明.md)
|
||||
KEY_AUTO_ORDER_ENABLED=false
|
||||
```
|
||||
|
||||
切换为全仓杠杆前:**交易所须无持仓**(`MAX_ACTIVE_POSITIONS` 默认 1,全仓模式会强制单仓).
|
||||
|
||||
## 模式说明
|
||||
|
||||
| 模式 | 保证金计算 | 杠杆 | 允许入口 |
|
||||
|------|------------|------|----------|
|
||||
| `risk` | `RISK_PERCENT` × 交易资金,按止损距离反推 | 表单可选 / 同步交易所 | 实盘人工,关键位自动(须 `KEY_AUTO_ORDER_ENABLED=true`),趋势回调,顺势加仓 |
|
||||
| `full_margin` | **合约账户可用 USDT × `FULL_MARGIN_BUFFER_RATIO`**(保留 2 位小数) | BTC/ETH **10x**,其它 **5x**(与 `BTC_LEVERAGE`/`ALT_LEVERAGE` 一致) | **实盘人工下单**,**关键位触价**(须 `KEY_AUTO_ORDER_ENABLED=true`);阻力/支撑仅提醒 |
|
||||
|
||||
全仓模式下:
|
||||
|
||||
- **`KEY_AUTO_ORDER_ENABLED=false`(默认)** 时,触价程序自动单也不执行.
|
||||
- **`KEY_AUTO_ORDER_ENABLED=true`** 时,仅触价可程序自动开仓;箱体/斐波等仍禁止.
|
||||
- 仍校验 **计划盈亏比**(实盘用 `MANUAL_MIN_PLANNED_RR`;触价开仓用 `KEY_AUTO_MIN_PLANNED_RR`).
|
||||
- 下单张数由 `prepare_order_amount` + 交易所 `amount_to_precision` 决定.
|
||||
- `order_monitors.initial_stop_loss` 仍记录**开仓时**止损快照;交易记录复盘以该快照为准.
|
||||
- 已存在的 **箱体突破 / 收敛突破 / 斐波 / 假突破** 监控:进程启动时**自动撤销**并企业微信通知.
|
||||
|
||||
## 不允许(全仓模式)
|
||||
|
||||
- 关键位:箱体突破,收敛突破,斐波,假突破(添加时拒绝;已存在则启动时撤销).
|
||||
- 趋势回调,顺势加仓(策略入口返回明确错误).
|
||||
|
||||
**允许(须 `KEY_AUTO_ORDER_ENABLED=true`):** 关键位 **回调触价开仓** / **突破触价开仓**(程序盯价,触达/穿越计划入场后市价成交,无交易所挂单;全仓下仅允许一条待触发).
|
||||
|
||||
## `KEY_AUTO_ORDER_ENABLED`(三所统一,默认 `false`)
|
||||
|
||||
| 计仓 | 开关 | 效果 |
|
||||
|------|------|------|
|
||||
| `risk` | `false` | 关闭全部关键位程序自动单(含触价);顺势加仓不受影响 |
|
||||
| `risk` | `true` | 关键位全套自动(旧行为) |
|
||||
| `full_margin` | `false` | 关闭触价自动 |
|
||||
| `full_margin` | `true` | 仅触价自动 |
|
||||
|
||||
详见各实例目录 `关键位自动下单说明.md`.
|
||||
|
||||
## 用脚本更新三所 `.env`
|
||||
|
||||
详见 **[env-sync-scripts.md](./env-sync-scripts.md)**.常用命令:
|
||||
|
||||
```bash
|
||||
git pull
|
||||
|
||||
# 仅补全计仓相关项(缺省 risk,缓冲 0.98)
|
||||
python scripts/sync_four_exchange_position_sizing_env.py
|
||||
|
||||
# 无仓后切换全仓
|
||||
python scripts/sync_four_exchange_position_sizing_env.py --set-mode full_margin
|
||||
|
||||
# 无仓后切回以损定仓
|
||||
python scripts/sync_four_exchange_position_sizing_env.py --set-mode risk
|
||||
|
||||
# 计仓 + 划转一并补全
|
||||
python scripts/sync_four_exchange_env.py
|
||||
|
||||
pm2 restart crypto-monitor-binance crypto-monitor-okx crypto-monitor-gate
|
||||
```
|
||||
|
||||
+41
-41
@@ -1,41 +1,41 @@
|
||||
# Chrome 桌面快捷方式图标说明
|
||||
|
||||
## 图标从哪来?
|
||||
|
||||
用 Chrome **「创建快捷方式」** 或 **「安装应用」** 时,桌面/开始菜单图标**不是**操作系统自带的,而是浏览器从**你打开的网站**读取的,优先级大致为:
|
||||
|
||||
1. `manifest.webmanifest` 里的 `icons`(192×192、512×512)
|
||||
2. `link rel="apple-touch-icon"`(约 180×180)
|
||||
3. `link rel="icon"` / `favicon.ico`
|
||||
4. 若都没有 → 灰色地球或网页标题首字
|
||||
|
||||
本仓库已在 **中控** 与 **三所监控页** 配置统一品牌图标(深色圆角底 + 青绿趋势线 + 简化的 K 线),与页面 UI 一致。PNG/ICO 由 **Pillow** 生成,避免损坏的 favicon 出现花屏。
|
||||
|
||||
## 文件位置
|
||||
|
||||
| 位置 | 访问路径 |
|
||||
|------|----------|
|
||||
| 源稿 | `brand/icon.svg`、`brand/icons/*.png` |
|
||||
| 中控 | `manual_trading_hub/static/icons/` → `/assets/icons/...` |
|
||||
| 三所 | `crypto_monitor_*/static/icons/` → `/static/icons/...` |
|
||||
|
||||
## 重新生成 / 同步
|
||||
|
||||
```bash
|
||||
python scripts/generate_brand_icons.py
|
||||
python scripts/sync_brand_icons.py
|
||||
git pull # 服务器部署后
|
||||
pm2 restart …
|
||||
```
|
||||
|
||||
## 快捷方式仍显示旧图标?
|
||||
|
||||
Chrome / Windows 会**缓存** favicon:
|
||||
|
||||
1. 浏览器打开站点,**Ctrl+F5** 强刷
|
||||
2. 删除旧快捷方式,重新「创建快捷方式」
|
||||
3. 必要时清除 Chrome 站点数据(该域名)后再创建
|
||||
|
||||
## 自定义图标
|
||||
|
||||
可替换 `brand/icon.svg` 后重新运行上面两条命令;或把设计好的 `icon-192.png`、`icon-512.png` 放入 `brand/icons/` 再 `sync_brand_icons.py`。
|
||||
# Chrome 桌面快捷方式图标说明
|
||||
|
||||
## 图标从哪来?
|
||||
|
||||
用 Chrome **「创建快捷方式」** 或 **「安装应用」** 时,桌面/开始菜单图标**不是**操作系统自带的,而是浏览器从**你打开的网站**读取的,优先级大致为:
|
||||
|
||||
1. `manifest.webmanifest` 里的 `icons`(192×192,512×512)
|
||||
2. `link rel="apple-touch-icon"`(约 180×180)
|
||||
3. `link rel="icon"` / `favicon.ico`
|
||||
4. 若都没有 → 灰色地球或网页标题首字
|
||||
|
||||
本仓库已在 **中控** 与 **三所监控页** 配置统一品牌图标(深色圆角底 + 青绿趋势线 + 简化的 K 线),与页面 UI 一致.PNG/ICO 由 **Pillow** 生成,避免损坏的 favicon 出现花屏.
|
||||
|
||||
## 文件位置
|
||||
|
||||
| 位置 | 访问路径 |
|
||||
|------|----------|
|
||||
| 源稿 | `brand/icon.svg`,`brand/icons/*.png` |
|
||||
| 中控 | `manual_trading_hub/static/icons/` → `/assets/icons/...` |
|
||||
| 三所 | `crypto_monitor_*/static/icons/` → `/static/icons/...` |
|
||||
|
||||
## 重新生成 / 同步
|
||||
|
||||
```bash
|
||||
python scripts/generate_brand_icons.py
|
||||
python scripts/sync_brand_icons.py
|
||||
git pull # 服务器部署后
|
||||
pm2 restart …
|
||||
```
|
||||
|
||||
## 快捷方式仍显示旧图标?
|
||||
|
||||
Chrome / Windows 会**缓存** favicon:
|
||||
|
||||
1. 浏览器打开站点,**Ctrl+F5** 强刷
|
||||
2. 删除旧快捷方式,重新「创建快捷方式」
|
||||
3. 必要时清除 Chrome 站点数据(该域名)后再创建
|
||||
|
||||
## 自定义图标
|
||||
|
||||
可替换 `brand/icon.svg` 后重新运行上面两条命令;或把设计好的 `icon-192.png`,`icon-512.png` 放入 `brand/icons/` 再 `sync_brand_icons.py`.
|
||||
|
||||
+34
-34
@@ -1,34 +1,34 @@
|
||||
# 策略文档
|
||||
|
||||
各交易实例的人工下单策略,供 UI / 复盘对齐。
|
||||
|
||||
| 文档 | 实例 | 状态 |
|
||||
|------|------|------|
|
||||
| [binance-alt-trend-long.md](./binance-alt-trend-long.md) | 币安山寨·多头趋势 | v0.4 讨论稿 |
|
||||
| [okx-trend-both.md](./okx-trend-both.md) | OKX·多空趋势 | v0.4 讨论稿 |
|
||||
| [gate-intraday.md](./gate-intraday.md) | Gate·BTC 日内 | v0.2 |
|
||||
|
||||
## 约定
|
||||
|
||||
- **不写盈亏比(趋势户)**:币安/OKX 止盈/止损随行情人工设定,趋势 MD 不量化 RR。
|
||||
- **日内例外**:Gate 日内 **最低 1:1** 才开仓,持仓目标可动态调整(见 [gate-intraday.md](./gate-intraday.md))。
|
||||
- **界面(趋势户 · v0.4)**:两级 — **反转**(启动 A/B)| **顺势**(大分歧 A/B)| **波段**(小分歧);`lib/trade/entry_model_lib.py` 三所共用。
|
||||
- **界面短标签(日内户)**:`假破` / `结构突破`。
|
||||
- **多空共用三字**:方向由「做多/做空」表达,不复用为「大分歧A多」等。
|
||||
- **自动联动**:大分歧 A/B → 趋势单;**小分歧 → 波段单**;平仓写入交易记录 `entry_reason`;复盘「填入」自动带入。
|
||||
- **杠杆默认**:BTC/ETH **10x**,其它 **5x**;与开仓类型无关(env `BTC_LEVERAGE` / `ALT_LEVERAGE`)。
|
||||
- **日内 profile 独立**:env 启用 `TRADE_SYMBOL_WHITELIST=BTC,ETH` 且限制开启时,**不显示** 大分歧三项(Gate);开仓类型为 **假破 / 结构突破**(见 gate-intraday.md)。
|
||||
- **日内 0 点出场**:策略称「0 点平仓」;程序为 `FORCE_CLOSE_ENABLED` + `FORCE_CLOSE_BJ_HOUR=0`,交易记录 `result=强制清仓`(与表单 1h/2h/4h `time_close` 无关)。
|
||||
- **策略模块独立**:趋势回调、顺势加仓不走上述三项。
|
||||
|
||||
## 系统实现
|
||||
|
||||
- 库:`lib/trade/entry_model_lib.py`
|
||||
- 趋势户表单:`lib/instance/templates/order_entry_model_fields.html`
|
||||
- 日内判定:`is_intraday_trading_profile()`(白名单仅含 BTC/ETH)
|
||||
- 0 点强平:`force_close_before_reset()`(三所 `app.py`);env `FORCE_CLOSE_ENABLED` / `FORCE_CLOSE_BJ_HOUR`
|
||||
|
||||
## 相关文档
|
||||
|
||||
- [计仓模式](../position-sizing-mode.md)
|
||||
- [趋势回调策略](../trend-pullback-strategy.md)
|
||||
# 策略文档
|
||||
|
||||
各交易实例的人工下单策略,供 UI / 复盘对齐.
|
||||
|
||||
| 文档 | 实例 | 状态 |
|
||||
|------|------|------|
|
||||
| [binance-alt-trend-long.md](./binance-alt-trend-long.md) | 币安山寨·多头趋势 | v0.4 讨论稿 |
|
||||
| [okx-trend-both.md](./okx-trend-both.md) | OKX·多空趋势 | v0.4 讨论稿 |
|
||||
| [gate-intraday.md](./gate-intraday.md) | Gate·BTC 日内 | v0.2 |
|
||||
|
||||
## 约定
|
||||
|
||||
- **不写盈亏比(趋势户)**:币安/OKX 止盈/止损随行情人工设定,趋势 MD 不量化 RR.
|
||||
- **日内例外**:Gate 日内 **最低 1:1** 才开仓,持仓目标可动态调整(见 [gate-intraday.md](./gate-intraday.md)).
|
||||
- **界面(趋势户 · v0.4)**:两级 — **反转**(启动 A/B)| **顺势**(大分歧 A/B)| **波段**(小分歧);`lib/trade/entry_model_lib.py` 三所共用.
|
||||
- **界面短标签(日内户)**:`假破` / `结构突破`.
|
||||
- **多空共用三字**:方向由「做多/做空」表达,不复用为「大分歧A多」等.
|
||||
- **自动联动**:大分歧 A/B → 趋势单;**小分歧 → 波段单**;平仓写入交易记录 `entry_reason`;复盘「填入」自动带入.
|
||||
- **杠杆默认**:BTC/ETH **10x**,其它 **5x**;与开仓类型无关(env `BTC_LEVERAGE` / `ALT_LEVERAGE`).
|
||||
- **日内 profile 独立**:env 启用 `TRADE_SYMBOL_WHITELIST=BTC,ETH` 且限制开启时,**不显示** 大分歧三项(Gate);开仓类型为 **假破 / 结构突破**(见 gate-intraday.md).
|
||||
- **日内 0 点出场**:策略称「0 点平仓」;程序为 `FORCE_CLOSE_ENABLED` + `FORCE_CLOSE_BJ_HOUR=0`,交易记录 `result=强制清仓`(与表单 1h/2h/4h `time_close` 无关).
|
||||
- **策略模块独立**:趋势回调,顺势加仓不走上述三项.
|
||||
|
||||
## 系统实现
|
||||
|
||||
- 库:`lib/trade/entry_model_lib.py`
|
||||
- 趋势户表单:`lib/instance/templates/order_entry_model_fields.html`
|
||||
- 日内判定:`is_intraday_trading_profile()`(白名单仅含 BTC/ETH)
|
||||
- 0 点强平:`force_close_before_reset()`(三所 `app.py`);env `FORCE_CLOSE_ENABLED` / `FORCE_CLOSE_BJ_HOUR`
|
||||
|
||||
## 相关文档
|
||||
|
||||
- [计仓模式](../position-sizing-mode.md)
|
||||
- [趋势回调策略](../trend-pullback-strategy.md)
|
||||
|
||||
@@ -1,194 +1,194 @@
|
||||
# 币安山寨·多头趋势账户
|
||||
|
||||
> **状态**:v0.4(反转·启动 A/B 两级 UI 已实现;策略正文 + `entry_model_lib`)
|
||||
|
||||
---
|
||||
|
||||
## 1. 账户定位
|
||||
|
||||
| 项 | 说明 |
|
||||
|----|------|
|
||||
| 交易所 | 币安合约 |
|
||||
| 方向 | **仅做多**(`TRADE_DIRECTION=long_only`) |
|
||||
| 计仓 | `POSITION_SIZING_MODE=risk` |
|
||||
| 关键位自动单 | `KEY_AUTO_ORDER_ENABLED=false` |
|
||||
| UI profile | **趋势户**(非 BTC/ETH 白名单日内) |
|
||||
|
||||
---
|
||||
|
||||
## 2. 开仓类型(两级 UI · 三所共用)
|
||||
|
||||
### 2.1 趋势户:反转 / 顺势 / 波段
|
||||
|
||||
| 第一级 | 第二级 | code | 联动 |
|
||||
|--------|--------|------|------|
|
||||
| **反转** | 启动 A / 启动 B | `launch_a` / `launch_b` | 趋势单 |
|
||||
| **顺势** | 大分歧 A / 大分歧 B | `big_div_a` / `big_div_b` | 趋势单 |
|
||||
| **波段** | 小分歧 | `small_div` | 波段单 |
|
||||
|
||||
实现:`lib/trade/entry_model_lib.py` + `order_entry_model_fields.html` + `order_entry_model.js`(币安 / OKX / Gate 趋势户共用)。
|
||||
|
||||
### 2.2 杠杆(与开仓类型无关)
|
||||
|
||||
| 币种 | 默认杠杆 |
|
||||
|------|----------|
|
||||
| BTC、ETH | **10x**(`BTC_LEVERAGE`) |
|
||||
| 其它山寨 | **5x**(`ALT_LEVERAGE`) |
|
||||
|
||||
---
|
||||
|
||||
## 3. 反转·启动(做多,讨论定稿)
|
||||
|
||||
**性质**:反转 — 在**新主升确认之前**的作战;与大分歧(顺势)不是同一行情阶段。
|
||||
|
||||
**周期**:背离与箱体以 **4h** 为主;**日线与 4h 同处筑底阶段时,结构边界以日线为准**。作战后半段可用 **5m** 节奏(启动 A2)。
|
||||
|
||||
### 3.0 流程总览
|
||||
|
||||
```text
|
||||
MACD 背离(严格筛选)→ 标「参考高点」
|
||||
↓
|
||||
第 1 次到高点附近 → 不做(V 形)
|
||||
↓
|
||||
回落箱内(中间复杂形态不盯)
|
||||
↓
|
||||
第 2 次到高点附近 → 开战
|
||||
├─ 见小收敛 ──────────→ 启动 A(A1)
|
||||
└─ 不见收敛 ──────────→ 启动 B(实体突破)
|
||||
│
|
||||
├─ 成 → 主升(后续才用顺势·大分歧 / 波段·小分歧)
|
||||
└─ 败 → 止损(正常)
|
||||
↓
|
||||
跌破箱高一半 → 暂弃,等再次到高点附近
|
||||
仍在上半区 + 5m 不创新低 + N 字 → 启动 A(A2)
|
||||
```
|
||||
|
||||
### 3.1 背离:何时进入候选池(MACD · 4h)
|
||||
|
||||
全部满足才承认「有过背离」:
|
||||
|
||||
| 规则 | 说明 |
|
||||
|------|------|
|
||||
| 级别 | **至少 4h** MACD 底背离 |
|
||||
| 首次背离不做 | 第一段背离只观察,不交易 |
|
||||
| 通道式下跌不做 | 顺滑通道下滑中的背离,不当反转依据 |
|
||||
| 波段结构 | 有明显的波段高点、低点 |
|
||||
| 分段下跌 | **三段及以上**明显下跌之后,才开始寻找背离 |
|
||||
|
||||
背离确认后:**标注最后一个显著高点为「参考高点」**(后文「高点附近」均相对此点)。
|
||||
|
||||
> 横盘**时长不量化**;关键是顺序:**跌 → 背离 → 背离后的震荡**,而非下跌中继。
|
||||
|
||||
### 3.2 参考高点:两次摸高
|
||||
|
||||
| 次序 | 规则 |
|
||||
|------|------|
|
||||
| **第 1 次**到参考高点附近 | **不关注、不做**。假突破、未突破都算「到过附近」— 视为 **V 形反弹**风险区 |
|
||||
| 回落箱内 | 箱内复杂形态**不是主战场**,不强行交易 |
|
||||
| **第 2 次**到参考高点附近 | **开始关注**,进入作战区 |
|
||||
|
||||
### 3.3 启动 B(实体突破)
|
||||
|
||||
**条件**:第二次(及以后)靠近参考高点,且**未见**再次摸高前的小收敛。
|
||||
|
||||
| 项 | 说明 |
|
||||
|----|------|
|
||||
| 入场 | **实体突破**参考高点 / 箱体上沿(影线刺破不算) |
|
||||
| 成功 | 走出主升 → 后续单型转为顺势·大分歧 / 波段·小分歧 |
|
||||
| 失败 | 突破后未主升,回到箱内震荡 → **止损属正常** → 若满足 §3.4,下一笔用 **启动 A(A2)** |
|
||||
|
||||
### 3.4 启动 A(结构内 / 试仓,含 A1 与 A2)
|
||||
|
||||
**性质**:主升**确认前**在箱内找风险可控入场;**不是**小分歧。
|
||||
|
||||
#### A1 · 第二次摸高前的小收敛
|
||||
|
||||
- 在第 2 次到参考高点**之前**,出现**小的收敛结构** → 突破前企稳进场。
|
||||
- 若**看不到**小收敛,不强行做 A1,改走 **启动 B**(§3.3)。
|
||||
|
||||
#### A2 · 启动 B 失败后的 5m N 字(仍记启动 A)
|
||||
|
||||
在启动 B 止损后:
|
||||
|
||||
| 暂弃 | 可试启动 A2 |
|
||||
|------|-------------|
|
||||
| 回箱后继续跌,且**跌破箱体高度一半** | **未**跌破箱一半 |
|
||||
| 暂不看,直至**再次**到参考高点附近 | 且 **5m 不创新低** |
|
||||
| | 且 **突破 5m 高点** → 按 **5m N 字形突破** 试仓 |
|
||||
|
||||
- 5m 止损一般不大;此位置**允许多次试错**(突破路径约可错 2 次;5m 试仓约可错 3 次 — 同一参考高点周期内,具体计数实操自定)。
|
||||
- **5m N 字试仓不单列开仓类型**,复盘统一记 **启动 A**(可备注「A2 / 5m N」)。
|
||||
|
||||
### 3.5 与大分歧、小分歧的边界
|
||||
|
||||
| | 反转·启动 | 顺势·大分歧 | 波段·小分歧 |
|
||||
|---|-----------|-------------|-------------|
|
||||
| 前端 | 跌 → 背离 → 箱 → 两次摸高 | 主升已确立 | 主升已确立 |
|
||||
| V 形 | 第 1 次摸高不做 | — | — |
|
||||
| 5m N 试仓 | **启动 A(A2)** | — | 不同于小分歧 |
|
||||
| 第三次不做 | — | — | ✓ |
|
||||
|
||||
---
|
||||
|
||||
## 4. 顺势·大分歧(趋势单)
|
||||
|
||||
**前提**:**主升浪已确立**、上方仍有空间;前端是主升里的整理,**不要**求「跌 → 背离 → 箱 → 两次摸高」那条反转链。
|
||||
|
||||
### 4.1 大分歧 A
|
||||
|
||||
- 4h/日线大结构向上
|
||||
- 5m/15m 收敛,**不创新低** 企稳进(不等突破)
|
||||
|
||||
### 4.2 大分歧 B
|
||||
|
||||
- 同上大级别多头结构
|
||||
- **突破确认** 后入场(实体突破优先)
|
||||
|
||||
---
|
||||
|
||||
## 5. 波段·小分歧(波段单)
|
||||
|
||||
**前提**:主升**已走出**;反转链(启动 A/B)进行中**不做**小分歧。
|
||||
|
||||
- **前两次**可做,**第三次不做**
|
||||
- 低吸为主,不追突破
|
||||
- 入场:二次探底 → N 字突破;或 5m 三均线重新多头排列
|
||||
|
||||
---
|
||||
|
||||
## 6. 纪律
|
||||
|
||||
1. 不做空
|
||||
2. 反转:首次背离不做;通道跌背离不做;第 1 次摸参考高点不做(V 形)
|
||||
3. 顺势:第三次小分歧不做新单;小分歧不追突破
|
||||
4. 止盈/止损/是否手平:**随行情**,本文档不量化 RR
|
||||
|
||||
---
|
||||
|
||||
## 7. 持仓与出场(定性)
|
||||
|
||||
| 单型 | 说明 |
|
||||
|------|------|
|
||||
| 启动 A/B | 赌新主升;B 失败可转 A2;未确立主升前不做小分歧 |
|
||||
| 大分歧 | 可长持;途中两次小分歧后远目标未到,**可手平** |
|
||||
| 小分歧 | 短拿,常手平 |
|
||||
|
||||
---
|
||||
|
||||
## 8. 系统字段
|
||||
|
||||
| 操作 | 字段 |
|
||||
|------|------|
|
||||
| 下单 | `order_monitors.entry_model`:`launch_a` / `launch_b` / `big_div_a` / `big_div_b` / `small_div` |
|
||||
| 平仓 | `trade_records.entry_reason` = 界面标签 |
|
||||
| 复盘 | 与开仓类型一致 + 策略项 +「其他」 |
|
||||
|
||||
---
|
||||
|
||||
## 修订记录
|
||||
|
||||
| 版本 | 日期 | 说明 |
|
||||
|------|------|------|
|
||||
| v0.4 | 2026-07-06 | 反转·启动 A/B 两级 UI 上线(共用 entry_model_lib) |
|
||||
| v0.2 | 2026-07-06 | 定稿 UI 短标签(大分歧/小分歧);实现代码联动 |
|
||||
| v0.1 | 2026-07-06 | 讨论稿 |
|
||||
# 币安山寨·多头趋势账户
|
||||
|
||||
> **状态**:v0.4(反转·启动 A/B 两级 UI 已实现;策略正文 + `entry_model_lib`)
|
||||
|
||||
---
|
||||
|
||||
## 1. 账户定位
|
||||
|
||||
| 项 | 说明 |
|
||||
|----|------|
|
||||
| 交易所 | 币安合约 |
|
||||
| 方向 | **仅做多**(`TRADE_DIRECTION=long_only`) |
|
||||
| 计仓 | `POSITION_SIZING_MODE=risk` |
|
||||
| 关键位自动单 | `KEY_AUTO_ORDER_ENABLED=false` |
|
||||
| UI profile | **趋势户**(非 BTC/ETH 白名单日内) |
|
||||
|
||||
---
|
||||
|
||||
## 2. 开仓类型(两级 UI · 三所共用)
|
||||
|
||||
### 2.1 趋势户:反转 / 顺势 / 波段
|
||||
|
||||
| 第一级 | 第二级 | code | 联动 |
|
||||
|--------|--------|------|------|
|
||||
| **反转** | 启动 A / 启动 B | `launch_a` / `launch_b` | 趋势单 |
|
||||
| **顺势** | 大分歧 A / 大分歧 B | `big_div_a` / `big_div_b` | 趋势单 |
|
||||
| **波段** | 小分歧 | `small_div` | 波段单 |
|
||||
|
||||
实现:`lib/trade/entry_model_lib.py` + `order_entry_model_fields.html` + `order_entry_model.js`(币安 / OKX / Gate 趋势户共用).
|
||||
|
||||
### 2.2 杠杆(与开仓类型无关)
|
||||
|
||||
| 币种 | 默认杠杆 |
|
||||
|------|----------|
|
||||
| BTC,ETH | **10x**(`BTC_LEVERAGE`) |
|
||||
| 其它山寨 | **5x**(`ALT_LEVERAGE`) |
|
||||
|
||||
---
|
||||
|
||||
## 3. 反转·启动(做多,讨论定稿)
|
||||
|
||||
**性质**:反转 — 在**新主升确认之前**的作战;与大分歧(顺势)不是同一行情阶段.
|
||||
|
||||
**周期**:背离与箱体以 **4h** 为主;**日线与 4h 同处筑底阶段时,结构边界以日线为准**.作战后半段可用 **5m** 节奏(启动 A2).
|
||||
|
||||
### 3.0 流程总览
|
||||
|
||||
```text
|
||||
MACD 背离(严格筛选)→ 标「参考高点」
|
||||
↓
|
||||
第 1 次到高点附近 → 不做(V 形)
|
||||
↓
|
||||
回落箱内(中间复杂形态不盯)
|
||||
↓
|
||||
第 2 次到高点附近 → 开战
|
||||
├─ 见小收敛 ──────────→ 启动 A(A1)
|
||||
└─ 不见收敛 ──────────→ 启动 B(实体突破)
|
||||
│
|
||||
├─ 成 → 主升(后续才用顺势·大分歧 / 波段·小分歧)
|
||||
└─ 败 → 止损(正常)
|
||||
↓
|
||||
跌破箱高一半 → 暂弃,等再次到高点附近
|
||||
仍在上半区 + 5m 不创新低 + N 字 → 启动 A(A2)
|
||||
```
|
||||
|
||||
### 3.1 背离:何时进入候选池(MACD · 4h)
|
||||
|
||||
全部满足才承认「有过背离」:
|
||||
|
||||
| 规则 | 说明 |
|
||||
|------|------|
|
||||
| 级别 | **至少 4h** MACD 底背离 |
|
||||
| 首次背离不做 | 第一段背离只观察,不交易 |
|
||||
| 通道式下跌不做 | 顺滑通道下滑中的背离,不当反转依据 |
|
||||
| 波段结构 | 有明显的波段高点,低点 |
|
||||
| 分段下跌 | **三段及以上**明显下跌之后,才开始寻找背离 |
|
||||
|
||||
背离确认后:**标注最后一个显著高点为「参考高点」**(后文「高点附近」均相对此点).
|
||||
|
||||
> 横盘**时长不量化**;关键是顺序:**跌 → 背离 → 背离后的震荡**,而非下跌中继.
|
||||
|
||||
### 3.2 参考高点:两次摸高
|
||||
|
||||
| 次序 | 规则 |
|
||||
|------|------|
|
||||
| **第 1 次**到参考高点附近 | **不关注,不做**.假突破,未突破都算「到过附近」— 视为 **V 形反弹**风险区 |
|
||||
| 回落箱内 | 箱内复杂形态**不是主战场**,不强行交易 |
|
||||
| **第 2 次**到参考高点附近 | **开始关注**,进入作战区 |
|
||||
|
||||
### 3.3 启动 B(实体突破)
|
||||
|
||||
**条件**:第二次(及以后)靠近参考高点,且**未见**再次摸高前的小收敛.
|
||||
|
||||
| 项 | 说明 |
|
||||
|----|------|
|
||||
| 入场 | **实体突破**参考高点 / 箱体上沿(影线刺破不算) |
|
||||
| 成功 | 走出主升 → 后续单型转为顺势·大分歧 / 波段·小分歧 |
|
||||
| 失败 | 突破后未主升,回到箱内震荡 → **止损属正常** → 若满足 §3.4,下一笔用 **启动 A(A2)** |
|
||||
|
||||
### 3.4 启动 A(结构内 / 试仓,含 A1 与 A2)
|
||||
|
||||
**性质**:主升**确认前**在箱内找风险可控入场;**不是**小分歧.
|
||||
|
||||
#### A1 · 第二次摸高前的小收敛
|
||||
|
||||
- 在第 2 次到参考高点**之前**,出现**小的收敛结构** → 突破前企稳进场.
|
||||
- 若**看不到**小收敛,不强行做 A1,改走 **启动 B**(§3.3).
|
||||
|
||||
#### A2 · 启动 B 失败后的 5m N 字(仍记启动 A)
|
||||
|
||||
在启动 B 止损后:
|
||||
|
||||
| 暂弃 | 可试启动 A2 |
|
||||
|------|-------------|
|
||||
| 回箱后继续跌,且**跌破箱体高度一半** | **未**跌破箱一半 |
|
||||
| 暂不看,直至**再次**到参考高点附近 | 且 **5m 不创新低** |
|
||||
| | 且 **突破 5m 高点** → 按 **5m N 字形突破** 试仓 |
|
||||
|
||||
- 5m 止损一般不大;此位置**允许多次试错**(突破路径约可错 2 次;5m 试仓约可错 3 次 — 同一参考高点周期内,具体计数实操自定).
|
||||
- **5m N 字试仓不单列开仓类型**,复盘统一记 **启动 A**(可备注「A2 / 5m N」).
|
||||
|
||||
### 3.5 与大分歧,小分歧的边界
|
||||
|
||||
| | 反转·启动 | 顺势·大分歧 | 波段·小分歧 |
|
||||
|---|-----------|-------------|-------------|
|
||||
| 前端 | 跌 → 背离 → 箱 → 两次摸高 | 主升已确立 | 主升已确立 |
|
||||
| V 形 | 第 1 次摸高不做 | — | — |
|
||||
| 5m N 试仓 | **启动 A(A2)** | — | 不同于小分歧 |
|
||||
| 第三次不做 | — | — | ✓ |
|
||||
|
||||
---
|
||||
|
||||
## 4. 顺势·大分歧(趋势单)
|
||||
|
||||
**前提**:**主升浪已确立**,上方仍有空间;前端是主升里的整理,**不要**求「跌 → 背离 → 箱 → 两次摸高」那条反转链.
|
||||
|
||||
### 4.1 大分歧 A
|
||||
|
||||
- 4h/日线大结构向上
|
||||
- 5m/15m 收敛,**不创新低** 企稳进(不等突破)
|
||||
|
||||
### 4.2 大分歧 B
|
||||
|
||||
- 同上大级别多头结构
|
||||
- **突破确认** 后入场(实体突破优先)
|
||||
|
||||
---
|
||||
|
||||
## 5. 波段·小分歧(波段单)
|
||||
|
||||
**前提**:主升**已走出**;反转链(启动 A/B)进行中**不做**小分歧.
|
||||
|
||||
- **前两次**可做,**第三次不做**
|
||||
- 低吸为主,不追突破
|
||||
- 入场:二次探底 → N 字突破;或 5m 三均线重新多头排列
|
||||
|
||||
---
|
||||
|
||||
## 6. 纪律
|
||||
|
||||
1. 不做空
|
||||
2. 反转:首次背离不做;通道跌背离不做;第 1 次摸参考高点不做(V 形)
|
||||
3. 顺势:第三次小分歧不做新单;小分歧不追突破
|
||||
4. 止盈/止损/是否手平:**随行情**,本文档不量化 RR
|
||||
|
||||
---
|
||||
|
||||
## 7. 持仓与出场(定性)
|
||||
|
||||
| 单型 | 说明 |
|
||||
|------|------|
|
||||
| 启动 A/B | 赌新主升;B 失败可转 A2;未确立主升前不做小分歧 |
|
||||
| 大分歧 | 可长持;途中两次小分歧后远目标未到,**可手平** |
|
||||
| 小分歧 | 短拿,常手平 |
|
||||
|
||||
---
|
||||
|
||||
## 8. 系统字段
|
||||
|
||||
| 操作 | 字段 |
|
||||
|------|------|
|
||||
| 下单 | `order_monitors.entry_model`:`launch_a` / `launch_b` / `big_div_a` / `big_div_b` / `small_div` |
|
||||
| 平仓 | `trade_records.entry_reason` = 界面标签 |
|
||||
| 复盘 | 与开仓类型一致 + 策略项 +「其他」 |
|
||||
|
||||
---
|
||||
|
||||
## 修订记录
|
||||
|
||||
| 版本 | 日期 | 说明 |
|
||||
|------|------|------|
|
||||
| v0.4 | 2026-07-06 | 反转·启动 A/B 两级 UI 上线(共用 entry_model_lib) |
|
||||
| v0.2 | 2026-07-06 | 定稿 UI 短标签(大分歧/小分歧);实现代码联动 |
|
||||
| v0.1 | 2026-07-06 | 讨论稿 |
|
||||
|
||||
@@ -6,63 +6,63 @@
|
||||
{
|
||||
"title": "账户与方向",
|
||||
"items": [
|
||||
"本账户仅做多,不做空",
|
||||
"计仓模式为以损定仓(risk),关键位自动单已关闭",
|
||||
"已明确第一级:反转 / 顺势 / 波段(两级下拉已上线)"
|
||||
"本账户仅做多,不做空",
|
||||
"计仓模式为以损定仓(risk),关键位自动单已关闭",
|
||||
"已明确第一级:反转 / 顺势 / 波段(两级下拉已上线)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "反转 · 背离与箱体(启动 A/B 共同前置)",
|
||||
"title": "反转 · 背离与箱体(启动 A/B 共同前置)",
|
||||
"items": [
|
||||
"4h MACD 底背离(非首次背离、非通道式下跌中的背离)",
|
||||
"有明显波段高/低点,且三段及以上明显下跌后才认背离",
|
||||
"背离后处于震荡箱体(时长不量化;非 V 形急跌急拉)",
|
||||
"已标注参考高点(最后一个显著高点)",
|
||||
"第 1 次到参考高点附近 → 不做;第 2 次到附近 → 才进入作战区"
|
||||
"4h MACD 底背离(非首次背离,非通道式下跌中的背离)",
|
||||
"有明显波段高/低点,且三段及以上明显下跌后才认背离",
|
||||
"背离后处于震荡箱体(时长不量化;非 V 形急跌急拉)",
|
||||
"已标注参考高点(最后一个显著高点)",
|
||||
"第 1 次到参考高点附近 → 不做;第 2 次到附近 → 才进入作战区"
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "反转 · 启动 B(实体突破)",
|
||||
"title": "反转 · 启动 B(实体突破)",
|
||||
"items": [
|
||||
"第 2 次到参考高点附近,且未见再次摸高前的小收敛",
|
||||
"实体突破参考高点/箱体上沿(非仅影线)",
|
||||
"突破失败回箱止损属正常;跌破箱高一半则暂弃直至再次到高点附近"
|
||||
"第 2 次到参考高点附近,且未见再次摸高前的小收敛",
|
||||
"实体突破参考高点/箱体上沿(非仅影线)",
|
||||
"突破失败回箱止损属正常;跌破箱高一半则暂弃直至再次到高点附近"
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "反转 · 启动 A(结构内,含 A1 / A2)",
|
||||
"title": "反转 · 启动 A(结构内,含 A1 / A2)",
|
||||
"items": [
|
||||
"性质:主升确认前;不是小分歧",
|
||||
"A1:第 2 次摸高前出现小收敛 → 突破前企稳",
|
||||
"A2:启动 B 止损后,未跌破箱高一半 + 5m 不创新低 + 5m N 字突破试仓",
|
||||
"5m 试仓记为启动 A(不单列类型);小止损允许多次试错"
|
||||
"性质:主升确认前;不是小分歧",
|
||||
"A1:第 2 次摸高前出现小收敛 → 突破前企稳",
|
||||
"A2:启动 B 止损后,未跌破箱高一半 + 5m 不创新低 + 5m N 字突破试仓",
|
||||
"5m 试仓记为启动 A(不单列类型);小止损允许多次试错"
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "顺势 · 大分歧 A / B",
|
||||
"items": [
|
||||
"主升已确立,上方仍有空间(非跌后背离筑底阶段)",
|
||||
"大分歧A:5m/15m 收敛且不创新低企稳",
|
||||
"大分歧B:突破已确认,优先实体突破"
|
||||
"主升已确立,上方仍有空间(非跌后背离筑底阶段)",
|
||||
"大分歧A:5m/15m 收敛且不创新低企稳",
|
||||
"大分歧B:突破已确认,优先实体突破"
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "波段 · 小分歧",
|
||||
"items": [
|
||||
"主升已确立;反转链进行中不做小分歧",
|
||||
"主升已确立;反转链进行中不做小分歧",
|
||||
"第三次小分歧 → 不做新单",
|
||||
"不追突破;二次探底 N 字或 5m 三均线重新多头"
|
||||
"不追突破;二次探底 N 字或 5m 三均线重新多头"
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "杠杆与出场",
|
||||
"items": [
|
||||
"杠杆:BTC/ETH 10x,其它山寨 5x(可选手改但须有理由)",
|
||||
"止盈止损随行情人工设定,不在此清单量化 RR"
|
||||
"杠杆:BTC/ETH 10x,其它山寨 5x(可选手改但须有理由)",
|
||||
"止盈止损随行情人工设定,不在此清单量化 RR"
|
||||
]
|
||||
}
|
||||
],
|
||||
"footnotes": [
|
||||
"v0.4:两级 UI 已实现;启动 A 含 A1 收敛与 A2(B 失败后 5m N 字)。"
|
||||
"v0.4:两级 UI 已实现;启动 A 含 A1 收敛与 A2(B 失败后 5m N 字)."
|
||||
]
|
||||
}
|
||||
|
||||
@@ -6,33 +6,33 @@
|
||||
{
|
||||
"title": "方向与均线过滤",
|
||||
"items": [
|
||||
"仅交易 BTC,同时仅 1 仓",
|
||||
"15m 21/55/144 排列清晰(多或空),纠缠则不做",
|
||||
"仅交易 BTC,同时仅 1 仓",
|
||||
"15m 21/55/144 排列清晰(多或空),纠缠则不做",
|
||||
"1H 方向与 15m 不冲突",
|
||||
"21 均线关系满足:回踩支撑 / 站稳上方(多)或反弹承压 / 压在下方(空)"
|
||||
"21 均线关系满足:回踩支撑 / 站稳上方(多)或反弹承压 / 压在下方(空)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "开仓类型 A / B",
|
||||
"items": [
|
||||
"已选定:假破 或 结构突破(二选一)",
|
||||
"假破:扫流动性后回到结构内,5m N 字 + 15m 顶/底分型齐全",
|
||||
"结构突破:15m 收盘价站稳关键位,非仅刺破",
|
||||
"止损带宽 0.4%~1.5%,超出则不做",
|
||||
"下单前空间至少 1:1,不足则不做"
|
||||
"已选定:假破 或 结构突破(二选一)",
|
||||
"假破:扫流动性后回到结构内,5m N 字 + 15m 顶/底分型齐全",
|
||||
"结构突破:15m 收盘价站稳关键位,非仅刺破",
|
||||
"止损带宽 0.4%~1.5%,超出则不做",
|
||||
"下单前空间至少 1:1,不足则不做"
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "一日节奏与笔数",
|
||||
"items": [
|
||||
"非周末;在早窗 / 晚窗计划时段内",
|
||||
"今日笔数未达上限 3,连错未达 2 笔",
|
||||
"宽幅震荡(S1)时降频或不做",
|
||||
"0 点前须了结(系统强制清仓);本清单不含手动平仓"
|
||||
"非周末;在早窗 / 晚窗计划时段内",
|
||||
"今日笔数未达上限 3,连错未达 2 笔",
|
||||
"宽幅震荡(S1)时降频或不做",
|
||||
"0 点前须了结(系统强制清仓);本清单不含手动平仓"
|
||||
]
|
||||
}
|
||||
],
|
||||
"footnotes": [
|
||||
"系统:FORCE_CLOSE_ENABLED 开启时,北京时间 0 点自动强制清仓(result=强制清仓)"
|
||||
"系统:FORCE_CLOSE_ENABLED 开启时,北京时间 0 点自动强制清仓(result=强制清仓)"
|
||||
]
|
||||
}
|
||||
|
||||
@@ -6,67 +6,67 @@
|
||||
{
|
||||
"title": "账户与方向",
|
||||
"items": [
|
||||
"已选定做多或做空,且与 4H/大级别结构方向一致",
|
||||
"趋势户 profile(非 Gate 日内 BTC/ETH 白名单)",
|
||||
"计仓模式为以损定仓(risk),关键位自动单已关闭",
|
||||
"已选定做多或做空,且与 4H/大级别结构方向一致",
|
||||
"趋势户 profile(非 Gate 日内 BTC/ETH 白名单)",
|
||||
"计仓模式为以损定仓(risk),关键位自动单已关闭",
|
||||
"同一币种无未计划的对冲叠仓",
|
||||
"已明确第一级:反转 / 顺势 / 波段(两级下拉已上线)"
|
||||
"已明确第一级:反转 / 顺势 / 波段(两级下拉已上线)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "反转 · 背离与箱体(启动 A/B 共同前置)",
|
||||
"title": "反转 · 背离与箱体(启动 A/B 共同前置)",
|
||||
"items": [
|
||||
"做多:4h MACD 底背离;做空:4h MACD 顶背离",
|
||||
"非首次背离;非通道式涨跌中的背离;明显波段高低点 + 三段及以上涨/跌后才认背离",
|
||||
"背离后处于震荡箱体(时长不量化;非 V 形急拉急杀)",
|
||||
"做多:已标参考高点;做空:已标参考低点",
|
||||
"第 1 次到参考极值附近 → 不做;第 2 次到附近 → 才进入作战区"
|
||||
"做多:4h MACD 底背离;做空:4h MACD 顶背离",
|
||||
"非首次背离;非通道式涨跌中的背离;明显波段高低点 + 三段及以上涨/跌后才认背离",
|
||||
"背离后处于震荡箱体(时长不量化;非 V 形急拉急杀)",
|
||||
"做多:已标参考高点;做空:已标参考低点",
|
||||
"第 1 次到参考极值附近 → 不做;第 2 次到附近 → 才进入作战区"
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "反转 · 启动 B(实体突破)",
|
||||
"title": "反转 · 启动 B(实体突破)",
|
||||
"items": [
|
||||
"第 2 次到参考极值附近,且未见再次摸极值前的小收敛",
|
||||
"做多:实体突破参考高点/箱顶;做空:实体跌破参考低点/箱底",
|
||||
"第 2 次到参考极值附近,且未见再次摸极值前的小收敛",
|
||||
"做多:实体突破参考高点/箱顶;做空:实体跌破参考低点/箱底",
|
||||
"突破失败回箱止损属正常",
|
||||
"做多:跌破箱高一半暂弃;做空:涨破箱低一半暂弃;直至再次到极值附近"
|
||||
"做多:跌破箱高一半暂弃;做空:涨破箱低一半暂弃;直至再次到极值附近"
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "反转 · 启动 A(结构内,含 A1 / A2)",
|
||||
"title": "反转 · 启动 A(结构内,含 A1 / A2)",
|
||||
"items": [
|
||||
"性质:主趋势确认前;不是小分歧",
|
||||
"A1:第 2 次摸极值前出现小收敛 → 突破前企稳",
|
||||
"A2 做多:B 止损后未跌破箱一半 + 5m 不创新低 + 5m N 字",
|
||||
"A2 做空:B 止损后未涨破箱一半 + 5m 不创新高 + 5m 倒 N 字",
|
||||
"5m 试仓记为启动 A(不单列);小止损允许多次试错"
|
||||
"性质:主趋势确认前;不是小分歧",
|
||||
"A1:第 2 次摸极值前出现小收敛 → 突破前企稳",
|
||||
"A2 做多:B 止损后未跌破箱一半 + 5m 不创新低 + 5m N 字",
|
||||
"A2 做空:B 止损后未涨破箱一半 + 5m 不创新高 + 5m 倒 N 字",
|
||||
"5m 试仓记为启动 A(不单列);小止损允许多次试错"
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "顺势 · 大分歧 A / B",
|
||||
"items": [
|
||||
"主趋势已确立(非涨/跌后背离筑底/筑顶阶段)",
|
||||
"做多大分歧A:5m/15m 收敛且不创新低;做空:不创新高",
|
||||
"大分歧B:突破已确认,优先实体突破"
|
||||
"主趋势已确立(非涨/跌后背离筑底/筑顶阶段)",
|
||||
"做多大分歧A:5m/15m 收敛且不创新低;做空:不创新高",
|
||||
"大分歧B:突破已确认,优先实体突破"
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "波段 · 小分歧",
|
||||
"items": [
|
||||
"主趋势已确立;反转链进行中不做小分歧",
|
||||
"主趋势已确立;反转链进行中不做小分歧",
|
||||
"第三次小分歧 → 不做新单",
|
||||
"做多:二次探底 N 字 / 5m 三均线多头;做空:二次探顶倒 N / 5m 空头"
|
||||
"做多:二次探底 N 字 / 5m 三均线多头;做空:二次探顶倒 N / 5m 空头"
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "杠杆与出场",
|
||||
"items": [
|
||||
"杠杆:BTC/ETH 10x,其它山寨 5x(可选手改但须有理由)",
|
||||
"止盈止损随行情人工设定,不在此清单量化 RR"
|
||||
"杠杆:BTC/ETH 10x,其它山寨 5x(可选手改但须有理由)",
|
||||
"止盈止损随行情人工设定,不在此清单量化 RR"
|
||||
]
|
||||
}
|
||||
],
|
||||
"footnotes": [
|
||||
"v0.4:两级 UI 反转/顺势/波段;做多细则见 binance-alt-trend-long.md §3。"
|
||||
"v0.4:两级 UI 反转/顺势/波段;做多细则见 binance-alt-trend-long.md §3."
|
||||
]
|
||||
}
|
||||
|
||||
+101
-101
@@ -1,6 +1,6 @@
|
||||
# Gate·BTC 日内账户
|
||||
|
||||
> **状态**:v0.2(策略定稿;**0 点强平已实现**;日内 UI 隐藏平仓/委托/移动保本 **待实现**)
|
||||
> **状态**:v0.2(策略定稿;**0 点强平已实现**;日内 UI 隐藏平仓/委托/移动保本 **待实现**)
|
||||
|
||||
---
|
||||
|
||||
@@ -10,143 +10,143 @@
|
||||
|----|------|
|
||||
| 交易所 | Gate 合约 |
|
||||
| 品种 | **仅 BTC** |
|
||||
| 方向 | **多空都做**(由过滤条件决定,非手选方向) |
|
||||
| 计仓 | `POSITION_SIZING_MODE=full_margin`(全仓杠杆) |
|
||||
| UI profile | **日内户**(`TRADE_SYMBOL_WHITELIST=BTC,ETH` 且限制开启;本策略只交易 BTC) |
|
||||
| 与趋势户关系 | **不使用** 大分歧 A/B/小分歧;**不使用**「趋势单 / 波段单」手选 |
|
||||
| 方向 | **多空都做**(由过滤条件决定,非手选方向) |
|
||||
| 计仓 | `POSITION_SIZING_MODE=full_margin`(全仓杠杆) |
|
||||
| UI profile | **日内户**(`TRADE_SYMBOL_WHITELIST=BTC,ETH` 且限制开启;本策略只交易 BTC) |
|
||||
| 与趋势户关系 | **不使用** 大分歧 A/B/小分歧;**不使用**「趋势单 / 波段单」手选 |
|
||||
|
||||
### 资金与杠杆(执行约定)
|
||||
### 资金与杠杆(执行约定)
|
||||
|
||||
| 项 | 说明 |
|
||||
|----|------|
|
||||
| 账户规模 | 约 300U(测试阶段) |
|
||||
| 日交易基数 | **50U**(早 8:00 重置为 50U,不延续前日阶梯) |
|
||||
| 单笔阶梯 | 上一笔 **+10U / −10U** 调节下一笔基数(赢 60U / 亏 40U 等) |
|
||||
| 账户规模 | 约 300U(测试阶段) |
|
||||
| 日交易基数 | **50U**(早 8:00 重置为 50U,不延续前日阶梯) |
|
||||
| 单笔阶梯 | 上一笔 **+10U / −10U** 调节下一笔基数(赢 60U / 亏 40U 等) |
|
||||
| 杠杆 | **10× 全仓** |
|
||||
| 一次一单 | 同时仅 **1** 个 Gate 仓位 |
|
||||
| 止损带宽 | **0.4%~1.5%**(结构要求更宽则 **不做**) |
|
||||
| 止损带宽 | **0.4%~1.5%**(结构要求更宽则 **不做**) |
|
||||
|
||||
---
|
||||
|
||||
## 2. 周期分层
|
||||
|
||||
自上而下,**先定能不能做、再做哪一类**:
|
||||
自上而下,**先定能不能做,再做哪一类**:
|
||||
|
||||
| 层级 | 周期 | 作用 |
|
||||
|------|------|------|
|
||||
| 方向过滤 | **1H** | 大方向;**不得与 15m 排列反向** |
|
||||
| 均线 + 结构 | **15m** | 21/55/144 排列、顶底分型、结构识别、**B 类收盘突破** |
|
||||
| 触发 | **5m** | **A 类**:N 字形突破(配合 15m 分型) |
|
||||
| 方法 | 裸 K + 三均线 | 形态确认、入场与止损锚点 |
|
||||
| 方向过滤 | **1H** | 大方向;**不得与 15m 排列反向** |
|
||||
| 均线 + 结构 | **15m** | 21/55/144 排列,顶底分型,结构识别,**B 类收盘突破** |
|
||||
| 触发 | **5m** | **A 类**:N 字形突破(配合 15m 分型) |
|
||||
| 方法 | 裸 K + 三均线 | 形态确认,入场与止损锚点 |
|
||||
|
||||
**不做「趋势单」概念**:持仓以 **小时** 计,当日了结;与币安/OKX 多日趋势户区分。
|
||||
**不做「趋势单」概念**:持仓以 **小时** 计,当日了结;与币安/OKX 多日趋势户区分.
|
||||
|
||||
---
|
||||
|
||||
## 3. 方向过滤(必过)
|
||||
## 3. 方向过滤(必过)
|
||||
|
||||
### 3.1 15m 三均线(21 / 55 / 144)
|
||||
### 3.1 15m 三均线(21 / 55 / 144)
|
||||
|
||||
| 15m 排列 | 只允许 |
|
||||
|----------|--------|
|
||||
| **多头排列**(21 > 55 > 144) | **只做多** |
|
||||
| **空头排列**(21 < 55 < 144) | **只做空** |
|
||||
| 纠缠、粘合、不符合 | **不做** |
|
||||
| **多头排列**(21 > 55 > 144) | **只做多** |
|
||||
| **空头排列**(21 < 55 < 144) | **只做空** |
|
||||
| 纠缠,粘合,不符合 | **不做** |
|
||||
|
||||
### 3.2 与 1H 同向
|
||||
|
||||
- **做多**:15m 多头排列,且 **1H 不得为空头排列**(1H 均线不能与 15m 方向相反)。
|
||||
- **做空**:15m 空头排列,且 **1H 不得为多头排列**。
|
||||
- 1H/15m 方向冲突 → **当日该方向不做**。
|
||||
- **做多**:15m 多头排列,且 **1H 不得为空头排列**(1H 均线不能与 15m 方向相反).
|
||||
- **做空**:15m 空头排列,且 **1H 不得为多头排列**.
|
||||
- 1H/15m 方向冲突 → **当日该方向不做**.
|
||||
|
||||
### 3.3 21 均线关系(才允许开仓)
|
||||
### 3.3 21 均线关系(才允许开仓)
|
||||
|
||||
入场须与 **21 均线** 发生有效关系,避免 distant 追单:
|
||||
入场须与 **21 均线** 发生有效关系,避免 distant 追单:
|
||||
|
||||
| 方向 | 要求(定性) |
|
||||
| 方向 | 要求(定性) |
|
||||
|------|----------------|
|
||||
| **做多** | 多头排列下,**回踩 21 附近获支撑** 或 **站稳 21 上方** 后再按 playbook 入场 |
|
||||
| **做空** | 空头排列下,**反弹 21 附近承压** 或 **压在 21 下方** 后再按 playbook 入场 |
|
||||
| **做多** | 多头排列下,**回踩 21 附近获支撑** 或 **站稳 21 上方** 后再按 playbook 入场 |
|
||||
| **做空** | 空头排列下,**反弹 21 附近承压** 或 **压在 21 下方** 后再按 playbook 入场 |
|
||||
|
||||
---
|
||||
|
||||
## 4. 开仓类型(仅两类)
|
||||
## 4. 开仓类型(仅两类)
|
||||
|
||||
界面日后仅两个短标签(全称见下表 hover / 本文):
|
||||
界面日后仅两个短标签(全称见下表 hover / 本文):
|
||||
|
||||
| 界面标签 | 存储 code(建议) | 本质 |
|
||||
| 界面标签 | 存储 code(建议) | 本质 |
|
||||
|----------|-------------------|------|
|
||||
| **假破** | `liquidity_false_break` | 流动性扫单 → 假突破验证 → **5m N 字** → **15m 顶/底分型** |
|
||||
| **结构突破** | `structure_breakout` | **15m 结构有效突破**(**收盘确认**) |
|
||||
| **结构突破** | `structure_breakout` | **15m 结构有效突破**(**收盘确认**) |
|
||||
|
||||
子结构 **不单独占主下拉**,可在复盘备注或二级标签中记录。
|
||||
子结构 **不单独占主下拉**,可在复盘备注或二级标签中记录.
|
||||
|
||||
---
|
||||
|
||||
## 5. A 类:假破(流动性 / 假突破)
|
||||
## 5. A 类:假破(流动性 / 假突破)
|
||||
|
||||
**适用**:关键位附近 **扫止损** 后价格 **回到结构内**,陷阱确认后再反向做。
|
||||
**适用**:关键位附近 **扫止损** 后价格 **回到结构内**,陷阱确认后再反向做.
|
||||
|
||||
### 5.1 流程
|
||||
|
||||
```text
|
||||
1H/15m 方向 + 21 均线过滤通过
|
||||
→ 假突破出现(扫高/扫低)
|
||||
→ 验证为「假」(收回结构内 / 反向裸 K 确认)
|
||||
→ 5m 走出 N 字(二次探底/探顶后,沿允许方向突破)
|
||||
→ 15m 出现底分型(多)或顶分型(空)
|
||||
→ 假突破出现(扫高/扫低)
|
||||
→ 验证为「假」(收回结构内 / 反向裸 K 确认)
|
||||
→ 5m 走出 N 字(二次探底/探顶后,沿允许方向突破)
|
||||
→ 15m 出现底分型(多)或顶分型(空)
|
||||
→ 入场
|
||||
```
|
||||
|
||||
### 5.2 做多 / 做空(对称)
|
||||
### 5.2 做多 / 做空(对称)
|
||||
|
||||
| 步骤 | 做多 | 做空 |
|
||||
|------|------|------|
|
||||
| 假破 | 向下扫低后快速拉回支撑/箱上 | 向上扫高后跌回阻力/箱下 |
|
||||
| 5m N 字 | 扫低 → 反弹 → 不破前低 → 向上突破 | 扫高 → 回落 → 不过前高 → 向下突破 |
|
||||
| 15m 确认 | **底分型** | **顶分型** |
|
||||
| 止损 | 假破极值或 N 字低点 **外侧**(仍须落在 0.4%~1.5%) | 对称 |
|
||||
| 目标 | **最低 1:1**;之后 **随行情动态** 部分止盈、移动止损或延伸 | 对称 |
|
||||
| 止损 | 假破极值或 N 字低点 **外侧**(仍须落在 0.4%~1.5%) | 对称 |
|
||||
| 目标 | **最低 1:1**;之后 **随行情动态** 部分止盈,移动止损或延伸 | 对称 |
|
||||
|
||||
### 5.3 注意
|
||||
|
||||
- **须等假破验证完成**,扫完不追。
|
||||
- **5m N + 15m 分型** 为入场必要条件,缺一不可。
|
||||
- 与大级别 **宽幅震荡(S1)** 叠加时假信号多,优先 **降频或不做**。
|
||||
- **须等假破验证完成**,扫完不追.
|
||||
- **5m N + 15m 分型** 为入场必要条件,缺一不可.
|
||||
- 与大级别 **宽幅震荡(S1)** 叠加时假信号多,优先 **降频或不做**.
|
||||
|
||||
---
|
||||
|
||||
## 6. B 类:结构突破
|
||||
## 6. B 类:结构突破
|
||||
|
||||
**适用**:15m 上结构清晰,方向与均线排列一致,**收盘突破** 后顺势做。
|
||||
**适用**:15m 上结构清晰,方向与均线排列一致,**收盘突破** 后顺势做.
|
||||
|
||||
### 6.1 子结构(均属 B 类)
|
||||
### 6.1 子结构(均属 B 类)
|
||||
|
||||
双顶、双底、头肩顶/底、收敛(三角/楔形)、箱体等——**统一记为「结构突破」**。
|
||||
双顶,双底,头肩顶/底,收敛(三角/楔形),箱体等——**统一记为「结构突破」**.
|
||||
|
||||
### 6.2 突破确认
|
||||
|
||||
- **以 15m K 线收盘价为准** 突破关键位(颈线、箱边、收敛边界等)。
|
||||
- **仅刺破、未收盘站稳** → **不算** 有效突破,不做。
|
||||
- 可选:**收盘突破后回踩** 再进(裸 K 确认),仍须满足 21 均线关系与 **≥1:1** 空间。
|
||||
- **以 15m K 线收盘价为准** 突破关键位(颈线,箱边,收敛边界等).
|
||||
- **仅刺破,未收盘站稳** → **不算** 有效突破,不做.
|
||||
- 可选:**收盘突破后回踩** 再进(裸 K 确认),仍须满足 21 均线关系与 **≥1:1** 空间.
|
||||
|
||||
### 6.3 止损与目标
|
||||
|
||||
| 项 | 说明 |
|
||||
|----|------|
|
||||
| 止损 | 结构另一侧或突破位回退点 **外侧**(0.4%~1.5%,超出则不做) |
|
||||
| 目标 | 下单前 **至少 1:1**;到位后 **随行情动态** 调整,不写死固定 RR |
|
||||
| 止损 | 结构另一侧或突破位回退点 **外侧**(0.4%~1.5%,超出则不做) |
|
||||
| 目标 | 下单前 **至少 1:1**;到位后 **随行情动态** 调整,不写死固定 RR |
|
||||
| 空间不足 | 最近阻力/支撑导致 **达不到 1:1** → **不做** |
|
||||
|
||||
---
|
||||
|
||||
## 7. 行情状态(辅助过滤)
|
||||
## 7. 行情状态(辅助过滤)
|
||||
|
||||
| 状态 | 特征 | Gate 动作 |
|
||||
|------|------|-----------|
|
||||
| **S0 趋势** | 1H/15m 排列清晰,高低点有序 | 正常:A/B 均可 |
|
||||
| **S1 宽幅震荡** | 大箱横盘多日、均线反复穿 | **降频或不做** |
|
||||
| **S2 末期/选边** | 贴边收敛、刚突破或假破频发 | 优先 **A 假破** 或 **B 收敛突破** |
|
||||
| **S0 趋势** | 1H/15m 排列清晰,高低点有序 | 正常:A/B 均可 |
|
||||
| **S1 宽幅震荡** | 大箱横盘多日,均线反复穿 | **降频或不做** |
|
||||
| **S2 末期/选边** | 贴边收敛,刚突破或假破频发 | 优先 **A 假破** 或 **B 收敛突破** |
|
||||
|
||||
---
|
||||
|
||||
@@ -155,19 +155,19 @@
|
||||
| 项 | 规则 |
|
||||
|----|------|
|
||||
| 周末 | **不开新仓** |
|
||||
| 早窗 | 约 **9:00**(8:00~12:00 内),**计划内第 1 笔** |
|
||||
| 下午 | **默认不开新仓**(持仓可保留至晚窗) |
|
||||
| 晚窗 | 约 **21:00**(20:00~23:00 内),**计划内第 2 笔** |
|
||||
| 第 3 笔 | 仅当 **未连错 2 笔**,且 **早/晚有一笔为止损出场**,可 **补 1 笔** |
|
||||
| 早窗 | 约 **9:00**(8:00~12:00 内),**计划内第 1 笔** |
|
||||
| 下午 | **默认不开新仓**(持仓可保留至晚窗) |
|
||||
| 晚窗 | 约 **21:00**(20:00~23:00 内),**计划内第 2 笔** |
|
||||
| 第 3 笔 | 仅当 **未连错 2 笔**,且 **早/晚有一笔为止损出场**,可 **补 1 笔** |
|
||||
| 日上限 | **最多 3 笔** |
|
||||
| **连错 2 笔** | **当日不再开新仓**(第 3 笔名额作废) |
|
||||
| **连错 2 笔** | **当日不再开新仓**(第 3 笔名额作废) |
|
||||
|
||||
**连错计数**:
|
||||
**连错计数**:
|
||||
|
||||
| 出场 | 是否算「错 1 笔」 |
|
||||
|------|------------------|
|
||||
| **计划止损**触发 | ✅ 算 |
|
||||
| **0 点强制清仓**(系统结果 `强制清仓`)且亏损 | ✅ 算 |
|
||||
| **0 点强制清仓**(系统结果 `强制清仓`)且亏损 | ✅ 算 |
|
||||
| 止盈 / ≥1:1 按计划平 | ❌ 不算 |
|
||||
| 0 点强制清仓且盈利或平推 | ❌ 不算 |
|
||||
|
||||
@@ -177,53 +177,53 @@
|
||||
|
||||
### 9.1 盈亏比
|
||||
|
||||
- 开仓前:**第一目标空间 ≥ 止损距离(最低 1:1)**。
|
||||
- 持仓中:目标 **随行情动态** 调整;本文档 **不量化** 固定止盈比例。
|
||||
- 开仓前:**第一目标空间 ≥ 止损距离(最低 1:1)**.
|
||||
- 持仓中:目标 **随行情动态** 调整;本文档 **不量化** 固定止盈比例.
|
||||
|
||||
### 9.2 禁止「手动止损」
|
||||
|
||||
- **亏损出场** 必须来自 **开仓时设定的计划止损**(交易所或监控等价执行)。
|
||||
- **禁止** 盘中亏着 **手点平仓** 充当止损(破坏统计与连错规则)。
|
||||
- 若违规手动平亏:**视为当日纪律失败,建议停手**;复盘结果 **不得** 记为「止损」糊弄统计。
|
||||
- **亏损出场** 必须来自 **开仓时设定的计划止损**(交易所或监控等价执行).
|
||||
- **禁止** 盘中亏着 **手点平仓** 充当止损(破坏统计与连错规则).
|
||||
- 若违规手动平亏:**视为当日纪律失败,建议停手**;复盘结果 **不得** 记为「止损」糊弄统计.
|
||||
|
||||
### 9.3 时间出场:仅 0 点(程序已实现)
|
||||
### 9.3 时间出场:仅 0 点(程序已实现)
|
||||
|
||||
- **唯一** 时间类出场:**当日 0:00(北京时间)前必须空仓**(赚赔都平)。
|
||||
- **不使用** 下单表单里的 1h / 2h / 4h「开仓后 N 小时平」(`time_close`);与本策略无关。
|
||||
- **程序兜底**(三所共用,Gate 已启用):
|
||||
- **唯一** 时间类出场:**当日 0:00(北京时间)前必须空仓**(赚赔都平).
|
||||
- **不使用** 下单表单里的 1h / 2h / 4h「开仓后 N 小时平」(`time_close`);与本策略无关.
|
||||
- **程序兜底**(三所共用,Gate 已启用):
|
||||
|
||||
| env | 说明 |
|
||||
|-----|------|
|
||||
| `FORCE_CLOSE_ENABLED=true` | 开启整点强制清仓 |
|
||||
| `FORCE_CLOSE_BJ_HOUR=0` | 北京时间 **0 点那一小时**(00:00~00:59)执行 |
|
||||
| `FORCE_CLOSE_BJ_HOUR=0` | 北京时间 **0 点那一小时**(00:00~00:59)执行 |
|
||||
|
||||
- 实现:`force_close_before_reset()`(各实例 `app.py` 后台循环调用)。
|
||||
- 行为:对该小时仍 **active** 的 `order_monitors` **市价全平**,取消交易所触发单,写交易记录。
|
||||
- **系统结果字段**:`result = 强制清仓`;备注含「北京时间 0:00 整点风控清仓」。
|
||||
- **策略口语「0 点平仓」= 系统「强制清仓」**,统计连错时按 §8 盈亏判定,不按字段名区分。
|
||||
- 实现:`force_close_before_reset()`(各实例 `app.py` 后台循环调用).
|
||||
- 行为:对该小时仍 **active** 的 `order_monitors` **市价全平**,取消交易所触发单,写交易记录.
|
||||
- **系统结果字段**:`result = 强制清仓`;备注含「北京时间 0:00 整点风控清仓」.
|
||||
- **策略口语「0 点平仓」= 系统「强制清仓」**,统计连错时按 §8 盈亏判定,不按字段名区分.
|
||||
|
||||
> **与 `TRADING_DAY_RESET_HOUR=8` 无关**:后者只切 **交易日**(统计、8 点前禁开等),**不会**自动平仓。
|
||||
> **与 `TRADING_DAY_RESET_HOUR=8` 无关**:后者只切 **交易日**(统计,8 点前禁开等),**不会**自动平仓.
|
||||
|
||||
### 9.4 允许的出场类型(统计用)
|
||||
### 9.4 允许的出场类型(统计用)
|
||||
|
||||
| 策略说法 | 系统 `result` | 说明 |
|
||||
|----------|---------------|------|
|
||||
| 止盈 | 止盈 / 移动止盈 / 保本止盈 等 | 计划止盈或 ≥1:1 后按计划/动态平 |
|
||||
| 止损 | 止损 | 仅 **计划止损** 触发 |
|
||||
| 0 点平仓 | **强制清仓** | 整点风控兜底(§9.3) |
|
||||
| ~~手动平仓~~ | 手动平仓 | **策略禁止**(除极端技术故障等,须复盘说明) |
|
||||
| 0 点平仓 | **强制清仓** | 整点风控兜底(§9.3) |
|
||||
| ~~手动平仓~~ | 手动平仓 | **策略禁止**(除极端技术故障等,须复盘说明) |
|
||||
|
||||
---
|
||||
|
||||
## 10. A / B 如何选择(当日)
|
||||
## 10. A / B 如何选择(当日)
|
||||
|
||||
| 盘面 | 优先 |
|
||||
|------|------|
|
||||
| 刚扫流动性、回到箱内 | **A 假破** |
|
||||
| 结构清晰、排列已顺、收敛末端 | **B 结构突破** |
|
||||
| 大箱乱扫、均线粘合 | **不做** |
|
||||
| 刚扫流动性,回到箱内 | **A 假破** |
|
||||
| 结构清晰,排列已顺,收敛末端 | **B 结构突破** |
|
||||
| 大箱乱扫,均线粘合 | **不做** |
|
||||
|
||||
早/晚窗 **有形态才做**,无形态 = **0 笔**,不占额度。
|
||||
早/晚窗 **有形态才做**,无形态 = **0 笔**,不占额度.
|
||||
|
||||
---
|
||||
|
||||
@@ -243,13 +243,13 @@
|
||||
|
||||
| 项 | 说明 |
|
||||
|----|------|
|
||||
| 日内 profile 判定 | `is_intraday_trading_profile()`(`lib/trade/entry_model_lib.py`) |
|
||||
| 0 点强制清仓 | `FORCE_CLOSE_ENABLED` + `FORCE_CLOSE_BJ_HOUR`;`force_close_before_reset()`;结果 **`强制清仓`** |
|
||||
| UI 标识 | 顶栏 **强制清仓 已开启** 徽章 + 持仓卡片 **倒计时**(三所 + 中控) |
|
||||
| 交易记录展示 | 三所 UI / 中控:`强制清仓` 与止损同类 badge |
|
||||
| 三所统一 | 币安 / OKX / Gate 同一函数与 env;**将来改日内只需各所 `.env` 打开,无需改代码** |
|
||||
| 日内 profile 判定 | `is_intraday_trading_profile()`(`lib/trade/entry_model_lib.py`) |
|
||||
| 0 点强制清仓 | `FORCE_CLOSE_ENABLED` + `FORCE_CLOSE_BJ_HOUR`;`force_close_before_reset()`;结果 **`强制清仓`** |
|
||||
| UI 标识 | 顶栏 **强制清仓 已开启** 徽章 + 持仓卡片 **倒计时**(三所 + 中控) |
|
||||
| 交易记录展示 | 三所 UI / 中控:`强制清仓` 与止损同类 badge |
|
||||
| 三所统一 | 币安 / OKX / Gate 同一函数与 env;**将来改日内只需各所 `.env` 打开,无需改代码** |
|
||||
|
||||
Gate 当前建议 env(节选):
|
||||
Gate 当前建议 env(节选):
|
||||
|
||||
```env
|
||||
FORCE_CLOSE_ENABLED=true
|
||||
@@ -257,14 +257,14 @@ FORCE_CLOSE_BJ_HOUR=0
|
||||
TRADING_DAY_RESET_HOUR=8
|
||||
```
|
||||
|
||||
### 12.2 待实现(UI / 纪律)
|
||||
### 12.2 待实现(UI / 纪律)
|
||||
|
||||
| 项 | 说明 |
|
||||
|----|------|
|
||||
| 开仓类型 | 界面 **`假破` / `结构突破`**(code:`liquidity_false_break` / `structure_breakout`);**无** trend/swing 手选 |
|
||||
| 开仓类型 | 界面 **`假破` / `结构突破`**(code:`liquidity_false_break` / `structure_breakout`);**无** trend/swing 手选 |
|
||||
| 写入字段 | `trade_records.entry_model` / 复盘下拉同两项 |
|
||||
| 隐藏操作 | 日内 profile 下 **隐藏** 平仓、委托、移动保本(**实例页 + 中控**,`intraday_discipline` / `order_entry_profile=intraday`) |
|
||||
| 隐藏表单项 | 不展示 1h/2h/4h 时间平仓、移动保本勾选(避免与 §9.3 混用) |
|
||||
| 隐藏操作 | 日内 profile 下 **隐藏** 平仓,委托,移动保本(**实例页 + 中控**,`intraday_discipline` / `order_entry_profile=intraday`) |
|
||||
| 隐藏表单项 | 不展示 1h/2h/4h 时间平仓,移动保本勾选(避免与 §9.3 混用) |
|
||||
| 后端可选 | 严格模式下拒绝 `del_order` / 改委托 API |
|
||||
|
||||
---
|
||||
@@ -273,5 +273,5 @@ TRADING_DAY_RESET_HOUR=8
|
||||
|
||||
| 版本 | 日期 | 说明 |
|
||||
|------|------|------|
|
||||
| v0.1 | 2026-07-06 | 定稿:BTC 日内;1H+15m 均线;A 假破(5m N+15m 分型);B 结构突破(15m 收盘);早1晚1/最多3笔/连错2停;禁手动止损;仅 0 点强平 |
|
||||
| v0.2 | 2026-07-06 | §9.3/§12:对齐 `FORCE_CLOSE_*` 与系统结果「强制清仓」;区分 `time_close` / `TRADING_DAY_RESET_HOUR`;Gate 已启用说明 |
|
||||
| v0.1 | 2026-07-06 | 定稿:BTC 日内;1H+15m 均线;A 假破(5m N+15m 分型);B 结构突破(15m 收盘);早1晚1/最多3笔/连错2停;禁手动止损;仅 0 点强平 |
|
||||
| v0.2 | 2026-07-06 | §9.3/§12:对齐 `FORCE_CLOSE_*` 与系统结果「强制清仓」;区分 `time_close` / `TRADING_DAY_RESET_HOUR`;Gate 已启用说明 |
|
||||
|
||||
+157
-157
@@ -1,157 +1,157 @@
|
||||
# OKX·多空趋势账户
|
||||
|
||||
> **状态**:v0.4(讨论稿:反转·启动 A/B;**UI 仍为 v0.2 三档**,两级下拉待实现)
|
||||
|
||||
---
|
||||
|
||||
## 1. 账户定位
|
||||
|
||||
| 项 | 说明 |
|
||||
|----|------|
|
||||
| 交易所 | OKX 永续合约 |
|
||||
| 方向 | **做多 + 做空**(`TRADE_DIRECTION=both`,可按需限制) |
|
||||
| 计仓 | `POSITION_SIZING_MODE=risk` |
|
||||
| 关键位自动单 | `KEY_AUTO_ORDER_ENABLED=false` |
|
||||
| UI profile | **趋势户**(非 Gate BTC/ETH 日内白名单) |
|
||||
|
||||
**选方向原则**:开仓前确认 4H / 日线大级别与所选「做多/做空」一致;逆势单不在本策略范围内。
|
||||
|
||||
做多侧反转细则与 [binance-alt-trend-long.md §3](./binance-alt-trend-long.md) 同构;本文 **§3.2** 给出做空镜像。
|
||||
|
||||
---
|
||||
|
||||
## 2. 开仓类型(规划与现状)
|
||||
|
||||
### 2.1 规划:两级选择(与币安共用实现)
|
||||
|
||||
| 第一级 | 第二级 | 做多 | 做空 |
|
||||
|--------|--------|------|------|
|
||||
| **反转** | 启动 A / 启动 B | `launch_a` / `launch_b` | 同 code,方向在表单 |
|
||||
| **顺势** | 大分歧 A / B | `big_div_a` / `big_div_b` | 同左 |
|
||||
| **波段** | 小分歧 | `small_div` | 同左 |
|
||||
|
||||
`lib/trade/entry_model_lib.py` + 共用模板/JS,三所趋势户一致。
|
||||
|
||||
### 2.2 现状:下单监控 UI
|
||||
|
||||
两级下拉:**性质** → **类型**;提交 `entry_model` code。
|
||||
|
||||
### 2.3 杠杆
|
||||
|
||||
BTC/ETH **10x**,其它 **5x**;与方向、开仓类型无关。
|
||||
|
||||
---
|
||||
|
||||
## 3. 反转·启动(讨论定稿)
|
||||
|
||||
**性质**:反转 — 在新一轮主趋势**确认之前**作战;与顺势·大分歧不是同一阶段。
|
||||
|
||||
**周期**:背离与箱体以 **4h** 为主;**日线与 4h 同阶段时,结构边界以日线为准**;A2 可用 **5m** 节奏。
|
||||
|
||||
### 3.1 做多(跌后筑底 → 新主升)
|
||||
|
||||
与币安 [§3](./binance-alt-trend-long.md) 一致,摘要如下:
|
||||
|
||||
```text
|
||||
4h MACD 底背离(严格筛选)→ 标「参考高点」
|
||||
第 1 次到高点附近 → 不做(V 形)
|
||||
回落箱内 → 第 2 次到高点附近 → 开战
|
||||
├─ 见小收敛 → 启动 A(A1)
|
||||
└─ 不见收敛 → 启动 B(实体突破)
|
||||
B 失败回箱 → 跌破箱一半暂弃;否则 5m 不创新低 + N 字 → 启动 A(A2)
|
||||
```
|
||||
|
||||
| 环节 | 规则 |
|
||||
|------|------|
|
||||
| 背离 | 4h MACD **底背离**;**首次**不做;**通道式下跌**不做;明显波段高低点 + **三段及以上**跌后才开始找背离 |
|
||||
| 参考点 | 背离后标 **最后一个显著高点** |
|
||||
| 两次摸高 | 第 1 次到高点附近(假破/不破都算)**不做**;第 2 次才关注 |
|
||||
| 启动 B | 无小收敛 → **实体突破**参考高点/箱顶 |
|
||||
| 启动 A | A1:摸高前小收敛;A2:B 止损后、**未跌破箱一半** + **5m 不创新低** + **5m N 字** |
|
||||
|
||||
### 3.2 做空(涨后筑顶 → 新主跌,镜像)
|
||||
|
||||
| 环节 | 做多 | 做空(镜像) |
|
||||
|------|------|----------------|
|
||||
| 前端结构 | **跌** → 背离 → 箱 | **涨** → 背离 → 箱 |
|
||||
| 背离 | 4h MACD **底背离** | 4h MACD **顶背离** |
|
||||
| 背离过滤 | 首次不做;**通道式下跌**不做;三段及以上**跌** | 首次不做;**通道式上涨**不做;三段及以上**涨** |
|
||||
| 参考点 | **参考高点** | **参考低点**(最后一个显著低点) |
|
||||
| 两次摸极值 | 第 1 次到**高点**附近不做(V 形反弹) | 第 1 次到**低点**附近不做(V 形下跌) |
|
||||
| 作战区 | 第 2 次到**高点**附近 | 第 2 次到**低点**附近 |
|
||||
| 启动 B | **实体跌破**参考低点/箱底 | 同上(向下实体突破) |
|
||||
| 启动 A1 | 第二次摸高前**小收敛** | 第二次摸低前**小收敛** |
|
||||
| 启动 A2 | B 失败后**未跌破**箱一半;**5m 不创新低**;破 **5m 高** N 字 | B 失败后**未涨破**箱一半;**5m 不创新高**;破 **5m 低**倒 N 字 |
|
||||
| 成功后 | 主升 → 顺势大分歧 / 小分歧 | 主跌 → 顺势大分歧 / 小分歧 |
|
||||
|
||||
> 横盘**时长不量化**;顺序为 **涨/跌 → 背离 → 背离后震荡**,非趋势中继。
|
||||
|
||||
### 3.3 与顺势、波段的边界
|
||||
|
||||
| | 反转·启动 | 顺势·大分歧 | 波段·小分歧 |
|
||||
|---|-----------|-------------|-------------|
|
||||
| 做多前端 | 跌→背离→箱→两次摸高 | 主升已确立 | 主升已确立 |
|
||||
| 做空前端 | 涨→背离→箱→两次摸低 | 主跌已确立 | 主跌已确立 |
|
||||
| V 形 | 第 1 次摸极值不做 | — | — |
|
||||
| 5m N 试仓 | **启动 A(A2)**,非小分歧 | — | — |
|
||||
| 第三次不做 | — | — | ✓ |
|
||||
|
||||
---
|
||||
|
||||
## 4. 顺势·大分歧(趋势单)
|
||||
|
||||
**前提**:主趋势**已确立**;上方(多)或下方(空)仍有空间;**不要**求反转链(§3)。
|
||||
|
||||
| | 做多 | 做空 |
|
||||
|---|------|------|
|
||||
| **大分歧 A** | 4h/日线多头;5m/15m 收敛,**不创新低**企稳 | 4h/日线空头;5m/15m 收敛,**不创新高**企稳 |
|
||||
| **大分歧 B** | **向上突破**确认(实体优先) | **向下突破**确认(实体优先) |
|
||||
|
||||
---
|
||||
|
||||
## 5. 波段·小分歧(波段单)
|
||||
|
||||
**前提**:主趋势**已走出**;反转链进行中**不做**小分歧。
|
||||
|
||||
- **前两次**可做,**第三次不做**;不追突破
|
||||
- **做多**:二次探底 → N 字;或 5m 三均线重新多头
|
||||
- **做空**:二次探顶 → 倒 N;或 5m 三均线重新空头
|
||||
|
||||
---
|
||||
|
||||
## 6. 纪律
|
||||
|
||||
1. 方向与大级别一致;不做顺手反向单;同一币种避免未计划对冲叠仓
|
||||
2. **反转**:首次背离不做;通道式涨跌中的背离不做;第 1 次摸参考极值不做(V 形)
|
||||
3. **顺势**:第三次小分歧不做;小分歧不追突破
|
||||
4. 止盈/止损/是否手平:**随行情**,本文档不量化 RR
|
||||
|
||||
---
|
||||
|
||||
## 7. 持仓与出场(定性)
|
||||
|
||||
| 单型 | 做多 | 做空 |
|
||||
|------|------|------|
|
||||
| 启动 A/B | 赌新主升;B 失败可 A2;确立前不做小分歧 | 赌新主跌;同上镜像 |
|
||||
| 大分歧 | 可长持;两次小分歧后远目标未到可手平 | 同左 |
|
||||
| 小分歧 | 短拿,常手平 | 短拿,常手平 |
|
||||
|
||||
---
|
||||
|
||||
## 8. 系统字段
|
||||
|
||||
| 操作 | 字段 |
|
||||
|------|------|
|
||||
| 下单(现状) | `entry_model` + `trade_style`;方向在订单侧 |
|
||||
| 下单(规划) | `launch_a` / `launch_b` + 两级 UI |
|
||||
| 平仓 / 复盘 | `entry_reason` = 界面标签;与币安一致 |
|
||||
|
||||
---
|
||||
|
||||
## 修订记录
|
||||
|
||||
| 版本 | 日期 | 说明 |
|
||||
|------|------|------|
|
||||
| v0.4 | 2026-07-06 | 反转·启动 A/B(做多同币安 §3;做空镜像);两级 UI 规划 |
|
||||
| v0.3 | 2026-07-06 | 独立完整策略说明 |
|
||||
| v0.2 | 2026-07-06 | 定稿 UI 短标签 |
|
||||
# OKX·多空趋势账户
|
||||
|
||||
> **状态**:v0.4(讨论稿:反转·启动 A/B;**UI 仍为 v0.2 三档**,两级下拉待实现)
|
||||
|
||||
---
|
||||
|
||||
## 1. 账户定位
|
||||
|
||||
| 项 | 说明 |
|
||||
|----|------|
|
||||
| 交易所 | OKX 永续合约 |
|
||||
| 方向 | **做多 + 做空**(`TRADE_DIRECTION=both`,可按需限制) |
|
||||
| 计仓 | `POSITION_SIZING_MODE=risk` |
|
||||
| 关键位自动单 | `KEY_AUTO_ORDER_ENABLED=false` |
|
||||
| UI profile | **趋势户**(非 Gate BTC/ETH 日内白名单) |
|
||||
|
||||
**选方向原则**:开仓前确认 4H / 日线大级别与所选「做多/做空」一致;逆势单不在本策略范围内.
|
||||
|
||||
做多侧反转细则与 [binance-alt-trend-long.md §3](./binance-alt-trend-long.md) 同构;本文 **§3.2** 给出做空镜像.
|
||||
|
||||
---
|
||||
|
||||
## 2. 开仓类型(规划与现状)
|
||||
|
||||
### 2.1 规划:两级选择(与币安共用实现)
|
||||
|
||||
| 第一级 | 第二级 | 做多 | 做空 |
|
||||
|--------|--------|------|------|
|
||||
| **反转** | 启动 A / 启动 B | `launch_a` / `launch_b` | 同 code,方向在表单 |
|
||||
| **顺势** | 大分歧 A / B | `big_div_a` / `big_div_b` | 同左 |
|
||||
| **波段** | 小分歧 | `small_div` | 同左 |
|
||||
|
||||
`lib/trade/entry_model_lib.py` + 共用模板/JS,三所趋势户一致.
|
||||
|
||||
### 2.2 现状:下单监控 UI
|
||||
|
||||
两级下拉:**性质** → **类型**;提交 `entry_model` code.
|
||||
|
||||
### 2.3 杠杆
|
||||
|
||||
BTC/ETH **10x**,其它 **5x**;与方向,开仓类型无关.
|
||||
|
||||
---
|
||||
|
||||
## 3. 反转·启动(讨论定稿)
|
||||
|
||||
**性质**:反转 — 在新一轮主趋势**确认之前**作战;与顺势·大分歧不是同一阶段.
|
||||
|
||||
**周期**:背离与箱体以 **4h** 为主;**日线与 4h 同阶段时,结构边界以日线为准**;A2 可用 **5m** 节奏.
|
||||
|
||||
### 3.1 做多(跌后筑底 → 新主升)
|
||||
|
||||
与币安 [§3](./binance-alt-trend-long.md) 一致,摘要如下:
|
||||
|
||||
```text
|
||||
4h MACD 底背离(严格筛选)→ 标「参考高点」
|
||||
第 1 次到高点附近 → 不做(V 形)
|
||||
回落箱内 → 第 2 次到高点附近 → 开战
|
||||
├─ 见小收敛 → 启动 A(A1)
|
||||
└─ 不见收敛 → 启动 B(实体突破)
|
||||
B 失败回箱 → 跌破箱一半暂弃;否则 5m 不创新低 + N 字 → 启动 A(A2)
|
||||
```
|
||||
|
||||
| 环节 | 规则 |
|
||||
|------|------|
|
||||
| 背离 | 4h MACD **底背离**;**首次**不做;**通道式下跌**不做;明显波段高低点 + **三段及以上**跌后才开始找背离 |
|
||||
| 参考点 | 背离后标 **最后一个显著高点** |
|
||||
| 两次摸高 | 第 1 次到高点附近(假破/不破都算)**不做**;第 2 次才关注 |
|
||||
| 启动 B | 无小收敛 → **实体突破**参考高点/箱顶 |
|
||||
| 启动 A | A1:摸高前小收敛;A2:B 止损后,**未跌破箱一半** + **5m 不创新低** + **5m N 字** |
|
||||
|
||||
### 3.2 做空(涨后筑顶 → 新主跌,镜像)
|
||||
|
||||
| 环节 | 做多 | 做空(镜像) |
|
||||
|------|------|----------------|
|
||||
| 前端结构 | **跌** → 背离 → 箱 | **涨** → 背离 → 箱 |
|
||||
| 背离 | 4h MACD **底背离** | 4h MACD **顶背离** |
|
||||
| 背离过滤 | 首次不做;**通道式下跌**不做;三段及以上**跌** | 首次不做;**通道式上涨**不做;三段及以上**涨** |
|
||||
| 参考点 | **参考高点** | **参考低点**(最后一个显著低点) |
|
||||
| 两次摸极值 | 第 1 次到**高点**附近不做(V 形反弹) | 第 1 次到**低点**附近不做(V 形下跌) |
|
||||
| 作战区 | 第 2 次到**高点**附近 | 第 2 次到**低点**附近 |
|
||||
| 启动 B | **实体跌破**参考低点/箱底 | 同上(向下实体突破) |
|
||||
| 启动 A1 | 第二次摸高前**小收敛** | 第二次摸低前**小收敛** |
|
||||
| 启动 A2 | B 失败后**未跌破**箱一半;**5m 不创新低**;破 **5m 高** N 字 | B 失败后**未涨破**箱一半;**5m 不创新高**;破 **5m 低**倒 N 字 |
|
||||
| 成功后 | 主升 → 顺势大分歧 / 小分歧 | 主跌 → 顺势大分歧 / 小分歧 |
|
||||
|
||||
> 横盘**时长不量化**;顺序为 **涨/跌 → 背离 → 背离后震荡**,非趋势中继.
|
||||
|
||||
### 3.3 与顺势,波段的边界
|
||||
|
||||
| | 反转·启动 | 顺势·大分歧 | 波段·小分歧 |
|
||||
|---|-----------|-------------|-------------|
|
||||
| 做多前端 | 跌→背离→箱→两次摸高 | 主升已确立 | 主升已确立 |
|
||||
| 做空前端 | 涨→背离→箱→两次摸低 | 主跌已确立 | 主跌已确立 |
|
||||
| V 形 | 第 1 次摸极值不做 | — | — |
|
||||
| 5m N 试仓 | **启动 A(A2)**,非小分歧 | — | — |
|
||||
| 第三次不做 | — | — | ✓ |
|
||||
|
||||
---
|
||||
|
||||
## 4. 顺势·大分歧(趋势单)
|
||||
|
||||
**前提**:主趋势**已确立**;上方(多)或下方(空)仍有空间;**不要**求反转链(§3).
|
||||
|
||||
| | 做多 | 做空 |
|
||||
|---|------|------|
|
||||
| **大分歧 A** | 4h/日线多头;5m/15m 收敛,**不创新低**企稳 | 4h/日线空头;5m/15m 收敛,**不创新高**企稳 |
|
||||
| **大分歧 B** | **向上突破**确认(实体优先) | **向下突破**确认(实体优先) |
|
||||
|
||||
---
|
||||
|
||||
## 5. 波段·小分歧(波段单)
|
||||
|
||||
**前提**:主趋势**已走出**;反转链进行中**不做**小分歧.
|
||||
|
||||
- **前两次**可做,**第三次不做**;不追突破
|
||||
- **做多**:二次探底 → N 字;或 5m 三均线重新多头
|
||||
- **做空**:二次探顶 → 倒 N;或 5m 三均线重新空头
|
||||
|
||||
---
|
||||
|
||||
## 6. 纪律
|
||||
|
||||
1. 方向与大级别一致;不做顺手反向单;同一币种避免未计划对冲叠仓
|
||||
2. **反转**:首次背离不做;通道式涨跌中的背离不做;第 1 次摸参考极值不做(V 形)
|
||||
3. **顺势**:第三次小分歧不做;小分歧不追突破
|
||||
4. 止盈/止损/是否手平:**随行情**,本文档不量化 RR
|
||||
|
||||
---
|
||||
|
||||
## 7. 持仓与出场(定性)
|
||||
|
||||
| 单型 | 做多 | 做空 |
|
||||
|------|------|------|
|
||||
| 启动 A/B | 赌新主升;B 失败可 A2;确立前不做小分歧 | 赌新主跌;同上镜像 |
|
||||
| 大分歧 | 可长持;两次小分歧后远目标未到可手平 | 同左 |
|
||||
| 小分歧 | 短拿,常手平 | 短拿,常手平 |
|
||||
|
||||
---
|
||||
|
||||
## 8. 系统字段
|
||||
|
||||
| 操作 | 字段 |
|
||||
|------|------|
|
||||
| 下单(现状) | `entry_model` + `trade_style`;方向在订单侧 |
|
||||
| 下单(规划) | `launch_a` / `launch_b` + 两级 UI |
|
||||
| 平仓 / 复盘 | `entry_reason` = 界面标签;与币安一致 |
|
||||
|
||||
---
|
||||
|
||||
## 修订记录
|
||||
|
||||
| 版本 | 日期 | 说明 |
|
||||
|------|------|------|
|
||||
| v0.4 | 2026-07-06 | 反转·启动 A/B(做多同币安 §3;做空镜像);两级 UI 规划 |
|
||||
| v0.3 | 2026-07-06 | 独立完整策略说明 |
|
||||
| v0.2 | 2026-07-06 | 定稿 UI 短标签 |
|
||||
|
||||
@@ -1,184 +1,184 @@
|
||||
# 趋势回调:中控平仓与交易记录(检阅备忘)
|
||||
|
||||
本文档汇总 **中控手动结束趋势计划**、**交易记录 / 策略记录** 写入规则,以及 **三所展示统一**、**补仓表计价** 相关修复,便于自行检阅与排错。
|
||||
|
||||
适用仓库:`crypto_monitor`(Binance / OKX / + `manual_trading_hub`)。
|
||||
|
||||
---
|
||||
|
||||
## 1. 中控手动平仓会不会写交易记录?
|
||||
|
||||
**会。** 在实例已部署 **`80226ee` 及之后** 代码并 **重启对应 Flask** 的前提下:
|
||||
|
||||
中控点击 **「结束计划」** → 实例执行市价平仓 + 结束计划 → **同时写入**:
|
||||
|
||||
| 目标 | 表 | 页面入口 |
|
||||
|------|-----|----------|
|
||||
| 策略记录 | `strategy_trade_snapshots` | 顶栏 **策略交易记录** → 左栏「趋势回调记录」 |
|
||||
| 交易记录 | `trade_records` | 顶栏 **交易记录与复盘** |
|
||||
|
||||
手动结束的结果字段为 **「手动平仓」**(亏损时也不会被改成「止损」)。
|
||||
|
||||
---
|
||||
|
||||
## 2. 调用链(三所统一)
|
||||
|
||||
```
|
||||
manual_trading_hub
|
||||
POST /api/trend/{exchange_id}/stop
|
||||
→ 实例 POST /api/hub/trend/stop/{plan_id}
|
||||
→ stop_trend_pullback(pid)
|
||||
→ 市价平仓 + 撤单
|
||||
→ _finalize_plan(cfg, conn, row, "手动平仓", exit_price)
|
||||
```
|
||||
|
||||
共用实现:`strategy_trend_register.py`(三所同一套,各所的 `stop_trend_pullback` 也调用 `_finalize_plan`)。
|
||||
|
||||
---
|
||||
|
||||
## 3. `_finalize_plan` 写入顺序(修复后)
|
||||
|
||||
1. 写 **策略快照** `save_trend_plan_snapshot` → `strategy_trade_snapshots`
|
||||
2. 撤该品种挂单
|
||||
3. 若尚无 `trade_records.trend_plan_id = 计划ID`:
|
||||
- 更新当日 session 资金
|
||||
- **`insert_trade_record`** 写入交易记录
|
||||
4. 更新 `trend_pullback_plans.status`(`stopped_manual` / `stopped_sl` / `stopped_tp`)
|
||||
5. **`conn.commit()`** 一次提交
|
||||
|
||||
要点:**先写交易记录,再结束计划**,避免「计划已结束、交易记录未写入」的半成功状态。
|
||||
|
||||
---
|
||||
|
||||
## 4. 曾出现的 Bug(#4 ONDO 漏记)
|
||||
|
||||
**现象**:策略记录有(止损 -2.71U),**交易记录没有**。
|
||||
|
||||
**原因**:各所的 `insert_trade_record` 曾 **缺少 `entry_reason` 参数**,而 `_finalize_plan` 固定传入 `entry_reason="趋势回调"`,触发:
|
||||
|
||||
```text
|
||||
TypeError: insert_trade_record() got an unexpected keyword argument 'entry_reason'
|
||||
```
|
||||
|
||||
策略快照在异常 **之前** 已插入,交易记录插入失败,故只出现在策略记录页。
|
||||
|
||||
**修复提交**:`80226ee`
|
||||
|
||||
- `insert_trade_record` 增加 `entry_reason`
|
||||
- `_call_insert_trade_record`:按各所函数 **签名过滤** 参数,避免未知字段导致失败
|
||||
- 调整写入顺序:交易记录 → 计划结束 → commit
|
||||
|
||||
---
|
||||
|
||||
## 5. 历史漏记补录
|
||||
|
||||
对已结束、策略快照在、交易记录缺的计划(如 #4):
|
||||
|
||||
```bash
|
||||
cd /opt/crypto_monitor # 或本机仓库根目录
|
||||
|
||||
# 先预览
|
||||
python scripts/backfill_trend_trade_records.py \
|
||||
--db crypto_monitor_gate/crypto.db --dry-run
|
||||
|
||||
# 确认后写入
|
||||
python scripts/backfill_trend_trade_records.py \
|
||||
--db crypto_monitor_gate/crypto.db --apply
|
||||
```
|
||||
|
||||
其它所将 `--db` 换成对应 `crypto.db` 路径即可。
|
||||
|
||||
---
|
||||
|
||||
## 6. 与「保本移交」的区别
|
||||
|
||||
| 操作 | 策略记录 | 交易记录 |
|
||||
|------|----------|----------|
|
||||
| 中控 **结束计划**(手动平仓) | 计划结束时写入 | **同一时刻**写入 |
|
||||
| **保本移交** | 移交时写入策略快照 | **不立即写**;持仓移交到 `order_monitors`,**后续平仓** 再写入 `trade_records` |
|
||||
|
||||
---
|
||||
|
||||
## 7. 三所展示统一(中控 ↔ 实例)
|
||||
|
||||
### 7.1 数据 enrich 入口
|
||||
|
||||
| 场景 | 函数 |
|
||||
|------|------|
|
||||
| 实例策略页 | `enrich_trend_plan` |
|
||||
| 中控 `/api/hub/monitor` | `enrich_trend_plan_for_hub` → 同上 |
|
||||
| 补仓明细表 | `attach_trend_dca_levels` → `enrich_trend_dca_levels_with_tp` |
|
||||
|
||||
在 `hub_bridge` 安装后调用 `patch_trend_hub_enrich`,与另外三所 `install_strategy_trend` 行为一致。
|
||||
|
||||
### 7.2 补仓表「触发价 / 加仓后均价」
|
||||
|
||||
**禁止**为凑均价 **反推虚构成交价**(曾错误出现做多补仓触发价 0.3941 等离谱数值)。
|
||||
|
||||
**`trend_leg_display_price`(三所唯一口径)**:
|
||||
|
||||
| 列 | 规则 |
|
||||
|----|------|
|
||||
| **触发价** | `leg_fill_prices_json` 有记录 → 实际成交价;无记录 → **计划网格价** |
|
||||
| **末档已补仓的加仓后均价** | 与顶部均价一致,取 **交易所持仓 `entry_price`**(`avg_entry_price`) |
|
||||
| **顶部均价** | 优先交易所 live `entry_price`,非计划库内估算值 |
|
||||
|
||||
修复提交:`08082eb`(移除反推成交价逻辑)。
|
||||
|
||||
### 7.3 中控静态页
|
||||
|
||||
`manual_trading_hub/static/app.js`:趋势浮盈亏计算 **优先** `trendPlan.avg_entry_price`,与计划卡一致。
|
||||
|
||||
---
|
||||
|
||||
## 8. 部署与自检
|
||||
|
||||
### 8.1 升级
|
||||
|
||||
```bash
|
||||
cd /opt/crypto_monitor
|
||||
git pull # 需含 80226ee、08082eb
|
||||
pm2 restart crypto-monitor-binance crypto-monitor-okx crypto-monitor-gate manual-trading-hub
|
||||
pm2 save
|
||||
```
|
||||
|
||||
### 8.2 手动平仓后自检
|
||||
|
||||
1. 中控结束一笔测试计划(或极小仓位)
|
||||
2. **策略交易记录**:出现对应条目
|
||||
3. **交易记录与复盘**:出现 `类型=趋势回调`、`结果=手动平仓`,且 `trend_plan_id` 与计划 ID 一致
|
||||
4. 若实例 flash / 日志出现「计划已结束但记账可能不完整」,说明 `insert_trade_record` 仍失败,需查 PM2 日志
|
||||
|
||||
### 8.3 相关代码文件
|
||||
|
||||
| 文件 | 作用 |
|
||||
|------|------|
|
||||
| `strategy_trend_register.py` | `_finalize_plan`、`_call_insert_trade_record`、`enrich_trend_plan` |
|
||||
| `strategy_trend_lib.py` | `trend_leg_display_price`、`enrich_trend_dca_levels_with_tp` |
|
||||
| `strategy_snapshot_lib.py` | 策略快照写入 |
|
||||
| `hub_bridge.py` | `/api/hub/trend/stop/<pid>` |
|
||||
| `crypto_monitor_gate/app.py` | `insert_trade_record`(含 `entry_reason`) |
|
||||
| `scripts/backfill_trend_trade_records.py` | 漏记交易记录补录 |
|
||||
|
||||
### 8.4 相关提交
|
||||
|
||||
| 提交 | 说明 |
|
||||
|------|------|
|
||||
| `6a4ec69` | 中控与三所趋势展示 enrich 统一 |
|
||||
| `08082eb` | 移除补仓表反推虚构成交价 |
|
||||
| `80226ee` | 修复 中控平仓漏写 `trade_records` |
|
||||
|
||||
---
|
||||
|
||||
## 9. 相关文档
|
||||
|
||||
| 文档 | 内容 |
|
||||
|------|------|
|
||||
| [策略交易说明.md](../策略交易说明.md) | 策略总览、策略交易记录页 |
|
||||
| [crypto_monitor_gate/趋势回调策略说明.md](../crypto_monitor_gate/趋势回调策略说明.md) | 趋势回调业务细则 |
|
||||
| [manual_trading_hub/使用说明.md](../manual_trading_hub/使用说明.md) | 中控监控与趋势卡布局 |
|
||||
| [hub-symbol-archive-kline.md](./hub-symbol-archive-kline.md) | 币种档案、永久 5m K 线、交易 overlay |
|
||||
|
||||
---
|
||||
|
||||
*最后整理:2026-06-07(与对话中修复项同步)*
|
||||
# 趋势回调:中控平仓与交易记录(检阅备忘)
|
||||
|
||||
本文档汇总 **中控手动结束趋势计划**,**交易记录 / 策略记录** 写入规则,以及 **三所展示统一**,**补仓表计价** 相关修复,便于自行检阅与排错.
|
||||
|
||||
适用仓库:`crypto_monitor`(Binance / OKX / + `manual_trading_hub`).
|
||||
|
||||
---
|
||||
|
||||
## 1. 中控手动平仓会不会写交易记录?
|
||||
|
||||
**会.** 在实例已部署 **`80226ee` 及之后** 代码并 **重启对应 Flask** 的前提下:
|
||||
|
||||
中控点击 **「结束计划」** → 实例执行市价平仓 + 结束计划 → **同时写入**:
|
||||
|
||||
| 目标 | 表 | 页面入口 |
|
||||
|------|-----|----------|
|
||||
| 策略记录 | `strategy_trade_snapshots` | 顶栏 **策略交易记录** → 左栏「趋势回调记录」 |
|
||||
| 交易记录 | `trade_records` | 顶栏 **交易记录与复盘** |
|
||||
|
||||
手动结束的结果字段为 **「手动平仓」**(亏损时也不会被改成「止损」).
|
||||
|
||||
---
|
||||
|
||||
## 2. 调用链(三所统一)
|
||||
|
||||
```
|
||||
manual_trading_hub
|
||||
POST /api/trend/{exchange_id}/stop
|
||||
→ 实例 POST /api/hub/trend/stop/{plan_id}
|
||||
→ stop_trend_pullback(pid)
|
||||
→ 市价平仓 + 撤单
|
||||
→ _finalize_plan(cfg, conn, row, "手动平仓", exit_price)
|
||||
```
|
||||
|
||||
共用实现:`strategy_trend_register.py`(三所同一套,各所的 `stop_trend_pullback` 也调用 `_finalize_plan`).
|
||||
|
||||
---
|
||||
|
||||
## 3. `_finalize_plan` 写入顺序(修复后)
|
||||
|
||||
1. 写 **策略快照** `save_trend_plan_snapshot` → `strategy_trade_snapshots`
|
||||
2. 撤该品种挂单
|
||||
3. 若尚无 `trade_records.trend_plan_id = 计划ID`:
|
||||
- 更新当日 session 资金
|
||||
- **`insert_trade_record`** 写入交易记录
|
||||
4. 更新 `trend_pullback_plans.status`(`stopped_manual` / `stopped_sl` / `stopped_tp`)
|
||||
5. **`conn.commit()`** 一次提交
|
||||
|
||||
要点:**先写交易记录,再结束计划**,避免「计划已结束,交易记录未写入」的半成功状态.
|
||||
|
||||
---
|
||||
|
||||
## 4. 曾出现的 Bug(#4 ONDO 漏记)
|
||||
|
||||
**现象**:策略记录有(止损 -2.71U),**交易记录没有**.
|
||||
|
||||
**原因**:各所的 `insert_trade_record` 曾 **缺少 `entry_reason` 参数**,而 `_finalize_plan` 固定传入 `entry_reason="趋势回调"`,触发:
|
||||
|
||||
```text
|
||||
TypeError: insert_trade_record() got an unexpected keyword argument 'entry_reason'
|
||||
```
|
||||
|
||||
策略快照在异常 **之前** 已插入,交易记录插入失败,故只出现在策略记录页.
|
||||
|
||||
**修复提交**:`80226ee`
|
||||
|
||||
- `insert_trade_record` 增加 `entry_reason`
|
||||
- `_call_insert_trade_record`:按各所函数 **签名过滤** 参数,避免未知字段导致失败
|
||||
- 调整写入顺序:交易记录 → 计划结束 → commit
|
||||
|
||||
---
|
||||
|
||||
## 5. 历史漏记补录
|
||||
|
||||
对已结束,策略快照在,交易记录缺的计划(如 #4):
|
||||
|
||||
```bash
|
||||
cd /opt/crypto_monitor # 或本机仓库根目录
|
||||
|
||||
# 先预览
|
||||
python scripts/backfill_trend_trade_records.py \
|
||||
--db crypto_monitor_gate/crypto.db --dry-run
|
||||
|
||||
# 确认后写入
|
||||
python scripts/backfill_trend_trade_records.py \
|
||||
--db crypto_monitor_gate/crypto.db --apply
|
||||
```
|
||||
|
||||
其它所将 `--db` 换成对应 `crypto.db` 路径即可.
|
||||
|
||||
---
|
||||
|
||||
## 6. 与「保本移交」的区别
|
||||
|
||||
| 操作 | 策略记录 | 交易记录 |
|
||||
|------|----------|----------|
|
||||
| 中控 **结束计划**(手动平仓) | 计划结束时写入 | **同一时刻**写入 |
|
||||
| **保本移交** | 移交时写入策略快照 | **不立即写**;持仓移交到 `order_monitors`,**后续平仓** 再写入 `trade_records` |
|
||||
|
||||
---
|
||||
|
||||
## 7. 三所展示统一(中控 ↔ 实例)
|
||||
|
||||
### 7.1 数据 enrich 入口
|
||||
|
||||
| 场景 | 函数 |
|
||||
|------|------|
|
||||
| 实例策略页 | `enrich_trend_plan` |
|
||||
| 中控 `/api/hub/monitor` | `enrich_trend_plan_for_hub` → 同上 |
|
||||
| 补仓明细表 | `attach_trend_dca_levels` → `enrich_trend_dca_levels_with_tp` |
|
||||
|
||||
在 `hub_bridge` 安装后调用 `patch_trend_hub_enrich`,与另外三所 `install_strategy_trend` 行为一致.
|
||||
|
||||
### 7.2 补仓表「触发价 / 加仓后均价」
|
||||
|
||||
**禁止**为凑均价 **反推虚构成交价**(曾错误出现做多补仓触发价 0.3941 等离谱数值).
|
||||
|
||||
**`trend_leg_display_price`(三所唯一口径)**:
|
||||
|
||||
| 列 | 规则 |
|
||||
|----|------|
|
||||
| **触发价** | `leg_fill_prices_json` 有记录 → 实际成交价;无记录 → **计划网格价** |
|
||||
| **末档已补仓的加仓后均价** | 与顶部均价一致,取 **交易所持仓 `entry_price`**(`avg_entry_price`) |
|
||||
| **顶部均价** | 优先交易所 live `entry_price`,非计划库内估算值 |
|
||||
|
||||
修复提交:`08082eb`(移除反推成交价逻辑).
|
||||
|
||||
### 7.3 中控静态页
|
||||
|
||||
`manual_trading_hub/static/app.js`:趋势浮盈亏计算 **优先** `trendPlan.avg_entry_price`,与计划卡一致.
|
||||
|
||||
---
|
||||
|
||||
## 8. 部署与自检
|
||||
|
||||
### 8.1 升级
|
||||
|
||||
```bash
|
||||
cd /opt/crypto_monitor
|
||||
git pull # 需含 80226ee,08082eb
|
||||
pm2 restart crypto-monitor-binance crypto-monitor-okx crypto-monitor-gate manual-trading-hub
|
||||
pm2 save
|
||||
```
|
||||
|
||||
### 8.2 手动平仓后自检
|
||||
|
||||
1. 中控结束一笔测试计划(或极小仓位)
|
||||
2. **策略交易记录**:出现对应条目
|
||||
3. **交易记录与复盘**:出现 `类型=趋势回调`,`结果=手动平仓`,且 `trend_plan_id` 与计划 ID 一致
|
||||
4. 若实例 flash / 日志出现「计划已结束但记账可能不完整」,说明 `insert_trade_record` 仍失败,需查 PM2 日志
|
||||
|
||||
### 8.3 相关代码文件
|
||||
|
||||
| 文件 | 作用 |
|
||||
|------|------|
|
||||
| `strategy_trend_register.py` | `_finalize_plan`,`_call_insert_trade_record`,`enrich_trend_plan` |
|
||||
| `strategy_trend_lib.py` | `trend_leg_display_price`,`enrich_trend_dca_levels_with_tp` |
|
||||
| `strategy_snapshot_lib.py` | 策略快照写入 |
|
||||
| `hub_bridge.py` | `/api/hub/trend/stop/<pid>` |
|
||||
| `crypto_monitor_gate/app.py` | `insert_trade_record`(含 `entry_reason`) |
|
||||
| `scripts/backfill_trend_trade_records.py` | 漏记交易记录补录 |
|
||||
|
||||
### 8.4 相关提交
|
||||
|
||||
| 提交 | 说明 |
|
||||
|------|------|
|
||||
| `6a4ec69` | 中控与三所趋势展示 enrich 统一 |
|
||||
| `08082eb` | 移除补仓表反推虚构成交价 |
|
||||
| `80226ee` | 修复 中控平仓漏写 `trade_records` |
|
||||
|
||||
---
|
||||
|
||||
## 9. 相关文档
|
||||
|
||||
| 文档 | 内容 |
|
||||
|------|------|
|
||||
| [策略交易说明.md](../策略交易说明.md) | 策略总览,策略交易记录页 |
|
||||
| [crypto_monitor_gate/趋势回调策略说明.md](../crypto_monitor_gate/趋势回调策略说明.md) | 趋势回调业务细则 |
|
||||
| [manual_trading_hub/使用说明.md](../manual_trading_hub/使用说明.md) | 中控监控与趋势卡布局 |
|
||||
| [hub-symbol-archive-kline.md](./hub-symbol-archive-kline.md) | 币种档案,永久 5m K 线,交易 overlay |
|
||||
|
||||
---
|
||||
|
||||
*最后整理:2026-06-07(与对话中修复项同步)*
|
||||
|
||||
@@ -1,17 +1,17 @@
|
||||
# 趋势回调策略说明
|
||||
|
||||
本文描述 **「趋势回调」** 自动交易计划的业务规则与实现口径。
|
||||
本文描述 **「趋势回调」** 自动交易计划的业务规则与实现口径.
|
||||
|
||||
**三所主站**(Binance / Gate / OKX)均在顶栏 **策略交易 → `/strategy`** 左栏提供同一套逻辑(共用 `strategy_trend_register.py`);各所使用各自 API 与 `crypto.db`。
|
||||
**三所主站**(Binance / Gate / OKX)均在顶栏 **策略交易 → `/strategy`** 左栏提供同一套逻辑(共用 `strategy_trend_register.py`);各所使用各自 API 与 `crypto.db`.
|
||||
|
||||
**检阅备忘**(中控平仓、交易记录、补仓展示、漏记补录):[trend-hub-close-and-trade-records.md](./trend-hub-close-and-trade-records.md)
|
||||
**检阅备忘**(中控平仓,交易记录,补仓展示,漏记补录):[trend-hub-close-and-trade-records.md](./trend-hub-close-and-trade-records.md)
|
||||
|
||||
---
|
||||
|
||||
## 1. 适用场景
|
||||
|
||||
- 各 **USDT 永续** 实例独立部署,使用各自 API 与 `crypto.db`。
|
||||
- 你已明确:**方向、止损价、补仓区间边界价、止盈价、杠杆**,并接受程序按风险预算拆分 **首仓 50% + 多档补仓 50%**。
|
||||
- 各 **USDT 永续** 实例独立部署,使用各自 API 与 `crypto.db`.
|
||||
- 你已明确:**方向,止损价,补仓区间边界价,止盈价,杠杆**,并接受程序按风险预算拆分 **首仓 50% + 多档补仓 50%**.
|
||||
|
||||
---
|
||||
|
||||
@@ -19,67 +19,67 @@
|
||||
|
||||
| 名称 | 含义 |
|
||||
|------|------|
|
||||
| **合约 USDT 可用余额** | **生成预览**时通过 API 读取的 **swap 账户 USDT `free`** 快照;**确认执行**时再次读取并与快照比对偏差。 |
|
||||
| **风险比例** | 默认 **5%**:指「若整笔计划在 **补仓区间远侧边界**(做多=上沿、做空=下沿)这一侧的最坏价格结构下触及止损」,目标亏损上限约为 **可用余额快照 × 风险比例**(实现上用 `calc_risk_fraction` 与 `prepare_order_amount` 反推总张数,受交易所最小张数与精度约束)。 |
|
||||
| **止损价** | 用户填写;开仓后挂 **交易所仓位类止损触发单**(全平)。 |
|
||||
| **补仓区间边界**(库字段 `add_upper`) | 用户填写;**仅在该价位与止损价构成的区间内** 才允许程序触发剩余 50% 的市价补仓。**界面文案**:做多显示「补仓上沿」,做空显示「补仓下沿」。校验:做多 `止损 < 边界价`;做空 `止损 > 边界价`。 |
|
||||
| **止盈价** | 用户填写的 **固定价格**;**不由交易所条件止盈单触发**,由应用后台 **按标记价/行情价轮询**,达到后 **市价全平**。 |
|
||||
| **杠杆** | 计划内固定写入;用于 `set_leverage` 与名义换算。 |
|
||||
| **补仓档位数** | 默认 **5** 档(环境变量 `TREND_PULLBACK_DCA_LEGS` 可调);程序在满足最小张数前提下可能 **自动减少档数**。 |
|
||||
| **合约 USDT 可用余额** | **生成预览**时通过 API 读取的 **swap 账户 USDT `free`** 快照;**确认执行**时再次读取并与快照比对偏差. |
|
||||
| **风险比例** | 默认 **5%**:指「若整笔计划在 **补仓区间远侧边界**(做多=上沿,做空=下沿)这一侧的最坏价格结构下触及止损」,目标亏损上限约为 **可用余额快照 × 风险比例**(实现上用 `calc_risk_fraction` 与 `prepare_order_amount` 反推总张数,受交易所最小张数与精度约束). |
|
||||
| **止损价** | 用户填写;开仓后挂 **交易所仓位类止损触发单**(全平). |
|
||||
| **补仓区间边界**(库字段 `add_upper`) | 用户填写;**仅在该价位与止损价构成的区间内** 才允许程序触发剩余 50% 的市价补仓.**界面文案**:做多显示「补仓上沿」,做空显示「补仓下沿」.校验:做多 `止损 < 边界价`;做空 `止损 > 边界价`. |
|
||||
| **止盈价** | 用户填写的 **固定价格**;**不由交易所条件止盈单触发**,由应用后台 **按标记价/行情价轮询**,达到后 **市价全平**. |
|
||||
| **杠杆** | 计划内固定写入;用于 `set_leverage` 与名义换算. |
|
||||
| **补仓档位数** | 默认 **5** 档(环境变量 `TREND_PULLBACK_DCA_LEGS` 可调);程序在满足最小张数前提下可能 **自动减少档数**. |
|
||||
|
||||
---
|
||||
|
||||
## 3. 执行流程(时间顺序)
|
||||
## 3. 执行流程(时间顺序)
|
||||
|
||||
### 3.0 列表时间窗(交易记录 / 计划历史)
|
||||
### 3.0 列表时间窗(交易记录 / 计划历史)
|
||||
|
||||
- **交易记录**、**计划历史**(含预览快照)列表与 **交易记录 CSV 导出** 支持 **UTC** 时间筛选(默认 UTC 当日;可选近 24h、近 7d、自定义起止)。
|
||||
- 查询参数:`win_preset`(`utc_today` / `utc_last24h` / `utc_last7d` / `custom`)、自定义时另传 `from_utc`、`to_utc`。
|
||||
- **统计分析**页仍按北京时间 `TRADING_DAY_RESET_HOUR` 切日,不受列表窗影响。
|
||||
- **交易记录**,**计划历史**(含预览快照)列表与 **交易记录 CSV 导出** 支持 **UTC** 时间筛选(默认 UTC 当日;可选近 24h,近 7d,自定义起止).
|
||||
- 查询参数:`win_preset`(`utc_today` / `utc_last24h` / `utc_last7d` / `custom`),自定义时另传 `from_utc`,`to_utc`.
|
||||
- **统计分析**页仍按北京时间 `TRADING_DAY_RESET_HOUR` 切日,不受列表窗影响.
|
||||
|
||||
### 3.1 预览阶段(不下单)
|
||||
### 3.1 预览阶段(不下单)
|
||||
|
||||
1. **风控**:与「机器人下单监控」**互斥**——存在活跃机器人持仓或运行中趋势计划时,不可生成预览。
|
||||
2. **读取可用余额快照** `get_available_trading_usdt()`,失败则拒绝。
|
||||
3. **计算**(写入表 `trend_pullback_previews`,并跳转带 `preview_id`):
|
||||
- 在 **补仓区间边界 ↔ 止损** 区间内生成 `N` 个补仓触发价(做多从上沿向止损、做空从下沿向止损);
|
||||
- 将 **剩余 50% 计划张数** 拆成 `N` 份写入 `leg_amounts_json`。
|
||||
4. **预览有效期**:默认 **120 秒**(`TREND_PULLBACK_PREVIEW_TTL_SECONDS`),超时须重新点「生成预览」。
|
||||
1. **风控**:与「机器人下单监控」**互斥**——存在活跃机器人持仓或运行中趋势计划时,不可生成预览.
|
||||
2. **读取可用余额快照** `get_available_trading_usdt()`,失败则拒绝.
|
||||
3. **计算**(写入表 `trend_pullback_previews`,并跳转带 `preview_id`):
|
||||
- 在 **补仓区间边界 ↔ 止损** 区间内生成 `N` 个补仓触发价(做多从上沿向止损,做空从下沿向止损);
|
||||
- 将 **剩余 50% 计划张数** 拆成 `N` 份写入 `leg_amounts_json`.
|
||||
4. **预览有效期**:默认 **120 秒**(`TREND_PULLBACK_PREVIEW_TTL_SECONDS`),超时须重新点「生成预览」.
|
||||
|
||||
### 3.2 确认执行(实盘)
|
||||
### 3.2 确认执行(实盘)
|
||||
|
||||
5. 再次校验:预览未过期;**当前可用余额**与预览快照相对偏差 ≤ `TREND_PREVIEW_MAX_BALANCE_DRIFT_PCT`(默认 **5%**),否则拒绝执行并要求重新预览。
|
||||
6. **首仓**:**立即市价** 开立 **总计划张数 × 50%**(不附带交易所止盈单)。
|
||||
7. **止损**:撤销旧条件单后,挂 **仅止损** 的仓位触发单;之后每次补仓成交会 **刷新** 止损挂单。
|
||||
7b. **保本移交下单监控**(可选):首仓完成且交易所有持仓后,可点击「保本移交下单监控」——将止损移至 **持仓均价 ± 偏移%**(默认 **+0.3%** 多 / **−0.3%** 空),仅当新止损 **优于** 当前止损时生效;**本次趋势计划随即结束**,持仓写入 **下单监控**(备注 **趋势回调计划**),交易所在 **同一时刻挂保本止损 + 计划止盈**;后续无论中控平仓或交易所手动平仓,均经下单监控轮询 **`reconcile_external_closes` / `check_order_monitors`** 写入 **交易记录**(含 `trend_plan_id`、开仓类型「趋势回调」),供人工核对。
|
||||
8. **补仓**:当价格 **穿越** 下一档触发价(做多为自上向下穿越,做空为自下向上穿越)时,按该档张数 **市价加仓**;直至 `N` 档执行完毕或计划结束。
|
||||
9. **止盈监控**:后台线程若发现价格触及止盈,则 **市价全平**。
|
||||
10. **止损触发**:若仓位被交易所止损打光,本地检测到 **持仓为 0** 后记账为 **止损** 并结束计划。
|
||||
11. **计划结束**:任一结束路径(止盈 / 止损 / 用户手动结束)均会 **撤单**(条件单 + 普通挂单,尽力而为)。
|
||||
5. 再次校验:预览未过期;**当前可用余额**与预览快照相对偏差 ≤ `TREND_PREVIEW_MAX_BALANCE_DRIFT_PCT`(默认 **5%**),否则拒绝执行并要求重新预览.
|
||||
6. **首仓**:**立即市价** 开立 **总计划张数 × 50%**(不附带交易所止盈单).
|
||||
7. **止损**:撤销旧条件单后,挂 **仅止损** 的仓位触发单;之后每次补仓成交会 **刷新** 止损挂单.
|
||||
7b. **保本移交下单监控**(可选):首仓完成且交易所有持仓后,可点击「保本移交下单监控」——将止损移至 **持仓均价 ± 偏移%**(默认 **+0.3%** 多 / **−0.3%** 空),仅当新止损 **优于** 当前止损时生效;**本次趋势计划随即结束**,持仓写入 **下单监控**(备注 **趋势回调计划**),交易所在 **同一时刻挂保本止损 + 计划止盈**;后续无论中控平仓或交易所手动平仓,均经下单监控轮询 **`reconcile_external_closes` / `check_order_monitors`** 写入 **交易记录**(含 `trend_plan_id`,开仓类型「趋势回调」),供人工核对.
|
||||
8. **补仓**:当价格 **穿越** 下一档触发价(做多为自上向下穿越,做空为自下向上穿越)时,按该档张数 **市价加仓**;直至 `N` 档执行完毕或计划结束.
|
||||
9. **止盈监控**:后台线程若发现价格触及止盈,则 **市价全平**.
|
||||
10. **止损触发**:若仓位被交易所止损打光,本地检测到 **持仓为 0** 后记账为 **止损** 并结束计划.
|
||||
11. **计划结束**:任一结束路径(止盈 / 止损 / 用户手动结束)均会 **撤单**(条件单 + 普通挂单,尽力而为).
|
||||
|
||||
### 3.3 取消预览
|
||||
|
||||
用户可「取消预览」删除 `trend_pullback_previews` 中对应记录;过期记录会在新预览或页面加载时清理。
|
||||
用户可「取消预览」删除 `trend_pullback_previews` 中对应记录;过期记录会在新预览或页面加载时清理.
|
||||
|
||||
### 3.4 界面:计划历史与运行中浮动盈亏
|
||||
### 3.4 界面:计划历史与运行中浮动盈亏
|
||||
|
||||
- **计划历史(页顶卡片)**
|
||||
- 仅展示 **`trend_pullback_plans` 中已结束的计划**(`status != 'active'`,如止盈结束、止损结束、手动结束)。
|
||||
- **不包含**仅存在于 `trend_pullback_previews`、从未「确认执行」的预览。
|
||||
- 每行提供 **删除**:删除该计划行,并删除 `trade_records` 中 **`trend_plan_id` 与之相同** 且类型为「趋势回调」的记录(用于与计划一一对应的新数据;历史旧行若无 `trend_plan_id` 则不会随删)。
|
||||
- **运行中的计划(交易执行页)**
|
||||
- 在计划摘要下方展示 **浮盈亏(交易所)**:来自 Gate 当前持仓接口的 **未实现盈亏**(及标记价,若可得);与本地按均价估算可能略有差异,以交易所为准便于对照。
|
||||
- **补仓边界**按方向显示「补仓上沿」或「补仓下沿」(数值仍为 `add_upper` 字段)。
|
||||
- **手动保本**:表单可改偏移 %(默认见 `TREND_PULLBACK_MANUAL_BREAKEVEN_OFFSET_PCT`);成功后显示「已保本」时间与原止损(若与当前不同)。
|
||||
- **计划历史(页顶卡片)**
|
||||
- 仅展示 **`trend_pullback_plans` 中已结束的计划**(`status != 'active'`,如止盈结束,止损结束,手动结束).
|
||||
- **不包含**仅存在于 `trend_pullback_previews`,从未「确认执行」的预览.
|
||||
- 每行提供 **删除**:删除该计划行,并删除 `trade_records` 中 **`trend_plan_id` 与之相同** 且类型为「趋势回调」的记录(用于与计划一一对应的新数据;历史旧行若无 `trend_plan_id` 则不会随删).
|
||||
- **运行中的计划(交易执行页)**
|
||||
- 在计划摘要下方展示 **浮盈亏(交易所)**:来自 Gate 当前持仓接口的 **未实现盈亏**(及标记价,若可得);与本地按均价估算可能略有差异,以交易所为准便于对照.
|
||||
- **补仓边界**按方向显示「补仓上沿」或「补仓下沿」(数值仍为 `add_upper` 字段).
|
||||
- **手动保本**:表单可改偏移 %(默认见 `TREND_PULLBACK_MANUAL_BREAKEVEN_OFFSET_PCT`);成功后显示「已保本」时间与原止损(若与当前不同).
|
||||
|
||||
### 3.5 交易记录与交易所「已实现盈亏」对齐
|
||||
|
||||
- 平仓时仍会写入一条 **`trade_records`**(`monitor_type=趋势回调`),其中的 **`pnl_amount` 等为本地估算**(`calc_pnl`,不含手续费、资金费等完整账单口径)。
|
||||
- 打开 **「交易执行」或「交易记录」** 页面时,若已配置 **`GATE_API_KEY` / `GATE_API_SECRET`**(不要求 `LIVE_TRADING_ENABLED=true`,只读即可),应用会按节流策略(同进程约 **25 秒**内最多一次)调用 Gate **`fetch_positions_history`(平仓历史)**,为尚未写入 `exchange_sync_key` 的趋势回调记录 **匹配一条平仓记录**,并回填:
|
||||
- **`exchange_realized_pnl`**:交易所口径已实现盈亏(与 App「历史仓位」更接近);
|
||||
- **`exchange_opened_at` / `exchange_closed_at`**:换算为应用时区(默认北京)下的开、平时间字符串。
|
||||
- **交易记录表**展示列「开仓(展示) / 平仓(展示) / 盈亏U(展示)」:对「趋势回调」行,若已同步则优先显示交易所字段(界面小字 **「所」**);未同步前仍显示本地复盘字段(小字 **「估」**)。
|
||||
- 匹配规则概要:同品种、同方向、平仓时间与本地 `closed_at` 接近,并结合 **`trend_plan_id`** 对应计划的 `opened_at` 收窄时间窗;极端情况下若短时间多笔同向同品种,仍存在错配可能,可对照 `exchange_sync_key` 与交易所记录。
|
||||
- 平仓时仍会写入一条 **`trade_records`**(`monitor_type=趋势回调`),其中的 **`pnl_amount` 等为本地估算**(`calc_pnl`,不含手续费,资金费等完整账单口径).
|
||||
- 打开 **「交易执行」或「交易记录」** 页面时,若已配置 **`GATE_API_KEY` / `GATE_API_SECRET`**(不要求 `LIVE_TRADING_ENABLED=true`,只读即可),应用会按节流策略(同进程约 **25 秒**内最多一次)调用 Gate **`fetch_positions_history`(平仓历史)**,为尚未写入 `exchange_sync_key` 的趋势回调记录 **匹配一条平仓记录**,并回填:
|
||||
- **`exchange_realized_pnl`**:交易所口径已实现盈亏(与 App「历史仓位」更接近);
|
||||
- **`exchange_opened_at` / `exchange_closed_at`**:换算为应用时区(默认北京)下的开,平时间字符串.
|
||||
- **交易记录表**展示列「开仓(展示) / 平仓(展示) / 盈亏U(展示)」:对「趋势回调」行,若已同步则优先显示交易所字段(界面小字 **「所」**);未同步前仍显示本地复盘字段(小字 **「估」**).
|
||||
- 匹配规则概要:同品种,同方向,平仓时间与本地 `closed_at` 接近,并结合 **`trend_plan_id`** 对应计划的 `opened_at` 收窄时间窗;极端情况下若短时间多笔同向同品种,仍存在错配可能,可对照 `exchange_sync_key` 与交易所记录.
|
||||
|
||||
---
|
||||
|
||||
@@ -89,17 +89,17 @@
|
||||
|------|------------------|----------|
|
||||
| 开仓 | 单次市价 + 条件止盈+止损 | 首仓 50% 市价 + 多档补仓 + **仅止损在交易所** |
|
||||
| 止盈 | 条件单 + 本地监控 | **仅本地监控市价止盈** |
|
||||
| 仓位基数 | 以损定仓(表单/会话基数) | **可用余额快照 × 风险比例** 推导 |
|
||||
| 移动保本 | 支持(按 R 自动上移) | **保本移交**(结束计划→下单监控;交易所 TP+SL;**无**自动 R 保本) |
|
||||
| 仓位基数 | 以损定仓(表单/会话基数) | **可用余额快照 × 风险比例** 推导 |
|
||||
| 移动保本 | 支持(按 R 自动上移) | **保本移交**(结束计划→下单监控;交易所 TP+SL;**无**自动 R 保本) |
|
||||
|
||||
---
|
||||
|
||||
## 5. 风险声明(必读)
|
||||
## 5. 风险声明(必读)
|
||||
|
||||
- 市价单存在 **滑点**;极端行情下实际亏损可能 **大于** 理论 5%。
|
||||
- 补仓触发依赖应用 **轮询间隔**(`MONITOR_POLL_SECONDS`),非毫秒级高频。
|
||||
- 交易所 **最小张数 / 精度** 可能导致计划张数被截断,实际风险略低于或偏离纸面计算。
|
||||
- 请使用 **单独 API Key / 子账户**,并先在 `LIVE_TRADING_ENABLED=false` 环境验证流程(若需沙盒请自行对接测试网,本仓库默认实盘接口)。
|
||||
- 市价单存在 **滑点**;极端行情下实际亏损可能 **大于** 理论 5%.
|
||||
- 补仓触发依赖应用 **轮询间隔**(`MONITOR_POLL_SECONDS`),非毫秒级高频.
|
||||
- 交易所 **最小张数 / 精度** 可能导致计划张数被截断,实际风险略低于或偏离纸面计算.
|
||||
- 请使用 **单独 API Key / 子账户**,并先在 `LIVE_TRADING_ENABLED=false` 环境验证流程(若需沙盒请自行对接测试网,本仓库默认实盘接口).
|
||||
|
||||
---
|
||||
|
||||
@@ -107,23 +107,23 @@
|
||||
|
||||
| 变量 | 说明 | 默认 |
|
||||
|------|------|------|
|
||||
| `TREND_PULLBACK_MANUAL_BREAKEVEN_OFFSET_PCT` | 手动保本默认偏移(相对持仓均价,%) | `0.3` |
|
||||
| `TREND_PULLBACK_MANUAL_BREAKEVEN_OFFSET_PCT` | 手动保本默认偏移(相对持仓均价,%) | `0.3` |
|
||||
| `TREND_PULLBACK_DCA_LEGS` | 剩余 50% 拆档数量上限 | `5` |
|
||||
| `TREND_PULLBACK_PREVIEW_TTL_SECONDS` | 预览有效时间(秒) | `120` |
|
||||
| `TREND_PREVIEW_MAX_BALANCE_DRIFT_PCT` | 确认执行时允许「当前可用 / 预览快照」最大相对偏差(%) | `5` |
|
||||
| `MONITOR_POLL_SECONDS` | 监控轮询间隔(秒) | `3` |
|
||||
| `TREND_PULLBACK_PREVIEW_TTL_SECONDS` | 预览有效时间(秒) | `120` |
|
||||
| `TREND_PREVIEW_MAX_BALANCE_DRIFT_PCT` | 确认执行时允许「当前可用 / 预览快照」最大相对偏差(%) | `5` |
|
||||
| `MONITOR_POLL_SECONDS` | 监控轮询间隔(秒) | `3` |
|
||||
| `LIVE_TRADING_ENABLED` | 是否允许真实下单 | `false` |
|
||||
| `FULL_MARGIN_BUFFER_RATIO` | 计划保证金相对可用余额上限比例 | `0.98` |
|
||||
| `APP_TIMEZONE` | 应用墙钟与「北京日期」同步起点时区(如 `Asia/Shanghai`) | `Asia/Shanghai` |
|
||||
| `EXCHANGE_POSITION_SYNC_FROM_BJ` | 拉取 Gate **平仓历史** 的最早日期(`YYYY-MM-DD`,按 `APP_TIMEZONE` 当日 **00:00** 起算)。**留空**则从近 **90 天** 起拉取 | 空 |
|
||||
| `EXCHANGE_POSITION_HISTORY_LIMIT` | 单次拉取平仓历史条数上限(50–1000) | `200` |
|
||||
| `APP_TIMEZONE` | 应用墙钟与「北京日期」同步起点时区(如 `Asia/Shanghai`) | `Asia/Shanghai` |
|
||||
| `EXCHANGE_POSITION_SYNC_FROM_BJ` | 拉取 Gate **平仓历史** 的最早日期(`YYYY-MM-DD`,按 `APP_TIMEZONE` 当日 **00:00** 起算).**留空**则从近 **90 天** 起拉取 | 空 |
|
||||
| `EXCHANGE_POSITION_HISTORY_LIMIT` | 单次拉取平仓历史条数上限(50–1000) | `200` |
|
||||
|
||||
---
|
||||
|
||||
## 7. 数据库
|
||||
|
||||
- **`trend_pullback_previews`**:未执行的预览行(含 `expires_at_ms`),执行成功或取消后删除;过期可被清理。
|
||||
- **`trend_pullback_plans`**:趋势回调计划。执行后写入一行,`status='active'` 表示运行中;止盈 / 止损 / 手动结束后变为 **`stopped_tp` / `stopped_sl` / `stopped_manual`** 等非 `active` 状态,并出现在页顶 **计划历史**。字段含快照可用余额、计划保证金、总张数、首仓张数、补仓 JSON、网格价 JSON、已补仓档数、均价、`opened_at`、`message`(结束说明)等;**`add_upper`** 存补仓区间远侧边界价(做多=上沿、做空=下沿)。
|
||||
- **`trade_records`**(`monitor_type=趋势回调`):每次计划结束插入一行;含本地估算盈亏等。新写入行带 **`trend_plan_id`** 指向 `trend_pullback_plans.id`。另含 **`exchange_realized_pnl`、`exchange_opened_at`、`exchange_closed_at`、`exchange_sync_key`**,由页面触发的交易所平仓历史同步填充(见 3.5)。
|
||||
- **`trend_pullback_previews`**:未执行的预览行(含 `expires_at_ms`),执行成功或取消后删除;过期可被清理.
|
||||
- **`trend_pullback_plans`**:趋势回调计划.执行后写入一行,`status='active'` 表示运行中;止盈 / 止损 / 手动结束后变为 **`stopped_tp` / `stopped_sl` / `stopped_manual`** 等非 `active` 状态,并出现在页顶 **计划历史**.字段含快照可用余额,计划保证金,总张数,首仓张数,补仓 JSON,网格价 JSON,已补仓档数,均价,`opened_at`,`message`(结束说明)等;**`add_upper`** 存补仓区间远侧边界价(做多=上沿,做空=下沿).
|
||||
- **`trade_records`**(`monitor_type=趋势回调`):每次计划结束插入一行;含本地估算盈亏等.新写入行带 **`trend_plan_id`** 指向 `trend_pullback_plans.id`.另含 **`exchange_realized_pnl`,`exchange_opened_at`,`exchange_closed_at`,`exchange_sync_key`**,由页面触发的交易所平仓历史同步填充(见 3.5).
|
||||
|
||||
**CSV 导出**:交易记录导出为 **v3**,包含上述交易所对齐字段及 `trend_plan_id`。
|
||||
**CSV 导出**:交易记录导出为 **v3**,包含上述交易所对齐字段及 `trend_plan_id`.
|
||||
|
||||
+169
-169
@@ -1,169 +1,169 @@
|
||||
# Ubuntu 服务器部署与环境说明
|
||||
|
||||
本文档为 **生产环境唯一推荐路径**:**Ubuntu**、**root** 用户、代码目录 **`/opt/crypto_monitor`**、进程托管 **PM2**。不使用 Windows 部署、不使用 systemd/screen/nohup 托管应用(SSH 隧道除外)。
|
||||
|
||||
---
|
||||
|
||||
## 1. 系统要求
|
||||
|
||||
| 项 | 要求 |
|
||||
|----|------|
|
||||
| 操作系统 | **Ubuntu 22.04 LTS** 或 **24.04 LTS**(64 位) |
|
||||
| 运行用户 | **root**(下文命令均按 root 编写) |
|
||||
| 项目路径 | **`/opt/crypto_monitor`**(整仓克隆到此目录) |
|
||||
| 进程管理 | **PM2**(全局安装,见 §3) |
|
||||
| 网络 | 能 `git clone` 私有仓库;访问交易所不稳定时需 **SSH SOCKS**(见各所《部署文档》) |
|
||||
|
||||
---
|
||||
|
||||
## 2. Python 环境
|
||||
|
||||
| 项 | 说明 |
|
||||
|----|------|
|
||||
| **版本** | **Python 3.10 或 3.11**(`python3 --version` ≥ 3.10);脚本会拒绝 3.9 及以下 |
|
||||
| **虚拟环境** | 每个子项目独立 **`.venv`**(`deploy/setup_env.sh` 自动创建) |
|
||||
| **依赖文件** | 三所监控共用仓库根目录 **`requirements.txt`**;中控用 **`manual_trading_hub/requirements.txt`** |
|
||||
| **SOCKS** | 走代理时必须安装 **PySocks**(已写入 requirements) |
|
||||
|
||||
### 2.1 系统包(root)
|
||||
|
||||
```bash
|
||||
apt update
|
||||
apt install -y python3 python3-pip python3-venv curl git ca-certificates
|
||||
# 若 python3 为 3.10:
|
||||
apt install -y python3.10-venv
|
||||
# 若为 3.12:
|
||||
apt install -y python3.12-venv
|
||||
```
|
||||
|
||||
### 2.2 一键创建各目录 venv
|
||||
|
||||
```bash
|
||||
cd /opt/crypto_monitor
|
||||
bash deploy/setup_env.sh --install-system-deps
|
||||
# 或已是 root 且已装 venv 包:
|
||||
bash deploy/setup_env.sh
|
||||
```
|
||||
|
||||
完成后各目录使用 **`.venv/bin/python`** 运行 `app.py` / `hub.py`;**PM2 的 ecosystem 脚本已指向该解释器**。
|
||||
|
||||
---
|
||||
|
||||
## 3. Node.js 与 PM2
|
||||
|
||||
| 项 | 说明 |
|
||||
|----|------|
|
||||
| **Node.js** | 建议 **18 LTS** 或 **20 LTS**(用于安装 PM2;应用本体为 Python) |
|
||||
| **PM2** | 全局安装,托管所有 Flask 与中控/子代理 |
|
||||
|
||||
### 3.1 安装 Node + PM2(root)
|
||||
|
||||
```bash
|
||||
# 方式 A:NodeSource(示例 Node 20)
|
||||
curl -fsSL https://deb.nodesource.com/setup_20.x | bash -
|
||||
apt install -y nodejs
|
||||
node -v # v20.x
|
||||
npm -v
|
||||
|
||||
npm install -g pm2
|
||||
pm2 -v
|
||||
pm2 startup # 按提示执行,保证重启后 PM2 自启
|
||||
```
|
||||
|
||||
`deploy/setup_env.sh` 在检测到 Node 时也会尝试 `npm install -g pm2`(未装 Node 则跳过并提示手动安装)。
|
||||
|
||||
### 3.2 PM2 启动顺序(推荐)
|
||||
|
||||
```bash
|
||||
# 1) 三所 Flask(在各子目录执行,或分别 start)
|
||||
cd /opt/crypto_monitor/crypto_monitor_binance && pm2 start ecosystem.config.cjs
|
||||
cd /opt/crypto_monitor/crypto_monitor_gate && pm2 start ecosystem.config.cjs
|
||||
cd /opt/crypto_monitor/crypto_monitor_okx && pm2 start ecosystem.config.cjs
|
||||
|
||||
# 2) 中控 + 三子代理(一条配置 4 进程:hub + 3 agent)
|
||||
cd /opt/crypto_monitor/manual_trading_hub
|
||||
pm2 start ecosystem.config.cjs
|
||||
|
||||
pm2 save
|
||||
pm2 list
|
||||
```
|
||||
|
||||
升级代码后:
|
||||
|
||||
```bash
|
||||
cd /opt/crypto_monitor && git pull
|
||||
# 若 requirements 有变,对各目录 .venv/bin/pip install -r ...
|
||||
pm2 restart all # 或按进程名 restart
|
||||
```
|
||||
|
||||
**不要** 再用 systemd unit、screen、nohup 启动 `app.py` / `hub.py` / `agent.py`,避免与 PM2 抢端口。
|
||||
|
||||
### 3.3 常见 PM2 进程名
|
||||
|
||||
| 目录 | ecosystem 内典型名称 |
|
||||
|------|---------------------|
|
||||
| `crypto_monitor_binance` | `crypto_binance` |
|
||||
| `crypto_monitor_gate` | `crypto_gate` |
|
||||
| `crypto_monitor_okx` | `crypto_okx` |
|
||||
| `manual_trading_hub` | `manual-trading-hub`、`manual-agent-*` |
|
||||
|
||||
以各目录 **`ecosystem.config.cjs`** 为准。
|
||||
|
||||
### 3.4 整目录重装(清库 / 去脏 PM2)
|
||||
|
||||
保留 `.env`、丢弃旧库与旧 PM2 名单时,见 **[deploy/reinstall-plan-b.md](../deploy/reinstall-plan-b.md)**:
|
||||
|
||||
```bash
|
||||
cd /opt/crypto_monitor
|
||||
bash deploy/reinstall.sh --yes
|
||||
```
|
||||
|
||||
首次安装仍只用 `deploy/setup_env.sh`,二者互不影响。
|
||||
|
||||
---
|
||||
|
||||
## 4. 目录与权限
|
||||
|
||||
```bash
|
||||
mkdir -p /opt
|
||||
cd /opt
|
||||
git clone https://git.bz121.com/dekun/crypto_monitor.git crypto_monitor
|
||||
chown -R root:root /opt/crypto_monitor
|
||||
```
|
||||
|
||||
- 数据库默认:各所 **`crypto.db`**(SQLite)
|
||||
- 备份目录建议:**`/root/backups`**(见 [备份与恢复.md](../备份与恢复.md))
|
||||
- **`.env`**:仅本机编辑,**勿提交 Git**;升级前 `cp .env .env.backup.$(date +%Y%m%d)`
|
||||
|
||||
---
|
||||
|
||||
## 5. SSH 动态转发(SOCKS)
|
||||
|
||||
若交易所 API 需经境外 VPS:
|
||||
|
||||
- 在本机用 **`ssh -N -D 127.0.0.1:1080 别名`** 建立隧道(配置见各所《部署文档》`~/.ssh/config`)
|
||||
- 隧道进程可用 **tmux** 或 **autossh** 保持常驻;**不必** 也不建议把 `ssh` 交给 PM2
|
||||
- 各所 `.env` 设置对应 `*_SOCKS_PROXY=socks5h://127.0.0.1:1080`
|
||||
|
||||
---
|
||||
|
||||
## 6. 部署后检查
|
||||
|
||||
```bash
|
||||
# 中控验收(需已 start hub)
|
||||
bash /opt/crypto_monitor/manual_trading_hub/scripts/verify_hub_deploy.sh
|
||||
|
||||
pm2 logs manual-trading-hub --lines 50
|
||||
curl -sS http://127.0.0.1:5100/api/monitor/board | head
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 7. 相关文档
|
||||
|
||||
| 文档 | 内容 |
|
||||
|------|------|
|
||||
| [deploy/README.md](../deploy/README.md) | `setup_env.sh` 参数说明 |
|
||||
| [备份与恢复.md](../备份与恢复.md) | 数据库与 `.env` 备份 |
|
||||
| 各 `crypto_monitor_*/部署文档.md` | 交易所 SOCKS、`.env`、PM2 细节 |
|
||||
| [manual_trading_hub/部署文档.md](../manual_trading_hub/部署文档.md) | 中控 PM2、端口、反代 |
|
||||
# Ubuntu 服务器部署与环境说明
|
||||
|
||||
本文档为 **生产环境唯一推荐路径**:**Ubuntu**,**root** 用户,代码目录 **`/opt/crypto_monitor`**,进程托管 **PM2**.不使用 Windows 部署,不使用 systemd/screen/nohup 托管应用(SSH 隧道除外).
|
||||
|
||||
---
|
||||
|
||||
## 1. 系统要求
|
||||
|
||||
| 项 | 要求 |
|
||||
|----|------|
|
||||
| 操作系统 | **Ubuntu 22.04 LTS** 或 **24.04 LTS**(64 位) |
|
||||
| 运行用户 | **root**(下文命令均按 root 编写) |
|
||||
| 项目路径 | **`/opt/crypto_monitor`**(整仓克隆到此目录) |
|
||||
| 进程管理 | **PM2**(全局安装,见 §3) |
|
||||
| 网络 | 能 `git clone` 私有仓库;访问交易所不稳定时需 **SSH SOCKS**(见各所《部署文档》) |
|
||||
|
||||
---
|
||||
|
||||
## 2. Python 环境
|
||||
|
||||
| 项 | 说明 |
|
||||
|----|------|
|
||||
| **版本** | **Python 3.10 或 3.11**(`python3 --version` ≥ 3.10);脚本会拒绝 3.9 及以下 |
|
||||
| **虚拟环境** | 每个子项目独立 **`.venv`**(`deploy/setup_env.sh` 自动创建) |
|
||||
| **依赖文件** | 三所监控共用仓库根目录 **`requirements.txt`**;中控用 **`manual_trading_hub/requirements.txt`** |
|
||||
| **SOCKS** | 走代理时必须安装 **PySocks**(已写入 requirements) |
|
||||
|
||||
### 2.1 系统包(root)
|
||||
|
||||
```bash
|
||||
apt update
|
||||
apt install -y python3 python3-pip python3-venv curl git ca-certificates
|
||||
# 若 python3 为 3.10:
|
||||
apt install -y python3.10-venv
|
||||
# 若为 3.12:
|
||||
apt install -y python3.12-venv
|
||||
```
|
||||
|
||||
### 2.2 一键创建各目录 venv
|
||||
|
||||
```bash
|
||||
cd /opt/crypto_monitor
|
||||
bash deploy/setup_env.sh --install-system-deps
|
||||
# 或已是 root 且已装 venv 包:
|
||||
bash deploy/setup_env.sh
|
||||
```
|
||||
|
||||
完成后各目录使用 **`.venv/bin/python`** 运行 `app.py` / `hub.py`;**PM2 的 ecosystem 脚本已指向该解释器**.
|
||||
|
||||
---
|
||||
|
||||
## 3. Node.js 与 PM2
|
||||
|
||||
| 项 | 说明 |
|
||||
|----|------|
|
||||
| **Node.js** | 建议 **18 LTS** 或 **20 LTS**(用于安装 PM2;应用本体为 Python) |
|
||||
| **PM2** | 全局安装,托管所有 Flask 与中控/子代理 |
|
||||
|
||||
### 3.1 安装 Node + PM2(root)
|
||||
|
||||
```bash
|
||||
# 方式 A:NodeSource(示例 Node 20)
|
||||
curl -fsSL https://deb.nodesource.com/setup_20.x | bash -
|
||||
apt install -y nodejs
|
||||
node -v # v20.x
|
||||
npm -v
|
||||
|
||||
npm install -g pm2
|
||||
pm2 -v
|
||||
pm2 startup # 按提示执行,保证重启后 PM2 自启
|
||||
```
|
||||
|
||||
`deploy/setup_env.sh` 在检测到 Node 时也会尝试 `npm install -g pm2`(未装 Node 则跳过并提示手动安装).
|
||||
|
||||
### 3.2 PM2 启动顺序(推荐)
|
||||
|
||||
```bash
|
||||
# 1) 三所 Flask(在各子目录执行,或分别 start)
|
||||
cd /opt/crypto_monitor/crypto_monitor_binance && pm2 start ecosystem.config.cjs
|
||||
cd /opt/crypto_monitor/crypto_monitor_gate && pm2 start ecosystem.config.cjs
|
||||
cd /opt/crypto_monitor/crypto_monitor_okx && pm2 start ecosystem.config.cjs
|
||||
|
||||
# 2) 中控 + 三子代理(一条配置 4 进程:hub + 3 agent)
|
||||
cd /opt/crypto_monitor/manual_trading_hub
|
||||
pm2 start ecosystem.config.cjs
|
||||
|
||||
pm2 save
|
||||
pm2 list
|
||||
```
|
||||
|
||||
升级代码后:
|
||||
|
||||
```bash
|
||||
cd /opt/crypto_monitor && git pull
|
||||
# 若 requirements 有变,对各目录 .venv/bin/pip install -r ...
|
||||
pm2 restart all # 或按进程名 restart
|
||||
```
|
||||
|
||||
**不要** 再用 systemd unit,screen,nohup 启动 `app.py` / `hub.py` / `agent.py`,避免与 PM2 抢端口.
|
||||
|
||||
### 3.3 常见 PM2 进程名
|
||||
|
||||
| 目录 | ecosystem 内典型名称 |
|
||||
|------|---------------------|
|
||||
| `crypto_monitor_binance` | `crypto_binance` |
|
||||
| `crypto_monitor_gate` | `crypto_gate` |
|
||||
| `crypto_monitor_okx` | `crypto_okx` |
|
||||
| `manual_trading_hub` | `manual-trading-hub`,`manual-agent-*` |
|
||||
|
||||
以各目录 **`ecosystem.config.cjs`** 为准.
|
||||
|
||||
### 3.4 整目录重装(清库 / 去脏 PM2)
|
||||
|
||||
保留 `.env`,丢弃旧库与旧 PM2 名单时,见 **[deploy/reinstall-plan-b.md](../deploy/reinstall-plan-b.md)**:
|
||||
|
||||
```bash
|
||||
cd /opt/crypto_monitor
|
||||
bash deploy/reinstall.sh --yes
|
||||
```
|
||||
|
||||
首次安装仍只用 `deploy/setup_env.sh`,二者互不影响.
|
||||
|
||||
---
|
||||
|
||||
## 4. 目录与权限
|
||||
|
||||
```bash
|
||||
mkdir -p /opt
|
||||
cd /opt
|
||||
git clone https://git.bz121.com/dekun/crypto_monitor.git crypto_monitor
|
||||
chown -R root:root /opt/crypto_monitor
|
||||
```
|
||||
|
||||
- 数据库默认:各所 **`crypto.db`**(SQLite)
|
||||
- 备份目录建议:**`/root/backups`**(见 [备份与恢复.md](../备份与恢复.md))
|
||||
- **`.env`**:仅本机编辑,**勿提交 Git**;升级前 `cp .env .env.backup.$(date +%Y%m%d)`
|
||||
|
||||
---
|
||||
|
||||
## 5. SSH 动态转发(SOCKS)
|
||||
|
||||
若交易所 API 需经境外 VPS:
|
||||
|
||||
- 在本机用 **`ssh -N -D 127.0.0.1:1080 别名`** 建立隧道(配置见各所《部署文档》`~/.ssh/config`)
|
||||
- 隧道进程可用 **tmux** 或 **autossh** 保持常驻;**不必** 也不建议把 `ssh` 交给 PM2
|
||||
- 各所 `.env` 设置对应 `*_SOCKS_PROXY=socks5h://127.0.0.1:1080`
|
||||
|
||||
---
|
||||
|
||||
## 6. 部署后检查
|
||||
|
||||
```bash
|
||||
# 中控验收(需已 start hub)
|
||||
bash /opt/crypto_monitor/manual_trading_hub/scripts/verify_hub_deploy.sh
|
||||
|
||||
pm2 logs manual-trading-hub --lines 50
|
||||
curl -sS http://127.0.0.1:5100/api/monitor/board | head
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 7. 相关文档
|
||||
|
||||
| 文档 | 内容 |
|
||||
|------|------|
|
||||
| [deploy/README.md](../deploy/README.md) | `setup_env.sh` 参数说明 |
|
||||
| [备份与恢复.md](../备份与恢复.md) | 数据库与 `.env` 备份 |
|
||||
| 各 `crypto_monitor_*/部署文档.md` | 交易所 SOCKS,`.env`,PM2 细节 |
|
||||
| [manual_trading_hub/部署文档.md](../manual_trading_hub/部署文档.md) | 中控 PM2,端口,反代 |
|
||||
|
||||
+25
-25
@@ -1,6 +1,6 @@
|
||||
# 中控 AI 与部署密钥配置
|
||||
|
||||
本文档说明:**长期部署密钥**(一次生成、不轮换)、**SSO 临时链接**(保持不动)、以及 **AI 配置**(中控统一维护并同步三所)。
|
||||
本文档说明:**长期部署密钥**(一次生成,不轮换),**SSO 临时链接**(保持不动),以及 **AI 配置**(中控统一维护并同步三所).
|
||||
|
||||
---
|
||||
|
||||
@@ -8,19 +8,19 @@
|
||||
|
||||
| 类型 | 变量 / 机制 | 谁维护 | 是否自动过期 |
|
||||
|------|-------------|--------|--------------|
|
||||
| **长期通信密钥** | `HUB_BRIDGE_TOKEN` | 部署脚本首次写入四份 `.env` | 否,不轮换 |
|
||||
| **长期通信密钥** | `HUB_BRIDGE_TOKEN` | 部署脚本首次写入四份 `.env` | 否,不轮换 |
|
||||
| **实例 Session 签名** | `FLASK_SECRET_KEY` | 部署脚本首次写入三实例 | 否 |
|
||||
| **中控 Session 签名** | `HUB_SESSION_SECRET` | 部署脚本首次写入中控 | 否 |
|
||||
| **SSO 开门链接** | `/hub-sso?token=...` | 中控每次点「打开实例」签发 | 默认 2h + 单次 |
|
||||
| **AI 配置** | `OPENAI_*`、`AI_*` 等 | 中控系统设置 → AI 配置 | 否 |
|
||||
| **AI 配置** | `OPENAI_*`,`AI_*` 等 | 中控系统设置 → AI 配置 | 否 |
|
||||
|
||||
**SSO 保持不动**:仍为随机 nonce、默认 `HUB_SSO_TTL_SEC=7200`、成功登录一次后链接作废。长期 `HUB_BRIDGE_TOKEN` 只用于签名,不会每 2 小时变化。
|
||||
**SSO 保持不动**:仍为随机 nonce,默认 `HUB_SSO_TTL_SEC=7200`,成功登录一次后链接作废.长期 `HUB_BRIDGE_TOKEN` 只用于签名,不会每 2 小时变化.
|
||||
|
||||
---
|
||||
|
||||
## 2. 首次部署自动生成
|
||||
|
||||
`bash deploy/setup_env.sh` 在复制 `.env.example` 后自动执行:
|
||||
`bash deploy/setup_env.sh` 在复制 `.env.example` 后自动执行:
|
||||
|
||||
```bash
|
||||
python3 scripts/bootstrap_deploy_secrets.py
|
||||
@@ -28,21 +28,21 @@ python3 scripts/bootstrap_deploy_secrets.py
|
||||
|
||||
| 写入项 | 位置 | 规则 |
|
||||
|--------|------|------|
|
||||
| `HUB_BRIDGE_TOKEN` | 中控 + 三实例(同值) | 仅空或占位符时写入 |
|
||||
| `FLASK_SECRET_KEY` | 三实例(同值) | 仅空或占位符时写入 |
|
||||
| `HUB_BRIDGE_TOKEN` | 中控 + 三实例(同值) | 仅空或占位符时写入 |
|
||||
| `FLASK_SECRET_KEY` | 三实例(同值) | 仅空或占位符时写入 |
|
||||
| `HUB_SESSION_SECRET` | 中控 | 仅空时写入 |
|
||||
| `HUB_USERNAME` / `HUB_PASSWORD` | 中控 | 默认 admin / admin123(仅空时) |
|
||||
| `APP_USERNAME` / `APP_PASSWORD` | 三实例 | 默认 admin / admin123(仅空时) |
|
||||
| `HUB_USERNAME` / `HUB_PASSWORD` | 中控 | 默认 admin / admin123(仅空时) |
|
||||
| `APP_USERNAME` / `APP_PASSWORD` | 三实例 | 默认 admin / admin123(仅空时) |
|
||||
|
||||
**已有非空生产值不会被覆盖**(一次生成、不轮换)。
|
||||
**已有非空生产值不会被覆盖**(一次生成,不轮换).
|
||||
|
||||
子代理 `agent.py` 优先读取 `HUB_BRIDGE_TOKEN` 作为 `X-Control-Token` 校验;独立配置 `CONTROL_TOKEN` 已废弃。
|
||||
子代理 `agent.py` 优先读取 `HUB_BRIDGE_TOKEN` 作为 `X-Control-Token` 校验;独立配置 `CONTROL_TOKEN` 已废弃.
|
||||
|
||||
---
|
||||
|
||||
## 3. 中控系统设置 → AI 配置
|
||||
|
||||
路径:**中控 Web → 系统设置 → AI 配置** Tab。
|
||||
路径:**中控 Web → 系统设置 → AI 配置** Tab.
|
||||
|
||||
### 3.1 可配置项
|
||||
|
||||
@@ -50,34 +50,34 @@ python3 scripts/bootstrap_deploy_secrets.py
|
||||
|--------|----------|
|
||||
| AI 提供方 | `AI_PROVIDER` |
|
||||
| API 地址 | `OPENAI_API_BASE` |
|
||||
| API 密钥 | `OPENAI_API_KEY`(掩码,留空不修改) |
|
||||
| API 密钥 | `OPENAI_API_KEY`(掩码,留空不修改) |
|
||||
| 云端模型 | `OPENAI_MODEL` |
|
||||
| Ollama 地址 | `OLLAMA_API` |
|
||||
| Ollama 模型 | `AI_MODEL` |
|
||||
| 请求超时(秒) | `AI_TIMEOUT_SECONDS` |
|
||||
| 请求超时(秒) | `AI_TIMEOUT_SECONDS` |
|
||||
|
||||
### 3.2 保存行为
|
||||
|
||||
1. 写入 `manual_trading_hub/.env`
|
||||
2. **强制同步** 至 `crypto_monitor_okx/binance/gate/.env` 相同键
|
||||
3. 自动 `pm2 restart` 中控 + 三实例(`--update-env`)
|
||||
3. 自动 `pm2 restart` 中控 + 三实例(`--update-env`)
|
||||
|
||||
### 3.3 API(需已登录中控)
|
||||
### 3.3 API(需已登录中控)
|
||||
|
||||
| 方法 | 路径 | 说明 |
|
||||
|------|------|------|
|
||||
| GET | `/api/settings/ai-env` | 读取字段与三所同步状态 |
|
||||
| POST | `/api/settings/ai-env` | body: `{ "values": {...}, "restart": true }` |
|
||||
|
||||
实现:`lib/env/shared_env_lib.py`、`manual_trading_hub/hub_env_lib.py`。
|
||||
实现:`lib/env/shared_env_lib.py`,`manual_trading_hub/hub_env_lib.py`.
|
||||
|
||||
---
|
||||
|
||||
## 4. 实例 env 配置页变更
|
||||
|
||||
三所 **env 配置** 页已 **移除「AI 复盘」卡片**。交易所 API、企业微信、交易执行等仍各所自配。
|
||||
三所 **env 配置** 页已 **移除「AI 复盘」卡片**.交易所 API,企业微信,交易执行等仍各所自配.
|
||||
|
||||
实例侧若通过 API 提交已移除的 AI 键,会被白名单过滤,不会写入。
|
||||
实例侧若通过 API 提交已移除的 AI 键,会被白名单过滤,不会写入.
|
||||
|
||||
---
|
||||
|
||||
@@ -86,18 +86,18 @@ python3 scripts/bootstrap_deploy_secrets.py
|
||||
| 能力 | 实例 env | 实例系统设置 | 中控系统设置 |
|
||||
|------|----------|--------------|--------------|
|
||||
| 交易所 API | ✅ | ❌ | ❌ |
|
||||
| OpenAI / AI | ❌ | ❌ | ✅(同步三所) |
|
||||
| OpenAI / AI | ❌ | ❌ | ✅(同步三所) |
|
||||
| 实例登录密码 | ❌ | ✅ | ❌ |
|
||||
| 中控登录密码 | ❌ | ❌ | ✅ |
|
||||
| Bridge / Flask 长期密钥 | ❌(自动) | ❌ | ❌(自动) |
|
||||
| Bridge / Flask 长期密钥 | ❌(自动) | ❌ | ❌(自动) |
|
||||
| SSO 链接 | — | — | 每次打开实例自动签发 |
|
||||
|
||||
---
|
||||
|
||||
## 6. 运维提示
|
||||
|
||||
- 修改 AI 后若未自动重启成功,手动:`pm2 restart manual-trading-hub crypto_okx crypto_binance crypto_gate --update-env`
|
||||
- 三所 AI 不一致时,中控 AI 配置页会提示「未完全同步」;点 **保存并同步** 即可对齐
|
||||
- 备份包可选包含各 `.env`(中控设置 → 备份恢复)
|
||||
- 修改 AI 后若未自动重启成功,手动:`pm2 restart manual-trading-hub crypto_okx crypto_binance crypto_gate --update-env`
|
||||
- 三所 AI 不一致时,中控 AI 配置页会提示「未完全同步」;点 **保存并同步** 即可对齐
|
||||
- 备份包可选包含各 `.env`(中控设置 → 备份恢复)
|
||||
|
||||
相关文档:[env配置说明.md](./env配置说明.md)、[系统设置说明.md](./系统设置说明.md)、[manual_trading_hub/局域网与反代部署说明.md](../manual_trading_hub/局域网与反代部署说明.md)(SSO 2h 说明)
|
||||
相关文档:[env配置说明.md](./env配置说明.md),[系统设置说明.md](./系统设置说明.md),[manual_trading_hub/局域网与反代部署说明.md](../manual_trading_hub/局域网与反代部署说明.md)(SSO 2h 说明)
|
||||
|
||||
+35
-35
@@ -1,37 +1,37 @@
|
||||
# OKX 期权模块 — 技术方案
|
||||
|
||||
> 适用范围:`crypto_monitor_okx` 实例;与永续子账户并行,不新增 PM2 进程。
|
||||
> 适用范围:`crypto_monitor_okx` 实例;与永续子账户并行,不新增 PM2 进程.
|
||||
|
||||
## 1. 目标
|
||||
|
||||
在现有 OKX 监控实例中增加 **USDⓈ 本位期权(买方)** 能力:
|
||||
在现有 OKX 监控实例中增加 **USDⓈ 本位期权(买方)** 能力:
|
||||
|
||||
- 永续/关键位:继续走 **子账户 API-A**(现有 `OKX_API_*`)
|
||||
- 期权:走 **主账户 API-B**(`OKX_OPTIONS_API_*`)
|
||||
- 资金展示对齐 OKX:**资金账户 / 交易账户**,分币种显示 USDT、USDC、USDG
|
||||
- 永续/关键位:继续走 **子账户 API-A**(现有 `OKX_API_*`)
|
||||
- 期权:走 **主账户 API-B**(`OKX_OPTIONS_API_*`)
|
||||
- 资金展示对齐 OKX:**资金账户 / 交易账户**,分币种显示 USDT,USDC,USDG
|
||||
- 支持 **手动 USDT→USDC 兑换** 与 **USDC 账户划转**
|
||||
- **无总资金池上限**;单笔权利金上限可配置(默认 10 USDC)
|
||||
- **无总资金池上限**;单笔权利金上限可配置(默认 10 USDC)
|
||||
|
||||
## 2. 交易规则(硬约束)
|
||||
## 2. 交易规则(硬约束)
|
||||
|
||||
| 规则 | 说明 |
|
||||
|------|------|
|
||||
| 仅买方 | 开仓 `buy`,平仓 `sell`;禁止卖方开仓 |
|
||||
| 产品 | `BTC-USD_UM` / `ETH-USD_UM`(线性、USDC/USDG 结算) |
|
||||
| 到期 | 仅展示 ≤2 日到期合约(可配置 `OKX_OPTIONS_MAX_DTE_DAYS`) |
|
||||
| 虚实 | 仅 **轻度实值**(`OKX_OPTIONS_ITM_ONLY`) |
|
||||
| 合约规格 | **1 张 = 0.01 ETH/BTC**(`ctMult=0.01`,以接口为准) |
|
||||
| 仅买方 | 开仓 `buy`,平仓 `sell`;禁止卖方开仓 |
|
||||
| 产品 | `BTC-USD_UM` / `ETH-USD_UM`(线性,USDC/USDG 结算) |
|
||||
| 到期 | 仅展示 ≤2 日到期合约(可配置 `OKX_OPTIONS_MAX_DTE_DAYS`) |
|
||||
| 虚实 | 仅 **轻度实值**(`OKX_OPTIONS_ITM_ONLY`) |
|
||||
| 合约规格 | **1 张 = 0.01 ETH/BTC**(`ctMult=0.01`,以接口为准) |
|
||||
| 报价单位 | 盘口 ask/bid = **每 1 ETH/BTC** 的 USD 价 |
|
||||
| 权利金 | `总权利金 = 报价 × ETH数量`;`张数 = ETH数量 / 0.01` |
|
||||
| 单笔预算 | `≤ OKX_OPTIONS_TRADE_BUDGET_USDC`(默认 10),算张数 × `OKX_OPTIONS_BUDGET_BUFFER`(默认 0.95) |
|
||||
| 开仓 | 限价买单,价格 = 卖一 |
|
||||
| 平仓 | 限价卖单,价格 = 买一(市价需显式开启且二次确认) |
|
||||
| 权利金 | `总权利金 = 报价 × ETH数量`;`张数 = ETH数量 / 0.01` |
|
||||
| 单笔预算 | `≤ OKX_OPTIONS_TRADE_BUDGET_USDC`(默认 10),算张数 × `OKX_OPTIONS_BUDGET_BUFFER`(默认 0.95) |
|
||||
| 开仓 | 限价买单,价格 = 卖一 |
|
||||
| 平仓 | 限价卖单,价格 = 买一(市价需显式开启且二次确认) |
|
||||
| 监控 | 浮盈 / 已付权利金 ≥ 100% → 企业微信推送一次 |
|
||||
|
||||
## 3. 架构
|
||||
|
||||
```
|
||||
crypto_okx(单 PM2)
|
||||
crypto_okx(单 PM2)
|
||||
├── exchange (swap) ← OKX_API_* 子账户
|
||||
└── exchange_options ← OKX_OPTIONS_API_* 主账户
|
||||
|
||||
@@ -43,25 +43,25 @@ lib/options/
|
||||
└── options_register.py # 路由 + 监控线程
|
||||
```
|
||||
|
||||
**隔离:** 期权模块只调用 `exchange_options`;永续逻辑只调用 `exchange`。
|
||||
**隔离:** 期权模块只调用 `exchange_options`;永续逻辑只调用 `exchange`.
|
||||
|
||||
## 4. 资金与兑换
|
||||
|
||||
### 4.1 展示(期权页顶栏)
|
||||
### 4.1 展示(期权页顶栏)
|
||||
|
||||
| 账户 | 币种 |
|
||||
|------|------|
|
||||
| 资金账户 | USDT、USDC(若有) |
|
||||
| 交易账户 | USDT、USDC、USDG(若有) |
|
||||
| 资金账户 | USDT,USDC(若有) |
|
||||
| 交易账户 | USDT,USDC,USDG(若有) |
|
||||
|
||||
不展示「练手池」等抽象记账名称。
|
||||
不展示「练手池」等抽象记账名称.
|
||||
|
||||
### 4.2 推荐操作流程
|
||||
|
||||
```
|
||||
资金账户 USDT
|
||||
→ [手动兑换 USDT→USDC](OKX Convert API,资金账户内)
|
||||
→ [划转到交易账户](USDC)
|
||||
→ [手动兑换 USDT→USDC](OKX Convert API,资金账户内)
|
||||
→ [划转到交易账户](USDC)
|
||||
→ 交易账户 USDC
|
||||
→ [限价买入期权]
|
||||
```
|
||||
@@ -70,12 +70,12 @@ lib/options/
|
||||
|
||||
| 接口 | OKX |
|
||||
|------|-----|
|
||||
| 余额 | `fetch_balance`(funding / trading)+ `GET /api/v5/asset/balances` |
|
||||
| 余额 | `fetch_balance`(funding / trading)+ `GET /api/v5/asset/balances` |
|
||||
| 询价兑换 | `POST /api/v5/asset/convert/estimate-quote` |
|
||||
| 确认兑换 | `POST /api/v5/asset/convert/trade` |
|
||||
| 划转 | `exchange.transfer(ccy, amt, from, to)` |
|
||||
|
||||
## 5. 配置项(`.env`)
|
||||
## 5. 配置项(`.env`)
|
||||
|
||||
```bash
|
||||
OKX_OPTIONS_ENABLED=false
|
||||
@@ -95,17 +95,17 @@ OKX_OPTIONS_TD_MODE=cross
|
||||
OKX_OPTIONS_ALLOW_MARKET_CLOSE=false
|
||||
```
|
||||
|
||||
修改 `.env` 后须 `pm2 restart crypto_okx`。
|
||||
修改 `.env` 后须 `pm2 restart crypto_okx`.
|
||||
|
||||
## 6. 数据库
|
||||
|
||||
### `options_trades`
|
||||
|
||||
记录本地开仓/平仓、权利金、翻倍提醒状态。
|
||||
记录本地开仓/平仓,权利金,翻倍提醒状态.
|
||||
|
||||
### `options_convert_log` / `options_transfer_log`
|
||||
|
||||
可选记录兑换与划转操作。
|
||||
可选记录兑换与划转操作.
|
||||
|
||||
## 7. HTTP 路由
|
||||
|
||||
@@ -124,20 +124,20 @@ OKX_OPTIONS_ALLOW_MARKET_CLOSE=false
|
||||
|
||||
## 8. 分阶段交付
|
||||
|
||||
1. **基础设施**:双 API、余额、文档、设置页说明
|
||||
2. **兑换 + 划转**:资金账户 USDT→USDC、划转到交易户
|
||||
3. **交易**:链、报价、开平仓、持仓
|
||||
4. **监控**:翻倍微信提醒
|
||||
1. **基础设施**:双 API,余额,文档,设置页说明
|
||||
2. **兑换 + 划转**:资金账户 USDT→USDC,划转到交易户
|
||||
3. **交易**:链,报价,开平仓,持仓
|
||||
4. **监控**:翻倍微信提醒
|
||||
|
||||
## 9. 不在一期范围
|
||||
|
||||
- 卖方、组合单、RFQ
|
||||
- 卖方,组合单,RFQ
|
||||
- 自动 USDT↔USDC
|
||||
- `manual-agent-okx` / 中控聚合
|
||||
- 币本位期权
|
||||
|
||||
## 10. 安全
|
||||
|
||||
- 期权 API:**交易 + 读**,禁止提币
|
||||
- 期权 API:**交易 + 读**,禁止提币
|
||||
- 日志不输出 Secret
|
||||
- 下单前校验 `client is exchange_options`
|
||||
|
||||
+38
-38
@@ -2,8 +2,8 @@
|
||||
|
||||
## 1. 前置条件
|
||||
|
||||
1. OKX **主账户**已开通期权(USDⓈ 本位),且 App 中可见 `ETHUSD UM` / `BTCUSD UM`。
|
||||
2. 在 `crypto_monitor_okx/.env` 配置 **期权专用 API**(与永续子账户分开):
|
||||
1. OKX **主账户**已开通期权(USDⓈ 本位),且 App 中可见 `ETHUSD UM` / `BTCUSD UM`.
|
||||
2. 在 `crypto_monitor_okx/.env` 配置 **期权专用 API**(与永续子账户分开):
|
||||
|
||||
```bash
|
||||
OKX_OPTIONS_ENABLED=true
|
||||
@@ -12,77 +12,77 @@ OKX_OPTIONS_API_SECRET=...
|
||||
OKX_OPTIONS_API_PASSPHRASE=...
|
||||
```
|
||||
|
||||
3. 重启实例:`pm2 restart crypto_okx`
|
||||
3. 重启实例:`pm2 restart crypto_okx`
|
||||
|
||||
> 永续仍用原有 `OKX_API_*`(子账户);期权只用 `OKX_OPTIONS_API_*`(主账户)。
|
||||
> 永续仍用原有 `OKX_API_*`(子账户);期权只用 `OKX_OPTIONS_API_*`(主账户).
|
||||
|
||||
## 2. 资金准备
|
||||
|
||||
期权权利金使用 **USDC 或 USDG**,不能直接用 USDT 买入。
|
||||
期权权利金使用 **USDC 或 USDG**,不能直接用 USDT 买入.
|
||||
|
||||
### 推荐步骤
|
||||
|
||||
1. 打开 **期权** 页,查看顶栏:
|
||||
- **资金账户**:USDT 余额
|
||||
- **交易账户**:USDC 余额(买期权从这里扣)
|
||||
2. **币种兑换**(资金账户内)
|
||||
1. 打开 **期权** 页,查看顶栏:
|
||||
- **资金账户**:USDT 余额
|
||||
- **交易账户**:USDC 余额(买期权从这里扣)
|
||||
2. **币种兑换**(资金账户内)
|
||||
- 从 USDT 兑换为 USDC
|
||||
- 先点 **询价**,确认预估获得量后点 **确认兑换**
|
||||
- 先点 **询价**,确认预估获得量后点 **确认兑换**
|
||||
3. **账户划转**
|
||||
- 从:资金账户 → 到:交易账户
|
||||
- 币种:USDC
|
||||
- 从:资金账户 → 到:交易账户
|
||||
- 币种:USDC
|
||||
- 将兑换得到的 USDC 划到交易账户
|
||||
4. 确认 **交易账户 USDC** 足够支付本笔权利金
|
||||
|
||||
系统 **不会** 自动兑换或划转,避免误动资金。
|
||||
系统 **不会** 自动兑换或划转,避免误动资金.
|
||||
|
||||
## 3. 下单流程
|
||||
|
||||
1. 顶栏进入 **期权**
|
||||
2. 选择 **ETH** 或 **BTC**
|
||||
3. 选择 **到期日**(默认仅 1~2 日)
|
||||
3. 选择 **到期日**(默认仅 1~2 日)
|
||||
4. 选择 **看涨 Call** 或 **看跌 Put**
|
||||
5. 在行权价列表中选 **轻度实值** 合约
|
||||
6. 查看:
|
||||
- **卖一价**(每 1 ETH/BTC 的报价)
|
||||
6. 查看:
|
||||
- **卖一价**(每 1 ETH/BTC 的报价)
|
||||
- **张数 / ETH 数量**
|
||||
- **预估权利金**(USDC)
|
||||
7. 选择 **按预算打满**(默认 10U×0.95)或 **指定 ETH 数量**
|
||||
8. 点击 **限价买入**(价格 = 卖一)
|
||||
- **预估权利金**(USDC)
|
||||
7. 选择 **按预算打满**(默认 10U×0.95)或 **指定 ETH 数量**
|
||||
8. 点击 **限价买入**(价格 = 卖一)
|
||||
|
||||
### 张数说明
|
||||
|
||||
- **1 张 = 0.01 ETH**(或 0.01 BTC)— 与 OKX App「合约价值」一致
|
||||
- **1 张 = 0.01 ETH**(或 0.01 BTC)— 与 OKX App「合约价值」一致
|
||||
- 盘口报价是 **每 1 ETH** 的价格
|
||||
例:报价 15.6,买 0.5 ETH(50 张)→ 权利金 ≈ 15.6 × 0.5 = **7.8 USDC**
|
||||
例:报价 15.6,买 0.5 ETH(50 张)→ 权利金 ≈ 15.6 × 0.5 = **7.8 USDC**
|
||||
|
||||
## 4. 持仓与平仓
|
||||
|
||||
持仓表字段对齐 OKX:合约、张数、开仓均价、标记价、浮盈、收益率、到期等。
|
||||
持仓表字段对齐 OKX:合约,张数,开仓均价,标记价,浮盈,收益率,到期等.
|
||||
|
||||
**平仓(锁利/止损):**
|
||||
**平仓(锁利/止损):**
|
||||
|
||||
1. 在持仓行点击 **平仓**
|
||||
2. 查看 **买一价** 与预估收回
|
||||
3. 确认 **限价卖出**(价格 = 买一)
|
||||
3. 确认 **限价卖出**(价格 = 买一)
|
||||
|
||||
> 默认不使用市价平仓。若 `.env` 开启 `OKX_OPTIONS_ALLOW_MARKET_CLOSE=true`,市价按钮会出现并带风险提示。
|
||||
> 默认不使用市价平仓.若 `.env` 开启 `OKX_OPTIONS_ALLOW_MARKET_CLOSE=true`,市价按钮会出现并带风险提示.
|
||||
|
||||
## 5. 微信提醒
|
||||
|
||||
当某笔持仓 **未实现盈亏 ≥ 已付权利金的 100%**(翻倍)时,会发 **一条** 企业微信提醒(同一笔只提醒一次)。
|
||||
当某笔持仓 **未实现盈亏 ≥ 已付权利金的 100%**(翻倍)时,会发 **一条** 企业微信提醒(同一笔只提醒一次).
|
||||
|
||||
需已配置 `WECHAT_WEBHOOK`。
|
||||
需已配置 `WECHAT_WEBHOOK`.
|
||||
|
||||
## 6. 与永续的关系
|
||||
|
||||
| | 永续(子账户) | 期权(主账户) |
|
||||
| | 永续(子账户) | 期权(主账户) |
|
||||
|--|----------------|----------------|
|
||||
| API | `OKX_API_*` | `OKX_OPTIONS_API_*` |
|
||||
| 页面 | 实盘下单 / 关键位 | 期权 |
|
||||
| 资金顶栏 | USDT 资金户+交易户 | 期权页单独显示 USDC 等 |
|
||||
|
||||
两套资金 **不合并** 显示。
|
||||
两套资金 **不合并** 显示.
|
||||
|
||||
## 7. 配置说明
|
||||
|
||||
@@ -91,24 +91,24 @@ OKX_OPTIONS_API_PASSPHRASE=...
|
||||
| `OKX_OPTIONS_TRADE_BUDGET_USDC` | 10 | 单笔权利金上限 |
|
||||
| `OKX_OPTIONS_BUDGET_BUFFER` | 0.95 | 算张数时预留 5% 缓冲 |
|
||||
| `OKX_OPTIONS_MAX_DTE_DAYS` | 2 | 最多选几天内到期 |
|
||||
| `OKX_OPTIONS_ITM_MAX_DIST_USD` | 30 | 轻度实值:价内不超过多少 USD |
|
||||
| `OKX_OPTIONS_ITM_MAX_DIST_USD` | 30 | 轻度实值:价内不超过多少 USD |
|
||||
| `OKX_OPTIONS_PROFIT_ALERT_RATIO` | 1.0 | 浮盈/权利金 ≥ 此值推送 |
|
||||
|
||||
## 8. 常见问题
|
||||
|
||||
**Q:为什么买不了?**
|
||||
**Q:为什么买不了?**
|
||||
- 交易账户 USDC 不足 → 先兑换再划转
|
||||
- 卖一价过高,10U 预算买不到 1 张 → 选更便宜合约或提高 `OKX_OPTIONS_TRADE_BUDGET_USDC`
|
||||
- 卖一价过高,10U 预算买不到 1 张 → 选更便宜合约或提高 `OKX_OPTIONS_TRADE_BUDGET_USDC`
|
||||
- 期权 API 未配置或 `OKX_OPTIONS_ENABLED=false`
|
||||
|
||||
**Q:报价 15 是每张 15U 吗?**
|
||||
- 不是。15 是 **每 1 ETH** 的报价;每张(0.01 ETH)约 0.15 USDC。
|
||||
**Q:报价 15 是每张 15U 吗?**
|
||||
- 不是.15 是 **每 1 ETH** 的报价;每张(0.01 ETH)约 0.15 USDC.
|
||||
|
||||
**Q:子账户能开期权吗?**
|
||||
- 本系统期权走主账户 API;子账户永续不受影响。
|
||||
**Q:子账户能开期权吗?**
|
||||
- 本系统期权走主账户 API;子账户永续不受影响.
|
||||
|
||||
## 9. 风险说明
|
||||
|
||||
- 买方最大亏损为 **权利金**;近期实值仍会时间衰减
|
||||
- 买方最大亏损为 **权利金**;近期实值仍会时间衰减
|
||||
- 限价单可能因无流动性未成交
|
||||
- 请先在小额下验证兑换、划转、开平仓全流程
|
||||
- 请先在小额下验证兑换,划转,开平仓全流程
|
||||
|
||||
+42
-42
@@ -1,12 +1,12 @@
|
||||
# 系统设置页说明
|
||||
|
||||
本文档描述各交易实例 Web 端 **「系统设置」** 页各区块功能、与 env 配置页的分工,以及导航显示开关规则。
|
||||
本文档描述各交易实例 Web 端 **「系统设置」** 页各区块功能,与 env 配置页的分工,以及导航显示开关规则.
|
||||
|
||||
---
|
||||
|
||||
## 1. 页面结构
|
||||
|
||||
系统设置为 **两列卡片** 布局,各区块可在「导航显示」中单独开关(见第 2 节)。
|
||||
系统设置为 **两列卡片** 布局,各区块可在「导航显示」中单独开关(见第 2 节).
|
||||
|
||||
| 区块 | 默认显示 | 说明 |
|
||||
|------|----------|------|
|
||||
@@ -16,9 +16,9 @@
|
||||
| 数据导出 | 可关 | 下载 CSV |
|
||||
| 币种兑换 | 可关 | 仅 OKX 期权相关 |
|
||||
| 期权资金划转 | 可关 | 仅 OKX |
|
||||
| 期权设置面板 | OKX 有模块时 | 较大块,占整行 |
|
||||
| 期权设置面板 | OKX 有模块时 | 较大块,占整行 |
|
||||
|
||||
**固定不可隐藏**(顶栏):关键位监控、实盘下单、系统设置。
|
||||
**固定不可隐藏**(顶栏):关键位监控,实盘下单,系统设置.
|
||||
|
||||
---
|
||||
|
||||
@@ -34,9 +34,9 @@
|
||||
| 统计分析 | 统计分析 |
|
||||
| 风控说明 | 风控说明 |
|
||||
| env 配置 | env 配置 |
|
||||
| 期权 | 期权(仅 OKX 等有期权模块时有效) |
|
||||
| 期权 | 期权(仅 OKX 等有期权模块时有效) |
|
||||
|
||||
保存后 **立即生效**,无需重启。中控 iframe 内嵌导航同步生效。
|
||||
保存后 **立即生效**,无需重启.中控 iframe 内嵌导航同步生效.
|
||||
|
||||
### 2.2 系统设置内区块开关
|
||||
|
||||
@@ -54,28 +54,28 @@
|
||||
|
||||
### 用途
|
||||
|
||||
- 修改 **直链打开实例** 时 `/login` 使用的用户名与密码。
|
||||
- 写入本实例目录 `.env` 的 `APP_USERNAME`、`APP_PASSWORD`。
|
||||
- **三所建议使用相同账号**,便于记忆;本页仅改 **当前实例** 的 `.env`,若需三所一致请分别保存或后续做批量同步。
|
||||
- 修改 **直链打开实例** 时 `/login` 使用的用户名与密码.
|
||||
- 写入本实例目录 `.env` 的 `APP_USERNAME`,`APP_PASSWORD`.
|
||||
- **三所建议使用相同账号**,便于记忆;本页仅改 **当前实例** 的 `.env`,若需三所一致请分别保存或后续做批量同步.
|
||||
|
||||
### 与中控 / 密钥的关系
|
||||
|
||||
| 项目 | 是否在系统设置改 | 说明 |
|
||||
|------|------------------|------|
|
||||
| 网页登录密码 | ✅ | 本区块 |
|
||||
| 中控通信密钥 `HUB_BRIDGE_TOKEN` | ❌ | 部署时自动生成,中控与实例一致 |
|
||||
| 登录会话密钥 `FLASK_SECRET_KEY` | ❌ | 部署时自动生成,三所相同 |
|
||||
| 交易所 API | ❌ | 在 **env 配置** 页(各所自配) |
|
||||
| AI 复盘 / OpenAI | ❌ | 在中控 **系统设置 → AI 配置**(同步三所) |
|
||||
| 中控通信密钥 `HUB_BRIDGE_TOKEN` | ❌ | 部署时自动生成,中控与实例一致 |
|
||||
| 登录会话密钥 `FLASK_SECRET_KEY` | ❌ | 部署时自动生成,三所相同 |
|
||||
| 交易所 API | ❌ | 在 **env 配置** 页(各所自配) |
|
||||
| AI 复盘 / OpenAI | ❌ | 在中控 **系统设置 → AI 配置**(同步三所) |
|
||||
|
||||
### 操作流程
|
||||
|
||||
1. 输入 **当前密码**(与 `.env` 中 `APP_PASSWORD` 一致)。
|
||||
2. 可选填 **新用户名**;不填则保持原用户名。
|
||||
3. 输入 **新密码** 与 **确认密码**(至少 6 位)。
|
||||
4. 保存后 **自动重启当前实例**(PM2),请用新密码登录。
|
||||
1. 输入 **当前密码**(与 `.env` 中 `APP_PASSWORD` 一致).
|
||||
2. 可选填 **新用户名**;不填则保持原用户名.
|
||||
3. 输入 **新密码** 与 **确认密码**(至少 6 位).
|
||||
4. 保存后 **自动重启当前实例**(PM2),请用新密码登录.
|
||||
|
||||
经中控 SSO 打开实例时,通常无需输入实例密码;改密主要影响 **直链访问**。
|
||||
经中控 SSO 打开实例时,通常无需输入实例密码;改密主要影响 **直链访问**.
|
||||
|
||||
---
|
||||
|
||||
@@ -83,7 +83,7 @@
|
||||
|
||||
### 用途
|
||||
|
||||
在 **子账户永续** 场景下,于 **资金账户(funding)** 与 **交易账户(swap)** 之间手动划转 USDT。
|
||||
在 **子账户永续** 场景下,于 **资金账户(funding)** 与 **交易账户(swap)** 之间手动划转 USDT.
|
||||
|
||||
### 与 env 配置的关系
|
||||
|
||||
@@ -92,36 +92,36 @@
|
||||
| **手动**划转一笔 | ✅ 本区块 | ❌ |
|
||||
| **自动**每日划转规则 | ❌ | ✅「自动划转」卡片 |
|
||||
|
||||
自动划转规则(开关、目标余额、整点等)在 env 配置中维护,见 [env配置说明.md](./env配置说明.md)。
|
||||
自动划转规则(开关,目标余额,整点等)在 env 配置中维护,见 [env配置说明.md](./env配置说明.md).
|
||||
|
||||
---
|
||||
|
||||
## 5. 数据导出
|
||||
|
||||
提供 CSV 下载(版本号见页内标注):
|
||||
提供 CSV 下载(版本号见页内标注):
|
||||
|
||||
| 链接 | 内容 |
|
||||
|------|------|
|
||||
| 交易记录 | 成交/订单相关导出 |
|
||||
| 复盘记录 | 复盘日记 |
|
||||
| 关键位(当前) | 当前关键位列表 |
|
||||
| 关键位(当前) | 当前关键位列表 |
|
||||
| 关键位历史 | 历史关键位 |
|
||||
|
||||
导出为只读操作,不修改配置。
|
||||
导出为只读操作,不修改配置.
|
||||
|
||||
---
|
||||
|
||||
## 6. 期权相关(仅 OKX)
|
||||
## 6. 期权相关(仅 OKX)
|
||||
|
||||
当实例启用期权模块时,系统设置可能包含:
|
||||
当实例启用期权模块时,系统设置可能包含:
|
||||
|
||||
- **币种兑换**:期权账户内币种兑换操作
|
||||
- **期权资金划转**:期权与永续/资金账户间划转
|
||||
- **期权设置面板**:页内期权参数与状态(大块区域)
|
||||
- **币种兑换**:期权账户内币种兑换操作
|
||||
- **期权资金划转**:期权与永续/资金账户间划转
|
||||
- **期权设置面板**:页内期权参数与状态(大块区域)
|
||||
|
||||
是否在顶栏显示「期权」Tab,由 **导航显示 → 期权** 控制;是否在设置页显示兑换/划转卡片,由对应子开关控制。
|
||||
是否在顶栏显示「期权」Tab,由 **导航显示 → 期权** 控制;是否在设置页显示兑换/划转卡片,由对应子开关控制.
|
||||
|
||||
期权 env 参数(API、预算、策略默认值)在 **env 配置 → 期权账户** 维护,见 [期权用法.md](./期权用法.md)。
|
||||
期权 env 参数(API,预算,策略默认值)在 **env 配置 → 期权账户** 维护,见 [期权用法.md](./期权用法.md).
|
||||
|
||||
---
|
||||
|
||||
@@ -129,30 +129,30 @@
|
||||
|
||||
| 页面 | 顶栏资金信息 | 说明 |
|
||||
|------|--------------|------|
|
||||
| 关键位、实盘、策略等 | 显示 | 含资金、盈亏等 |
|
||||
| 系统设置、风控说明、env 配置 | 隐藏资金条 | 与实盘顶栏共用组件,设置类页面简化展示 |
|
||||
| 关键位,实盘,策略等 | 显示 | 含资金,盈亏等 |
|
||||
| 系统设置,风控说明,env 配置 | 隐藏资金条 | 与实盘顶栏共用组件,设置类页面简化展示 |
|
||||
|
||||
主题切换(明/暗)在系统设置页可用(若已接入主题切换 UI)。
|
||||
主题切换(明/暗)在系统设置页可用(若已接入主题切换 UI).
|
||||
|
||||
---
|
||||
|
||||
## 8. 权限与安全
|
||||
|
||||
- 所有设置 API 需 **已登录**(或部署时 `APP_AUTH_DISABLED=true` 的联调环境)。
|
||||
- 改密、env 保存、PM2 重启等写操作 **不接受** 仅带 `X-Hub-Token` 的中控请求修改(防止中控误改实例配置)。
|
||||
- 生产环境建议 `APP_AUTH_DISABLED=false`,公网务必开启登录校验。
|
||||
- 所有设置 API 需 **已登录**(或部署时 `APP_AUTH_DISABLED=true` 的联调环境).
|
||||
- 改密,env 保存,PM2 重启等写操作 **不接受** 仅带 `X-Hub-Token` 的中控请求修改(防止中控误改实例配置).
|
||||
- 生产环境建议 `APP_AUTH_DISABLED=false`,公网务必开启登录校验.
|
||||
|
||||
---
|
||||
|
||||
## 9. 首次部署时的账号与密钥(规划)
|
||||
## 9. 首次部署时的账号与密钥(规划)
|
||||
|
||||
以下由 **部署脚本** 自动完成,**不在** 系统设置或 env 配置页手工填写:
|
||||
以下由 **部署脚本** 自动完成,**不在** 系统设置或 env 配置页手工填写:
|
||||
|
||||
1. **生成 `HUB_BRIDGE_TOKEN`** → 写入中控 + 三实例 `.env`(相同)。
|
||||
2. **生成 `FLASK_SECRET_KEY`** → 写入三实例 `.env`(三所相同)。
|
||||
3. **生成初始 `APP_USERNAME=admin`、`APP_PASSWORD=admin123`** → 写入三实例(仅当尚未配置时);用户日后在 **系统设置** 改密。
|
||||
1. **生成 `HUB_BRIDGE_TOKEN`** → 写入中控 + 三实例 `.env`(相同).
|
||||
2. **生成 `FLASK_SECRET_KEY`** → 写入三实例 `.env`(三所相同).
|
||||
3. **生成初始 `APP_USERNAME=admin`,`APP_PASSWORD=admin123`** → 写入三实例(仅当尚未配置时);用户日后在 **系统设置** 改密.
|
||||
|
||||
脚本应对 **已有非空值** 跳过写入,避免覆盖生产环境。
|
||||
脚本应对 **已有非空值** 跳过写入,避免覆盖生产环境.
|
||||
|
||||
---
|
||||
|
||||
|
||||
Reference in New Issue
Block a user