e265c1b31a
Replace alert-only check_key_monitors with market open flow, add _market_open_for_key_monitor, and update docs. Co-authored-by: Cursor <cursoragent@cursor.com>
165 lines
6.3 KiB
Markdown
165 lines
6.3 KiB
Markdown
# 关键位止盈止损方案 & 移动保本开关 — 更新说明
|
||
|
||
**版本日期:** 2026-05-21
|
||
**影响实例:** `crypto_monitor_binance`(币安)、`crypto_monitor_gate`(Gate)、`crypto_monitor_okx`(OKX)
|
||
**共用库:** 仓库根目录 `key_sl_tp_lib.py`(计算逻辑)、`fib_key_monitor_lib.py`(斐波 SL/TP 不变)
|
||
|
||
---
|
||
|
||
## 1. 变更摘要
|
||
|
||
| 项 | 变更前 | 变更后 |
|
||
|----|--------|--------|
|
||
| 箱体/收敛 SL/TP | 仅一种(标准突破) | 添加时可三选一 |
|
||
| 移动保本(关键位) | 自动单写死开启 | 添加时可勾选,**默认关闭** |
|
||
| 斐波 SL/TP | H/L 限价方案 | **不变**;仅增加移动保本开关 |
|
||
| 历史 `key_monitors` | 无新字段 | 缺字段视为 **标准方案 + 保本关** |
|
||
|
||
---
|
||
|
||
## 2. 数据库(`key_monitors` 新增列)
|
||
|
||
启动时自动 `ALTER TABLE`(已有库兼容):
|
||
|
||
| 字段 | 类型 | 默认 | 说明 |
|
||
|------|------|------|------|
|
||
| `sl_tp_mode` | TEXT | `standard` | `standard` / `box_1p5` / `trend_manual` |
|
||
| `manual_take_profit` | REAL | NULL | 仅 `trend_manual` 使用 |
|
||
| `breakeven_enabled` | INTEGER | `0` | 0=关,1=开 |
|
||
|
||
旧记录无上述列时,读取逻辑按 **`standard` + 保本关** 处理。
|
||
|
||
---
|
||
|
||
## 3. 三种止盈止损方案(仅箱体突破 / 收敛突破)
|
||
|
||
计划价 **E** = 确认 K(倒数第 1 根已闭合 5m)收盘价;**H** = \|上沿 − 下沿\|。
|
||
自动开仓(币安/Gate)前仍须:**计划 RR(按 E)> `KEY_AUTO_MIN_PLANNED_RR`**(默认 1.5)。
|
||
|
||
### 3.1 标准突破 `standard`(原逻辑)
|
||
|
||
| 方向 | 止损 SL | 止盈 TP |
|
||
|------|---------|---------|
|
||
| 多 | 突破 K 最低价 × (1 − `KEY_STOP_OUTSIDE_BREAKOUT_PCT`/100) | E + 1×H |
|
||
| 空 | 突破 K 最高价 × (1 + 外侧%) | E − 1×H |
|
||
|
||
默认外侧:**0.5%**(`KEY_STOP_OUTSIDE_BREAKOUT_PCT`)。
|
||
|
||
### 3.2 箱体 1R / 止盈 1.5H `box_1p5`
|
||
|
||
以 **E 为当前价**,风险距离 = 1×H,止盈距离 = 1.5×H,**计划 RR 固定约 1.5:1**。
|
||
|
||
| 方向 | 止损 SL | 止盈 TP |
|
||
|------|---------|---------|
|
||
| 多 | E − H | E + 1.5×H |
|
||
| 空 | E + H | E − 1.5×H |
|
||
|
||
### 3.3 趋势单 + 自填止盈 `trend_manual`
|
||
|
||
| 方向 | 止损 SL | 止盈 TP |
|
||
|------|---------|---------|
|
||
| 多 | 突破 K 最低价 × (1 − `KEY_TREND_STOP_OUTSIDE_PCT`/100) | 添加时录入的 `manual_take_profit` |
|
||
| 空 | 突破 K 最高价 × (1 + 外侧%) | 同上 |
|
||
|
||
- 环境变量 **`KEY_TREND_STOP_OUTSIDE_PCT`**,默认 **1**(即 1%)。
|
||
- 添加时校验:做多止盈 > 上沿;做空止盈 < 下沿。
|
||
|
||
---
|
||
|
||
## 4. 斐波回调 0.618 / 0.786
|
||
|
||
- **SL/TP**:仍为 `calc_fib_plan`(多:SL=L、TP=H;空:SL=H、TP=L),**无**三方案下拉。
|
||
- **移动保本**:添加时可勾选;成交写入 `order_monitors` 时带入该勾选状态(默认关)。
|
||
|
||
---
|
||
|
||
## 5. 移动保本
|
||
|
||
| 场景 | 行为 |
|
||
|------|------|
|
||
| 关键位添加 | 复选框「移动保本」,**默认不勾选** |
|
||
| 箱体/收敛自动开仓成功 | `order_monitors.breakeven_enabled` = 添加时的选择 |
|
||
| 斐波限价成交后 | 同上 |
|
||
| 人工「实盘下单」 | **不变**:仍为表单勾选,默认仍可按原页面逻辑 |
|
||
|
||
触发参数仍用全局 `.env`:`BREAKEVEN_RR_TRIGGER`、`BREAKEVEN_STEP_R`、`BREAKEVEN_OFFSET_PCT`。
|
||
|
||
---
|
||
|
||
## 6. 前端(关键位添加表单)
|
||
|
||
在「上沿 / 下沿」后增加:
|
||
|
||
1. **止盈止损方案**(仅类型为箱体突破、收敛突破时显示)
|
||
2. **趋势单止盈价**(仅选「趋势单·自填止盈」时显示且必填)
|
||
3. **移动保本**(箱体/收敛/斐波显示;默认不勾)
|
||
|
||
活跃列表卡片展示:**方案**、**保本:开/关**。
|
||
|
||
---
|
||
|
||
## 7. 环境变量
|
||
|
||
```env
|
||
# 标准方案:突破 K 极值外侧 %
|
||
KEY_STOP_OUTSIDE_BREAKOUT_PCT=0.5
|
||
|
||
# 趋势单方案:突破 K 极值外侧 %
|
||
KEY_TREND_STOP_OUTSIDE_PCT=1
|
||
```
|
||
|
||
已写入各实例 `.env.example`(Binance / Gate / OKX)。
|
||
|
||
---
|
||
|
||
## 8. 交易所差异
|
||
|
||
| 实例 | 箱体/收敛触发后 |
|
||
|------|----------------|
|
||
| **Binance / Gate** | 门控通过 → 按方案算 SL/TP → 市价开仓 → 挂交易所 TP/SL → 写入下单监控 |
|
||
| **OKX** | 门控通过 → **自动市价开仓**(与 Gate/Binance 相同;须 `LIVE_TRADING_ENABLED=true`) |
|
||
|
||
OKX 用户按推送中的计划价自行下单;斐波仍为限价 + 成交后挂 TP/SL(与原先一致)。
|
||
|
||
---
|
||
|
||
## 9. 涉及文件清单
|
||
|
||
| 路径 | 说明 |
|
||
|------|------|
|
||
| `key_sl_tp_lib.py` | **新建**,三方案计算与文案 |
|
||
| `crypto_monitor_binance/app.py` | 门控触发、开仓、斐波、add_key |
|
||
| `crypto_monitor_binance/templates/index.html` | 表单 + JS + 列表展示 |
|
||
| `crypto_monitor_binance/.env.example` | `KEY_TREND_STOP_OUTSIDE_PCT` |
|
||
| `crypto_monitor_gate/app.py` | 同 Binance |
|
||
| `crypto_monitor_gate/templates/index.html` | 同 Binance |
|
||
| `crypto_monitor_gate/.env.example` | 同上 |
|
||
| `crypto_monitor_okx/app.py` | add_key、提醒文案、斐波保本 |
|
||
| `crypto_monitor_okx/templates/index.html` | 表单 + JS |
|
||
| `crypto_monitor_okx/.env.example` | 注释项 |
|
||
|
||
---
|
||
|
||
## 10. 部署与验证建议
|
||
|
||
1. `git pull` 后重启三个实例的 Flask 进程(会自动迁移 `key_monitors` 列)。
|
||
2. 在 `.env` 中按需设置 `KEY_TREND_STOP_OUTSIDE_PCT`(不配则用默认 1)。
|
||
3. **验证 Binance/Gate**
|
||
- 添加箱体突破,选「箱体1R·止盈1.5H」,不勾保本 → 触发后微信应显示方案名、保本关、SL/TP 符合 E±H / E±1.5H。
|
||
- 添加趋势单,填止盈,勾保本 → 成交后持仓卡片「移动保本:开」。
|
||
4. **验证 OKX**:门控通过且 RR 达标时应自动市价开仓;失败时微信说明 `exchange_failed` / `rr_insufficient`。
|
||
5. 旧关键位条目:列表应显示「方案:标准突破」「保本:关」(除非库中已有新字段值)。
|
||
|
||
---
|
||
|
||
## 11. 代码入口(便于二次开发)
|
||
|
||
| 功能 | 符号 |
|
||
|------|------|
|
||
| 计划 SL/TP | `plan_key_sl_tp()` in `key_sl_tp_lib.py` |
|
||
| 按监控行计算 | `_key_plan_sl_tp_for_row()` in各 `app.py` |
|
||
| 添加关键位 | `add_key()` |
|
||
| 箱体/收敛轮询 | `check_key_monitors()`(四所共用自动开仓逻辑) |
|
||
| 斐波添加 | `_add_fib_key_monitor(..., breakeven_enabled=)` |
|
||
| 自动开仓写监控 | `_market_open_for_key_monitor(..., breakeven_enabled=)` |
|