169136dd4a
Document per-module order logic, risk rules, and WeChat message templates with a central INDEX for navigation. Co-authored-by: Cursor <cursoragent@cursor.com>
152 lines
4.6 KiB
Markdown
152 lines
4.6 KiB
Markdown
# 下单监控
|
||
|
||
**页面路径**:`/positions`(默认首页)
|
||
|
||
**相关文件**:`install_trading.py`、`sl_tp_guard.py`、`pending_order_worker.py`、`product_recommend.py`
|
||
|
||
---
|
||
|
||
## 功能结构
|
||
|
||
| 区域 | 说明 |
|
||
|------|------|
|
||
| 顶栏 | 模拟/实盘、CTP 状态、风险状态、权益、连接按钮 |
|
||
| 期货下单 | 手动开仓/平仓表单 |
|
||
| 当前持仓 | pending 挂单 + active 持仓卡片 |
|
||
| 可开仓品种 | 按权益与保证金筛选的推荐表 |
|
||
|
||
---
|
||
|
||
## 下单逻辑
|
||
|
||
### 手动开仓
|
||
|
||
1. 选择品种、方向、限价/市价(FAK)、手数或计仓模式。
|
||
2. **前置校验**(全部通过才报单):
|
||
- CTP 已连接且不在连接中
|
||
- 处于 **交易时段**
|
||
- `assert_can_open()` — 见 [RISK.md](./RISK.md)
|
||
- `assert_product_allowed_for_capital()` — 小账户四品种限制
|
||
- 固定金额模式须填 **止损价**
|
||
- 开启 **移动保本** 须填止损(不可只填止盈)
|
||
- 保证金占用 ≤ `max_margin_pct`
|
||
- 单笔手数 ≤ 50
|
||
3. **计仓**:
|
||
- 固定手数 → 使用 `fixed_lots`
|
||
- 固定金额 → `calc_lots_by_amount()` 按止损距离算手数
|
||
4. **报单**:`execute_order()` → CTP。
|
||
5. **成交后**:
|
||
- 写入 `trade_order_monitors`(status=active 或 pending)
|
||
- 注册本地 SL/TP 守护(`sl_tp_guard`)
|
||
- 微信:结构化开仓推送(有止损)或简版
|
||
- AI:后台开仓分析(有止损时)
|
||
|
||
### 挂单(限价未立即成交)
|
||
|
||
- status=`pending`,显示「挂单中」。
|
||
- **超时撤单**:`pending_order_worker` 每 10 秒 reconcile(有 pending 时);默认超时见系统设置 `pending_order_timeout_sec`。
|
||
- 微信:`委托已提交 · … 挂单中(N 分钟未成交自动撤单)`
|
||
|
||
### 手动平仓
|
||
|
||
- 市价平仓当前品种方向持仓。
|
||
- 关闭对应 monitor,写入 `trade_logs`。
|
||
- 若当日手动平仓次数超限 → 触发冷静期([RISK.md](./RISK.md))。
|
||
- 微信:结构化平仓推送(成交同步后)。
|
||
|
||
### 止盈止损守护
|
||
|
||
后台 `sl_tp_guard` 线程 + tick 事件:
|
||
|
||
| 条件 | 动作 |
|
||
|------|------|
|
||
| 价格触及 **止盈价** | 市价平仓,结果=止盈 |
|
||
| 价格触及 **止损价** | 市价平仓,结果=止损 |
|
||
| 开启 **移动保本** | 见下节 |
|
||
|
||
触发时先推简版「平仓委托已提交」,成交写入 trade_logs 后推 **结构化平仓**。
|
||
|
||
---
|
||
|
||
## 移动保本
|
||
|
||
**开启条件**:下单表单勾选「移动保本」,**必须填写止损**,不设固定止盈。
|
||
|
||
**逻辑**(`sl_tp_guard._update_trailing_stop_loss`):
|
||
|
||
| 浮盈 R 倍数 | 止损移动至 |
|
||
|-------------|------------|
|
||
| ≥ 1R | 开仓价 ± `trailing_be_tick_buffer` 跳(保本) |
|
||
| ≥ 2R | 开仓价 ± 1R |
|
||
| ≥ nR | 开仓价 ± (n−1)R |
|
||
|
||
**平仓结果标签**:
|
||
|
||
- 1R 锁定后止损出场 → **保本止盈**
|
||
- 2R 及以上锁定后止损出场 → **移动止盈**
|
||
|
||
关键位自动单若开启移动保本且设目标盈亏比(默认 3R),达 TP 仍按 **止盈** 平仓;移动止损与显式 TP **可同时生效**。
|
||
|
||
---
|
||
|
||
## 风控规则
|
||
|
||
本板块执行 [RISK.md](./RISK.md) 全部规则,另加:
|
||
|
||
| 规则 | 说明 |
|
||
|------|------|
|
||
| 非交易时段 | 禁止开仓 |
|
||
| 移动保本 | 必须填止损 |
|
||
| 固定金额 | 必须填止损才能算手数 |
|
||
| 保证金 | 新开仓前校验总占用 |
|
||
| 单笔 50 手 | 超限拒绝 |
|
||
|
||
顶栏 **风险状态** 实时反映:正常 / 冷静期 / 日冻结 / 仓位上限。
|
||
|
||
---
|
||
|
||
## 可开仓品种表
|
||
|
||
- 按当前权益、`max_margin_pct`、合约保证金计算可开手数。
|
||
- 权益 ≤20 万或 CTP 未连接:仅四品种;未连接按 10 万权益估算。
|
||
- 夜盘时段过滤无夜盘品种。
|
||
- 每日后台刷新 `product_recommend_cache`。
|
||
|
||
详见 [TRADING.md](./TRADING.md)。
|
||
|
||
---
|
||
|
||
## 微信推送
|
||
|
||
| 事件 | 模板 |
|
||
|------|------|
|
||
| 开仓成交(有止损) | [WECHAT §1](./WECHAT.md#1-手动开仓成功) |
|
||
| 开仓成交(无止损) | [WECHAT §2](./WECHAT.md#2-简版开仓) |
|
||
| 挂单提交 | [WECHAT §3](./WECHAT.md#3-挂单提交) |
|
||
| 平仓完成 | [WECHAT §4](./WECHAT.md#4-平仓完成) |
|
||
| SL/TP 触发 | [WECHAT §5](./WECHAT.md#5-本地止盈止损触发) |
|
||
| AI 分析 | [AI.md](./AI.md)(仅页面,默认不推微信) |
|
||
|
||
---
|
||
|
||
## 数据流
|
||
|
||
```
|
||
用户下单 → API /api/trade/order
|
||
→ CTP 报单
|
||
→ trade_order_monitors
|
||
→ sl_tp_guard 监控
|
||
→ 平仓 → trade_logs → 微信 + AI
|
||
```
|
||
|
||
SSE:`/api/trading/stream` 推送持仓快照,无需整页刷新。
|
||
|
||
---
|
||
|
||
## 相关文档
|
||
|
||
- [RISK.md](./RISK.md)
|
||
- [WECHAT.md](./WECHAT.md)
|
||
- [TRADING.md](./TRADING.md)
|
||
- [SETTINGS.md](./SETTINGS.md)
|