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:
dekun
2026-07-08 23:42:26 +08:00
parent aaa72c7961
commit b733e551a0
392 changed files with 71522 additions and 71369 deletions
+60 -60
View File
@@ -1,6 +1,6 @@
# 顺势加仓滚仓详细说明
# 顺势加仓(滚仓)详细说明
本文档描述 **顺势加仓 / 滚仓** 的完整业务逻辑计仓公式四种加仓方式程序监控与生命周期规则实现代码见 `strategy_roll_lib.py``strategy_roll_monitor_lib.py``strategy_register.py`
本文档描述 **顺势加仓 / 滚仓** 的完整业务逻辑,计仓公式,四种加仓方式,程序监控与生命周期规则.实现代码见 `strategy_roll_lib.py`,`strategy_roll_monitor_lib.py`,`strategy_register.py`.
---
@@ -8,37 +8,37 @@
| 项目 | 规则 |
|------|------|
| 计仓模式 | **仅「以损定仓」**`POSITION_SIZING_MODE=risk`);全仓杠杆模式禁止滚仓 |
| 持仓 | 须先在「实盘下单」存在 **active**`order_monitors`且交易所有同向持仓 |
| 计仓模式 | **仅「以损定仓」**(`POSITION_SIZING_MODE=risk`);全仓杠杆模式禁止滚仓 |
| 持仓 | 须先在「实盘下单」存在 **active**`order_monitors`,且交易所有同向持仓 |
| 趋势互斥 | 存在 **active** 趋势回调计划时不可滚仓 |
| 腿数上限 | 做多 / 做空各最多 **3 次**滚仓仅计 **已成交**`roll_legs` |
| 同时监控 | **同一滚仓组** 最多 **1 条 pending**成交或删除/失效后再提交下一腿 |
| 止盈 | 全程使用 **首仓** `order_monitors.take_profit`滚仓不改止盈 |
| 止损 | 每次提交填写 **新统一止损价 S**成交后交易所 TP/SL 同步止盈仍为首仓 |
| 腿数上限 | 做多 / 做空各最多 **3 次**滚仓(仅计 **已成交**`roll_legs`) |
| 同时监控 | **同一滚仓组** 最多 **1 条 pending**;成交或删除/失效后再提交下一腿 |
| 止盈 | 全程使用 **首仓** `order_monitors.take_profit`,滚仓不改止盈 |
| 止损 | 每次提交填写 **新统一止损价 S**;成交后交易所 TP/SL 同步(止盈仍为首仓) |
---
## 2. 风险预算不可手改
## 2. 风险预算(不可手改)
- 读取所选监控单`order_monitors.risk_percent`
- 风险预算**B = 当前交易基数 × risk%**`get_trading_capital_usdt()` × 监控 risk%
- 页面规则区展示当前 risk%表单 **不提供** 风险% 输入框
- 读取所选监控单:`order_monitors.risk_percent`
- 风险预算:**B = 当前交易基数 × risk%**(`get_trading_capital_usdt()` × 监控 risk%)
- 页面规则区展示当前 risk%,表单 **不提供** 风险% 输入框
**方案 C定稿**加仓后若价格打到 **新止损 S**合并持仓的总亏损 **≤ B**约等于 1 个风险单位)。浮盈通过 **触发时刻的 mark 价当时持仓均价与张数** 进入公式不在提交时固定张数
**方案 C(定稿)**:加仓后若价格打到 **新止损 S**,合并持仓的总亏损 **≤ B**(约等于 1 个风险单位).浮盈通过 **触发时刻的 mark 价,当时持仓均价与张数** 进入公式,不在提交时固定张数.
---
## 3. 计仓公式
变量
变量:
- `Q1, E1`触发时现有持仓张数均价
- `E2`加仓成交价市价腿 ≈ 当时 mark程序监控腿在 **穿越触发时** 用当时 mark 重算
- `S`提交时填写的统一止损价
- `B`风险预算U
- `cs`合约 `contractSize`U 本位线性永续
- `Q1, E1`:触发时现有持仓张数,均价
- `E2`:加仓成交价(市价腿 ≈ 当时 mark;程序监控腿在 **穿越触发时** 用当时 mark 重算)
- `S`:提交时填写的统一止损价
- `B`:风险预算(U)
- `cs`:合约 `contractSize`(U 本位线性永续)
**做多**`S < E2`):
**做多**(`S < E2`):
```text
(Q1 + Q2) × (avg S) × cs = B
@@ -47,15 +47,15 @@ avg = (Q1·E1 + Q2·E2) / (Q1 + Q2)
=> Q2 = (B/cs Q1·(E1 S)) / (E2 S)
```
**做空**`S > E2`):
**做空**(`S > E2`):
```text
=> Q2 = (B/cs Q1·(S E1)) / (S E2)
```
`Q2 ≤ 0`不加仓 / 监控腿 **失效**提示「已满足风险上限或无法再加」
`Q2 ≤ 0`:不加仓 / 监控腿 **失效**,提示「已满足风险上限或无法再加」.
预览与市价执行前用当前 mark 估算**斐波 / 突破** 在 **触发瞬间** 按当时持仓与 mark **重新计算** 张数后再市价下单
预览与市价执行前用当前 mark 估算;**斐波 / 突破** 在 **触发瞬间** 按当时持仓与 mark **重新计算** 张数后再市价下单.
---
@@ -69,33 +69,33 @@ avg = (Q1·E1 + Q2·E2) / (Q1 + Q2)
### 4.2 斐波 0.618 / 0.786
| 输入 | 上沿 H下沿 L新止损 S |
| 限价 | 由 H/L 按斐波算 **加仓价 P**不打交易所限价单 |
| 触发 | 程序监控 **mark**<br>• **多**mark **向下穿越** P → 市价加<br>• **空**mark **向上穿越** P → 市价加 |
| 失效 | **止盈侧**多 mark≥H空 mark≤L |
| 输入 | 上沿 H,下沿 L,新止损 S |
| 限价 | 由 H/L 按斐波算 **加仓价 P**(不打交易所限价单) |
| 触发 | 程序监控 **mark**:<br>• **多**:mark **向下穿越** P → 市价加<br>• **空**:mark **向上穿越** P → 市价加 |
| 失效 | **止盈侧**:多 mark≥H;空 mark≤L |
| 显示 | `斐波0.618` / `斐波0.786` |
### 4.3 突破加仓
| 输入 | **突破价 B**新止损 S |
| 触发 | 程序监控 **mark**<br>• **多**mark **向上穿越** B → 市价加<br>• **空**mark **向下穿越** B → 市价加 |
| 失效 | **止损侧**多 mark≤S空 mark≥S未突破先向止损侧 |
| 输入 | **突破价 B**,新止损 S |
| 触发 | 程序监控 **mark**:<br>• **多**:mark **向上穿越** B → 市价加<br>• **空**:mark **向下穿越** B → 市价加 |
| 失效 | **止损侧**:多 mark≤S;空 mark≥S(未突破先向止损侧) |
| 显示 | `突破加仓` |
几何校验做多示例):
几何校验(做多示例):
- 斐波S < P < 当前价回调加仓
- 突破S < B < 当前价向上突破再加
- 斐波:S < P < 当前价(回调加仓)
- 突破:S < B < 当前价(向上突破再加)
---
## 5. 程序监控技术要点
- **监控价**统一使用 **标记价 mark**`get_mark_price``get_price`
- **穿越判定**比较 `last_mark_price`上一 tick 存库与当前 mark避免重复触发
-做多斐波`prev > P``mark ≤ P`
- **轮询**各所后台任务调用 `check_roll_monitors(cfg)`
- **成交后**`replace_tpsl` 更新交易所止损`order_monitors.stop_loss` 同步为 S
- **监控价**:统一使用 **标记价 mark**(`get_mark_price``get_price`)
- **穿越判定**:比较 `last_mark_price`(上一 tick 存库)与当前 mark,避免重复触发
-:做多斐波:`prev > P``mark ≤ P`
- **轮询**:各所后台任务调用 `check_roll_monitors(cfg)`
- **成交后**:`replace_tpsl` 更新交易所止损;`order_monitors.stop_loss` 同步为 S
---
@@ -104,31 +104,31 @@ avg = (Q1·E1 + Q2·E2) / (Q1 + Q2)
```text
提交 pending → [监控中] ──穿越触发──→ filled → 可提交下一腿
├── 用户删除 → cancelled不可修改仅删除
├── 用户删除 → cancelled(不可修改,仅删除)
├── 失效规则 → invalidated
└── 手动平仓 / 监控结案 → roll_group closedpending 清除
└── 手动平仓 / 监控结案 → roll_group closed,pending 清除
```
| 规则 | 说明 |
|------|------|
| 提交后不可改 | pending 腿参数不可编辑只能 **删除** |
| 手动平仓 | 实例页删单/平仓中控持仓平仓 → 调用 `roll_sync_after_external_close` |
| 历史保留 | **filled** 腿写入库与策略复盘快照关组后 pending 清除已成交腿仍可在「策略交易记录」中查看 |
| 提交后不可改 | pending 腿参数不可编辑,只能 **删除** |
| 手动平仓 | 实例页删单/平仓,中控持仓平仓 → 调用 `roll_sync_after_external_close` |
| 历史保留 | **filled** 腿写入库与策略复盘快照;关组后 pending 清除,已成交腿仍可在「策略交易记录」中查看 |
API
API:
- `POST /strategy/roll/preview` — JSON 预览
- `POST /strategy/roll/execute` — 提交市价或监控计划
- `POST /strategy/roll/cancel/<leg_id>` — 删除 pending 腿
- `POST /api/hub/roll/sync-flat` — 中控平仓后同步内部
- `POST /api/hub/roll/sync-flat` — 中控平仓后同步(内部)
---
## 7. 数据表
**roll_groups**绑定 `order_monitor_id`
**roll_groups**(绑定 `order_monitor_id`)
- 首仓 TP/SL`current_stop_loss``leg_count`**已成交**次数)、`risk_percent` 快照
- 首仓 TP/SL,`current_stop_loss`,`leg_count`(**已成交**次数),`risk_percent` 快照
**roll_legs**
@@ -138,18 +138,18 @@ API
| limit_price | 斐波限价 P |
| breakthrough_price | 突破价 B |
| new_stop_loss | 统一止损 S |
| last_mark_price | 上一 tick mark穿越检测 |
| last_mark_price | 上一 tick mark(穿越检测) |
| status | pending / filled / cancelled / invalidated |
---
## 8. 操作流程建议
## 8. 操作流程(建议)
1. 在「实盘下单」已有同向持仓与监控单
2. 打开 **策略交易 → 顺势加仓**选择币种方向自动锁定
3. 选择加仓方式填写对应价格字段 → **预览**
4. 市价等待 10 秒 → **执行滚仓**斐波/突破确认后提交监控
5. 监控中可在「最近滚仓腿」**删除**成交后再提交下一腿最多 3 次
2. 打开 **策略交易 → 顺势加仓**,选择币种(方向自动锁定)
3. 选择加仓方式,填写对应价格字段 → **预览**
4. 市价:等待 10 秒 → **执行滚仓**;斐波/突破:确认后提交监控
5. 监控中可在「最近滚仓腿」**删除**;成交后再提交下一腿(最多 3 次)
---
@@ -157,18 +157,18 @@ API
| 文件 | 职责 |
|------|------|
| `strategy_roll_lib.py` | 计仓校验穿越/失效纯函数 |
| `strategy_roll_monitor_lib.py` | 定时监控触价成交外部平仓同步 |
| `strategy_roll_lib.py` | 计仓,校验,穿越/失效纯函数 |
| `strategy_roll_monitor_lib.py` | 定时监控,触价成交,外部平仓同步 |
| `strategy_register.py` | 预览/执行/删除路由 |
| `static/strategy_roll.js` | 方向锁定字段显隐预览与 10 秒确认 |
| `static/strategy_roll.js` | 方向锁定,字段显隐,预览与 10 秒确认 |
| `strategy_templates/strategy_roll_panel.html` | 右栏 UI |
---
## 10. 与旧版差异摘要
- 风险% 从监控单读取不再手填
- 止损为 **绝对价格**不再使用「止损偏移%」
- 斐波/突破改为 **程序盯 mark + 触价市价**不再挂交易所限价单
- 风险% 从监控单读取,不再手填
- 止损为 **绝对价格**,不再使用「止损偏移%」
- 斐波/突破改为 **程序盯 mark + 触价市价**,不再挂交易所限价单
- 新增 **突破加仓**
- pending **不可改可删**手动平仓自动结束滚仓监控
- pending **不可改,可删**;手动平仓自动结束滚仓监控