Files
qihuo/docs/ORDER_MONITOR.md
T
dekun 169136dd4a Add modular docs with index, WeChat templates, and AI guide.
Document per-module order logic, risk rules, and WeChat message templates with a central INDEX for navigation.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-28 10:49:10 +08:00

152 lines
4.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 下单监控
**页面路径**`/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 | 开仓价 ± (n1)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)