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>
This commit is contained in:
+152
@@ -0,0 +1,152 @@
|
||||
# AI 分析
|
||||
|
||||
**页面路径**:`/ai`(须在系统设置 → 导航显示 中开启「AI 分析」)
|
||||
|
||||
**相关文件**:`ai_client.py`、`ai_worker.py`、`ai_messages.py`、`templates/ai_messages.html`
|
||||
|
||||
---
|
||||
|
||||
## 功能概述
|
||||
|
||||
| 能力 | 说明 |
|
||||
|------|------|
|
||||
| 开仓分析 | 手动/关键位开仓成交后后台分析 |
|
||||
| 平仓分析 | 写入 `trade_logs` 平仓记录后分析 |
|
||||
| 日终报告 | 每日定时汇总当日交易与持仓 |
|
||||
| 消息存档 | 全部写入 `ai_messages` 表,页面可浏览 |
|
||||
| 微信推送 | 可选:分析成功后推送到企业微信 |
|
||||
|
||||
---
|
||||
|
||||
## 配置项(系统设置 → AI 分析)
|
||||
|
||||
| 设置键 | 说明 | 默认 |
|
||||
|--------|------|------|
|
||||
| `ai_enabled` | 总开关 | 关 |
|
||||
| `ai_provider` | `ollama` / `openai` | ollama |
|
||||
| `ai_ollama_base_url` | Ollama 地址 | `http://127.0.0.1:11434` |
|
||||
| `ai_ollama_model` | Ollama 模型 | `qwen2.5:7b` |
|
||||
| `ai_openai_base_url` | OpenAI 兼容 API | `https://api.openai.com/v1` |
|
||||
| `ai_openai_api_key` | API Key | 空 |
|
||||
| `ai_openai_model` | 模型名 | `gpt-4o-mini` |
|
||||
| `ai_daily_report_enabled` | 日终报告开关 | 开 |
|
||||
| `ai_daily_report_hour` | 报告时刻(时) | 15 |
|
||||
| `ai_daily_report_minute` | 报告时刻(分) | 5 |
|
||||
|
||||
---
|
||||
|
||||
## 触发时机
|
||||
|
||||
### 1. 开仓分析(`kind=open`)
|
||||
|
||||
- **触发**:下单监控手动开仓 **成交** 且填写止损 → `notify_manual_open_filled()` 调度。
|
||||
- **标题**:`{品种名} 开仓`
|
||||
- **Payload**:symbol、direction、entry、stop_loss、take_profit、lots、capital
|
||||
|
||||
### 2. 关键位开仓(`kind=key_open`)
|
||||
|
||||
- **触发**:箱体/收敛突破自动单成交 → `notify_key_breakout_open()` 调度。
|
||||
- **标题**:`{品种名} 关键位开仓`
|
||||
- **Payload**:monitor_type、trade_mode、break_side、entry、stop_loss、take_profit、lots
|
||||
|
||||
### 3. 平仓分析(`kind=close`)
|
||||
|
||||
- **触发**:`trade_logs` 新增平仓 → `notify_trade_log_close()` 调度。
|
||||
- **标题**:`{品种名} 平仓`
|
||||
- **Payload**:source、result、pnl_net、entry、close_price、lots
|
||||
|
||||
### 4. 日终报告(`kind=daily_report`)
|
||||
|
||||
- **触发**:后台 `ai_worker` 每分钟检查;到达设定时刻且当日未生成过。
|
||||
- **标题**:`{YYYY-MM-DD} 日终持仓与交易报告`
|
||||
- **Payload**:当日成交汇总、胜负次数、净盈亏、active 持仓列表
|
||||
|
||||
> 开仓/平仓的 AI 分析 **默认不推微信**(仅写入页面);日终报告与可在设置中开启的推送见下文。
|
||||
|
||||
---
|
||||
|
||||
## 分析逻辑
|
||||
|
||||
**System Prompt**(固定):
|
||||
|
||||
```
|
||||
你是国内期货交易复盘助手。根据提供的结构化交易数据,
|
||||
用简洁中文给出 3~6 条要点:风险、纪律、改进建议。
|
||||
不要编造未提供的数据;金额单位为元。
|
||||
```
|
||||
|
||||
**User Prompt**:
|
||||
|
||||
```
|
||||
事件类型:{event_kind}
|
||||
|
||||
数据:
|
||||
{JSON payload}
|
||||
```
|
||||
|
||||
**接口**:
|
||||
|
||||
- Ollama:`POST {base}/api/chat`
|
||||
- OpenAI 兼容:`POST {base}/chat/completions`,temperature=0.4
|
||||
|
||||
失败时内容前加 `⚠`,仍写入 `ai_messages`。
|
||||
|
||||
---
|
||||
|
||||
## 微信推送
|
||||
|
||||
| 类型 | 条件 | 模板 |
|
||||
|------|------|------|
|
||||
| 事件分析 | AI 调用成功 **且** 调度时传入 `send_wechat_fn` | 见 [WECHAT.md §12](./WECHAT.md#12-ai-分析) |
|
||||
| 日终报告 | `ai_daily_report_enabled=1` 且 AI 成功 | `🤖 {date} 日终持仓与交易报告\n\n{content[:1800]}` |
|
||||
|
||||
**说明**:
|
||||
|
||||
- 当前实现中,开仓/平仓触发的 `schedule_ai_event_analysis()` **未绑定** `send_wechat_fn`,故 **仅存档到 /ai 页面**。
|
||||
- 日终报告在 `maybe_run_daily_ai_report()` 中会推微信(成功时)。
|
||||
- 正文截断为 **1800 字符**,避免超长。
|
||||
|
||||
---
|
||||
|
||||
## 下单逻辑
|
||||
|
||||
AI **不参与下单**,仅事后分析。无 `assert_can_open` 或 CTP 交互。
|
||||
|
||||
---
|
||||
|
||||
## 风控规则
|
||||
|
||||
AI 模块无独立风控。其输入数据来自已发生的交易事件,不改变账户冻结、保证金等状态。
|
||||
|
||||
---
|
||||
|
||||
## 后台任务
|
||||
|
||||
- 线程名:`ai-worker`
|
||||
- 启动延迟 30 秒后,每 **60 秒** 检查是否该跑日终报告
|
||||
- 与 `background_task`(计划/关键位)独立运行
|
||||
|
||||
---
|
||||
|
||||
## 数据存储
|
||||
|
||||
表 `ai_messages`:
|
||||
|
||||
| 字段 | 说明 |
|
||||
|------|------|
|
||||
| kind | open / key_open / close / daily_report |
|
||||
| title | 标题 |
|
||||
| content | AI 回复正文 |
|
||||
| meta | JSON payload |
|
||||
| created_at | 创建时间 |
|
||||
|
||||
页面 `/ai` 按时间倒序展示;上方含使用说明卡片。
|
||||
|
||||
---
|
||||
|
||||
## 相关文档
|
||||
|
||||
- [WECHAT.md §12](./WECHAT.md#12-ai-分析) — 推送模板
|
||||
- [ORDER_MONITOR.md](./ORDER_MONITOR.md) — 手动开仓触发 AI
|
||||
- [KEY_MONITORS.md](./KEY_MONITORS.md) — 关键位开仓触发 AI
|
||||
- [SETTINGS.md](./SETTINGS.md) — 配置入口
|
||||
+22
-8
@@ -2,6 +2,9 @@
|
||||
|
||||
国内期货 · 交易复盘系统(Flask + SQLite + vnpy_ctp + PM2)。
|
||||
|
||||
> **分板块详细说明(含下单逻辑、风控、微信模板)** → [INDEX.md](./INDEX.md)
|
||||
> 重点:[WECHAT.md](./WECHAT.md) · [AI.md](./AI.md) · [RISK.md](./RISK.md)
|
||||
|
||||
---
|
||||
|
||||
## 系统概览
|
||||
@@ -26,6 +29,7 @@
|
||||
| 行情 K 线 | `/market` | 是 |
|
||||
| 交易记录与复盘 | `/records` | 否 |
|
||||
| 统计分析 | `/stats` | 否 |
|
||||
| AI 分析 | `/ai` | 是 |
|
||||
| 手续费配置 | `/fees` | 是 |
|
||||
| 系统设置 | `/settings` | 否 |
|
||||
|
||||
@@ -35,7 +39,7 @@
|
||||
|
||||
## 下单监控
|
||||
|
||||
**路径**:`/positions`
|
||||
**路径**:`/positions` · 详见 [ORDER_MONITOR.md](./ORDER_MONITOR.md)
|
||||
|
||||
### 顶栏
|
||||
|
||||
@@ -73,7 +77,7 @@
|
||||
|
||||
## 策略交易
|
||||
|
||||
**路径**:`/strategy`、`/strategy/records`
|
||||
**路径**:`/strategy`、`/strategy/records` · 详见 [STRATEGY.md](./STRATEGY.md)
|
||||
|
||||
- 趋势回调自动补仓、顺势加仓等(需 CTP 已连接且有 active 持仓监控)
|
||||
- 策略记录单独归档
|
||||
@@ -82,7 +86,7 @@
|
||||
|
||||
## 开单计划
|
||||
|
||||
**路径**:`/plans`
|
||||
**路径**:`/plans` · 详见 [PLANS.md](./PLANS.md)
|
||||
|
||||
- 录入当日计划:主力合约、方向、决策区间、止损、止盈
|
||||
- 状态:`planned` → `active` → `closed` / `expired`
|
||||
@@ -104,7 +108,7 @@
|
||||
|
||||
## 行情 K 线
|
||||
|
||||
**路径**:`/market`
|
||||
**路径**:`/market` · 详见 [MARKET.md](./MARKET.md)
|
||||
|
||||
- 多周期 K 线(TradingView Lightweight Charts)
|
||||
- 支持 CTP 连接后部分数据增强
|
||||
@@ -114,7 +118,7 @@
|
||||
|
||||
## 交易记录与复盘
|
||||
|
||||
**路径**:`/records`(`/trades` 重定向至此)
|
||||
**路径**:`/records`(`/trades` 重定向至此) · 详见 [RECORDS.md](./RECORDS.md)
|
||||
|
||||
### 资金曲线
|
||||
|
||||
@@ -140,7 +144,7 @@
|
||||
|
||||
## 统计分析
|
||||
|
||||
**路径**:`/stats`
|
||||
**路径**:`/stats` · 详见 [STATS.md](./STATS.md)
|
||||
|
||||
### 汇总指标(单行卡片)
|
||||
|
||||
@@ -156,6 +160,16 @@
|
||||
|
||||
---
|
||||
|
||||
## AI 分析
|
||||
|
||||
**路径**:`/ai` · 详见 [AI.md](./AI.md)
|
||||
|
||||
- 开仓/平仓/关键位成交后后台 AI 复盘(Ollama 或 OpenAI 兼容 API)
|
||||
- 日终持仓与交易报告(可推微信)
|
||||
- 消息存档于 `/ai` 页面;配置见系统设置 → AI 分析
|
||||
|
||||
---
|
||||
|
||||
## 手续费配置
|
||||
|
||||
**路径**:`/fees`
|
||||
@@ -168,7 +182,7 @@
|
||||
|
||||
## 系统设置
|
||||
|
||||
**路径**:`/settings`
|
||||
**路径**:`/settings` · 详见 [SETTINGS.md](./SETTINGS.md)
|
||||
|
||||
| 功能 | 说明 |
|
||||
|------|------|
|
||||
@@ -178,7 +192,7 @@
|
||||
| 保证金上限、移动保本缓冲、挂单超时 | 保证金上限默认 30%;移动保本缓冲为达 1R 后止损相对开仓价的跳数(默认 2 跳) |
|
||||
| CTP 连接 | SimNow / 实盘前置与账号(可覆盖 `.env`) |
|
||||
| 参考资金 | CTP 未连接时用于可开仓筛选与估算 |
|
||||
| 企业微信 Webhook | 计划/关键位推送 |
|
||||
| 企业微信 Webhook | 计划/关键位/交易/AI 推送 · 见 [WECHAT.md](./WECHAT.md) |
|
||||
| 登录账号 | 用户名/密码,同步写入 `.env` |
|
||||
| 数据备份与恢复 | 自动/手动备份、下载压缩包、恢复说明 |
|
||||
| 深色/浅色主题 | 页头切换 |
|
||||
|
||||
@@ -0,0 +1,55 @@
|
||||
# 文档索引
|
||||
|
||||
国内期货 · 交易复盘系统各板块说明。每篇文档包含 **下单逻辑**、**风控规则**,并在需要时引用 [微信推送模板](./WECHAT.md)。
|
||||
|
||||
---
|
||||
|
||||
## 总览
|
||||
|
||||
| 文档 | 说明 |
|
||||
|------|------|
|
||||
| [FEATURES.md](./FEATURES.md) | 功能总览与导航结构 |
|
||||
| [RISK.md](./RISK.md) | **全局账户风控**(冷静期、仓位上限、保证金、品种范围) |
|
||||
| [WECHAT.md](./WECHAT.md) | **企业微信推送**(全部消息类型与完整模板) |
|
||||
| [AI.md](./AI.md) | **AI 分析**(配置、触发、输出、推送) |
|
||||
|
||||
---
|
||||
|
||||
## 各板块说明
|
||||
|
||||
| 板块 | 路径 | 文档 |
|
||||
|------|------|------|
|
||||
| 下单监控 | `/positions` | [ORDER_MONITOR.md](./ORDER_MONITOR.md) |
|
||||
| 策略交易 | `/strategy` | [STRATEGY.md](./STRATEGY.md) |
|
||||
| 开单计划 | `/plans` | [PLANS.md](./PLANS.md) |
|
||||
| 关键位监控 | `/keys` | [KEY_MONITORS.md](./KEY_MONITORS.md) |
|
||||
| 行情 K 线 | `/market` | [MARKET.md](./MARKET.md) |
|
||||
| 交易记录与复盘 | `/records` | [RECORDS.md](./RECORDS.md) |
|
||||
| 统计分析 | `/stats` | [STATS.md](./STATS.md) |
|
||||
| 手续费配置 | `/fees` | [FEES.md](./FEES.md) |
|
||||
| 系统设置 | `/settings` | [SETTINGS.md](./SETTINGS.md) |
|
||||
|
||||
---
|
||||
|
||||
## 部署与运维
|
||||
|
||||
| 文档 | 说明 |
|
||||
|------|------|
|
||||
| [TRADING.md](./TRADING.md) | 可开仓品种、计仓、SimNow/实盘 |
|
||||
| [DEPLOY.md](./DEPLOY.md) | 部署说明 |
|
||||
| [BACKUP.md](./BACKUP.md) | 数据备份与恢复 |
|
||||
| [SIMNOW.md](./SIMNOW.md) | SimNow 模拟盘 |
|
||||
|
||||
---
|
||||
|
||||
## 快速查找
|
||||
|
||||
| 想了解… | 看这里 |
|
||||
|---------|--------|
|
||||
| 手动下单怎么校验 | [ORDER_MONITOR.md](./ORDER_MONITOR.md) |
|
||||
| 关键位自动单规则 | [KEY_MONITORS.md](./KEY_MONITORS.md) |
|
||||
| 开单计划何时推送 | [PLANS.md](./PLANS.md) + [WECHAT.md#开单计划](./WECHAT.md) |
|
||||
| 开仓/平仓微信长文格式 | [WECHAT.md#结构化推送](./WECHAT.md) |
|
||||
| AI 何时分析、推什么 | [AI.md](./AI.md) |
|
||||
| 手动平仓后为何冻结 | [RISK.md#冷静期与日冻结](./RISK.md) |
|
||||
| 移动保本怎么抬止损 | [ORDER_MONITOR.md#移动保本](./ORDER_MONITOR.md) |
|
||||
+31
-2
@@ -4,6 +4,8 @@
|
||||
|
||||
关键位监控用于在指定价格区间上设置 **5 分钟收盘** 触发规则,分为 **自动单**(箱体/收敛突破)与 **仅微信提醒**(关键支阻区)两类。
|
||||
|
||||
**文档索引**:[INDEX.md](./INDEX.md) · 微信模板:[WECHAT.md §6–§8](./WECHAT.md) · 风控:[RISK.md](./RISK.md)
|
||||
|
||||
---
|
||||
|
||||
## 监控类型
|
||||
@@ -30,7 +32,7 @@
|
||||
|------|------|
|
||||
| 区间 | **上沿 = 阻力**,**下沿 = 支撑**,合并为一个关键支阻区 |
|
||||
| 触发 | 5m 收盘突破上沿或跌破下沿 |
|
||||
| 推送 | 企业微信,格式含突破方向、触发收盘、区间上下沿等 |
|
||||
| 推送 | 企业微信,见 [WECHAT §8](./WECHAT.md#8-关键支阻区提醒) |
|
||||
| 次数 | 最多 **3 次**,间隔约 **5 分钟**(人工盯盘提醒) |
|
||||
| 自动开仓 | **否** |
|
||||
| 结案 | 第 3 次推送后自动归档 |
|
||||
@@ -61,4 +63,31 @@
|
||||
- 自动单逻辑:`key_monitor_lib.py` + `install_trading._execute_key_breakout`
|
||||
- 止盈止损监控:`sl_tp_guard.py`(移动保本 + 显式止盈价可同时生效)
|
||||
|
||||
详见 [FEATURES.md](./FEATURES.md) 功能总览。
|
||||
## 下单逻辑(自动单)
|
||||
|
||||
1. 后台 `background_task` 约每 3 秒调用 `run_key_monitor_check()`。
|
||||
2. 拉取 5m K 线(优先 CTP),判断收盘价是否突破上/下沿。
|
||||
3. **箱体突破 / 收敛突破**:
|
||||
- 顺势/反转决定方向(上破做多或做空等)。
|
||||
- 校验:交易时段、CTP、`assert_can_open()`、[RISK.md](./RISK.md) 全部规则。
|
||||
- 手数:按 `risk_percent` + `max_margin_pct` 计算。
|
||||
- **止损**:突破 K 线最低(多)/ 最高(空)± **2 跳**。
|
||||
- **止盈**:默认盈亏比 **2**(可改 0.5~10);开启移动保本时默认 **3R** TP。
|
||||
- **报单**:CTP 市价开仓 → 写入 `trade_order_monitors` → `sl_tp_guard` 守护。
|
||||
4. 同一根 5m K 线只触发一次;触发后移入历史(成败皆然)。
|
||||
5. 成交:微信 [§7](./WECHAT.md#7-关键位开仓成功);失败/摘要:[§6](./WECHAT.md#6-关键位自动单)。
|
||||
|
||||
## 风控规则
|
||||
|
||||
| 规则 | 自动单 | 支阻区 |
|
||||
|------|--------|--------|
|
||||
| assert_can_open | ✓ | — |
|
||||
| 保证金 / 品种 | ✓ | — |
|
||||
| 交易时段 | ✓ | — |
|
||||
| 自动下单 | ✓ | ✗ |
|
||||
|
||||
全局规则见 [RISK.md](./RISK.md)。
|
||||
|
||||
---
|
||||
|
||||
详见 [FEATURES.md](./FEATURES.md) · [INDEX.md](./INDEX.md)
|
||||
|
||||
@@ -0,0 +1,51 @@
|
||||
# 行情 K 线
|
||||
|
||||
**页面路径**:`/market`
|
||||
|
||||
**相关文件**:`market.py`、`kline_chart.py`、`templates/market.html`
|
||||
|
||||
---
|
||||
|
||||
## 功能概述
|
||||
|
||||
- 多周期 K 线图表(TradingView Lightweight Charts)
|
||||
- 品种选择与周期切换
|
||||
- CTP 连接后部分品种可获取更及时数据
|
||||
|
||||
须在 **系统设置 → 导航显示** 开启「行情 K 线」;关闭后直接访问 URL 会提示并跳回下单监控。
|
||||
|
||||
---
|
||||
|
||||
## 下单逻辑
|
||||
|
||||
**本板块无下单功能**,纯行情展示。
|
||||
|
||||
---
|
||||
|
||||
## 风控规则
|
||||
|
||||
无独立风控。不涉及报单、推送或账户状态变更。
|
||||
|
||||
---
|
||||
|
||||
## 微信推送
|
||||
|
||||
**无**。行情页不发送任何企业微信消息。
|
||||
|
||||
---
|
||||
|
||||
## 数据来源
|
||||
|
||||
| 优先级 | 来源 |
|
||||
|--------|------|
|
||||
| 1 | CTP tick/K 线(已连接时) |
|
||||
| 2 | 新浪 / 同花顺 iFinD(见 `QUOTE_SOURCE` 配置) |
|
||||
|
||||
合约代码格式见 [FEATURES.md](./FEATURES.md#合约代码格式)。
|
||||
|
||||
---
|
||||
|
||||
## 相关文档
|
||||
|
||||
- [FEATURES.md](./FEATURES.md)
|
||||
- [SETTINGS.md](./SETTINGS.md)
|
||||
@@ -0,0 +1,151 @@
|
||||
# 下单监控
|
||||
|
||||
**页面路径**:`/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)
|
||||
+108
@@ -0,0 +1,108 @@
|
||||
# 开单计划
|
||||
|
||||
**页面路径**:`/plans`
|
||||
|
||||
**相关文件**:`app.py`(`check_order_plans`、`background_task`)
|
||||
|
||||
---
|
||||
|
||||
## 功能概述
|
||||
|
||||
录入 **当日交易计划**:品种、方向、决策价格区间、止损、止盈、决策理由。系统轮询现价,进入区间后 **微信提醒** 并激活监控;触及 TP/SL 后记录结果并结案。
|
||||
|
||||
> **不自动向 CTP 下单**,仅提醒 + 记录。
|
||||
|
||||
---
|
||||
|
||||
## 计划状态
|
||||
|
||||
```
|
||||
planned → active → closed
|
||||
↘ expired(过期,非当日)
|
||||
```
|
||||
|
||||
| 状态 | 含义 |
|
||||
|------|------|
|
||||
| `planned` | 已录入,等待价格进入决策区间 |
|
||||
| `active` | 已进入区间,监控 TP/SL |
|
||||
| `closed` | 触及止盈或止损,已结案 |
|
||||
| `expired` | 非当日计划自动过期 |
|
||||
|
||||
---
|
||||
|
||||
## 下单逻辑
|
||||
|
||||
本模块 **无 CTP 报单**。
|
||||
|
||||
### 1. 录入(用户操作)
|
||||
|
||||
- 主力合约、方向(多/空)
|
||||
- **决策区间**:`zone_lower` ~ `zone_upper`
|
||||
- 止损价、止盈价
|
||||
- 决策理由(可选,推送时展示)
|
||||
|
||||
### 2. 触发激活(后台 ~3 秒)
|
||||
|
||||
条件:`status=planned` 且 `zone_lower ≤ 现价 ≤ zone_upper`
|
||||
|
||||
动作:
|
||||
|
||||
1. 发送微信 [WECHAT §9](./WECHAT.md#9-开单计划)
|
||||
2. `status → active`,记录 `triggered_at`
|
||||
|
||||
### 3. 止盈止损监控(active)
|
||||
|
||||
| 方向 | 止盈 | 止损 |
|
||||
|------|------|------|
|
||||
| 多 | 现价 ≥ take_profit | 现价 ≤ stop_loss |
|
||||
| 空 | 现价 ≤ take_profit | 现价 ≥ stop_loss |
|
||||
|
||||
触发后:
|
||||
|
||||
1. 微信 [WECHAT §10](./WECHAT.md#10-开单计划结果)
|
||||
2. 写入 `trade_records`(monitor_type=开单计划)
|
||||
3. `status → closed`
|
||||
|
||||
### 4. 前端轮询
|
||||
|
||||
列表约 1 秒请求 `/api/plan_prices` 刷新现价。
|
||||
|
||||
---
|
||||
|
||||
## 风控规则
|
||||
|
||||
| 项 | 说明 |
|
||||
|----|------|
|
||||
| 账户冷静期 | **不校验** — 计划不自动开仓 |
|
||||
| 保证金 / 品种 | **不校验** |
|
||||
| 交易时段 | 轮询全天运行,非交易时段仍可推送 |
|
||||
| 同日计划 | `plan_date` 为当日;跨日 `expire_old_plans()` |
|
||||
|
||||
用户收到提醒后若手动下单,须自行遵守 [RISK.md](./RISK.md)。
|
||||
|
||||
---
|
||||
|
||||
## 微信推送
|
||||
|
||||
| 事件 | 文档 |
|
||||
|------|------|
|
||||
| 进入决策区间 | [WECHAT §9](./WECHAT.md#9-开单计划) |
|
||||
| 触及 TP/SL | [WECHAT §10](./WECHAT.md#10-开单计划结果) |
|
||||
|
||||
**配置**:系统设置 → 企业微信 Webhook。
|
||||
|
||||
---
|
||||
|
||||
## 数据库
|
||||
|
||||
表 `order_plans`:symbol、direction、zone_upper/lower、stop_loss、take_profit、status、plan_date 等。
|
||||
|
||||
触发结果写入 `trade_records`(非 `trade_logs`,不计入 CTP 同步统计主表)。
|
||||
|
||||
---
|
||||
|
||||
## 相关文档
|
||||
|
||||
- [WECHAT.md](./WECHAT.md)
|
||||
- [ORDER_MONITOR.md](./ORDER_MONITOR.md) — 收到提醒后手动下单
|
||||
- [RECORDS.md](./RECORDS.md)
|
||||
@@ -0,0 +1,85 @@
|
||||
# 交易记录与复盘
|
||||
|
||||
**页面路径**:`/records`(`/trades` 重定向)
|
||||
|
||||
**相关文件**:`app.py`、`ctp_trade_sync.py`、`sl_tp_guard.py`(write_trade_log)
|
||||
|
||||
---
|
||||
|
||||
## 功能结构
|
||||
|
||||
| 区域 | 说明 |
|
||||
|------|------|
|
||||
| 资金曲线 | Lightweight Charts,随主题变色 |
|
||||
| 交易记录 | `trade_logs` 主表 |
|
||||
| 复盘表单 | 手动复盘 + 截图 + 自动 K 线图 |
|
||||
| 复盘历史 | 按日/周/月/自定义筛选 |
|
||||
|
||||
---
|
||||
|
||||
## 下单逻辑
|
||||
|
||||
本板块 **不提供报单**。记录来源:
|
||||
|
||||
| 来源 | source / monitor_type | 写入方式 |
|
||||
|------|----------------------|----------|
|
||||
| 程序平仓 | 本地 | sl_tp_guard、手动平仓 API |
|
||||
| 柜台同步 | 柜台 | CTP 成交同步 `ctp_trade_sync` |
|
||||
| 开单计划 | 开单计划 | 仅 `trade_records`,非 trade_logs 主统计 |
|
||||
|
||||
### CTP 同步
|
||||
|
||||
打开页面且 CTP 已连接时,自动拉取柜台成交写入 `trade_logs`(去重键 `ctp_trade_key`)。
|
||||
|
||||
### 手动编辑
|
||||
|
||||
「修改/核对开关」开启后可编辑字段并「核对修改」。
|
||||
|
||||
---
|
||||
|
||||
## 风控规则
|
||||
|
||||
### 复盘与账户冻结
|
||||
|
||||
提交复盘表单时若勾选 **情绪问题选项**(怕踏空、报复开仓等),可能触发:
|
||||
|
||||
- **日冻结** — 当日禁止新开仓([RISK.md](./RISK.md))
|
||||
- 手动平仓超限后的冷静期可因填写日记缩短为 **1 小时**
|
||||
|
||||
### 记录本身
|
||||
|
||||
交易记录页不改变持仓;删除/编辑仅影响本地数据库。
|
||||
|
||||
---
|
||||
|
||||
## 平仓后的联动
|
||||
|
||||
`trade_logs` 新增平仓记录时:
|
||||
|
||||
1. **微信**:结构化平仓 [WECHAT §4](./WECHAT.md#4-平仓完成)
|
||||
2. **AI**:后台平仓分析 → `/ai` 页面([AI.md](./AI.md))
|
||||
|
||||
---
|
||||
|
||||
## 主要字段
|
||||
|
||||
品种、类型(monitor_type)、方向、开仓/平仓价、止损/止盈、手数、保证金、盈亏、手续费、净盈亏、最新资金、结果、持仓时长。
|
||||
|
||||
---
|
||||
|
||||
## 微信推送
|
||||
|
||||
| 事件 | 模板 |
|
||||
|------|------|
|
||||
| 程序/同步平仓 | [WECHAT §4](./WECHAT.md#4-平仓完成) |
|
||||
|
||||
开单计划结果见 [PLANS.md](./PLANS.md)(§10 简版模板)。
|
||||
|
||||
---
|
||||
|
||||
## 相关文档
|
||||
|
||||
- [STATS.md](./STATS.md) — 统计来源 trade_logs
|
||||
- [RISK.md](./RISK.md) — 复盘触发冻结
|
||||
- [WECHAT.md](./WECHAT.md)
|
||||
- [AI.md](./AI.md)
|
||||
+115
@@ -0,0 +1,115 @@
|
||||
# 全局账户风控
|
||||
|
||||
本文汇总 **所有板块共用** 的风控规则。各板块下单前均会调用 `assert_can_open()` 或等价校验。
|
||||
|
||||
相关代码:`risk/account_risk_lib.py`、`position_sizing.py`、`product_recommend.py`。
|
||||
|
||||
---
|
||||
|
||||
## 仓位上限
|
||||
|
||||
| 项 | 默认值 | 说明 |
|
||||
|----|--------|------|
|
||||
| `MAX_ACTIVE_POSITIONS` | 1 | 同时 **active** 持仓监控数量上限 |
|
||||
| 环境变量 | `.env` | `MAX_ACTIVE_POSITIONS=1` |
|
||||
|
||||
- 达到上限后:**禁止新开仓**,但允许 **滚仓/顺势加仓**(`can_roll=True`)。
|
||||
- 状态标签:**仓位上限冻结**。
|
||||
|
||||
---
|
||||
|
||||
## 冷静期与日冻结
|
||||
|
||||
| 项 | 默认值 | 说明 |
|
||||
|----|--------|------|
|
||||
| `RISK_CONTROL_ENABLED` | true | 关闭后跳过冷静期逻辑 |
|
||||
| `RISK_MANUAL_CLOSE_DAILY_LIMIT` | 2 | 当日 **手动平仓** 次数上限 |
|
||||
| `RISK_COOLING_HOURS_MANUAL` | 4 | 超限后冷静期(小时) |
|
||||
| `RISK_COOLING_HOURS_MANUAL_JOURNAL` | 1 | 填写复盘情绪日记后缩短为 1 小时 |
|
||||
| `TRADING_DAY_RESET_HOUR` | 8 | 交易日重置时刻(8 点前算上一交易日) |
|
||||
|
||||
### 触发流程
|
||||
|
||||
1. 用户在下单监控 **手动平仓**,且当日手动平仓次数 ≥ 上限。
|
||||
2. 进入 **4h 冻结**(或填写复盘表单中的情绪问题选项后 → **1h 冻结**)。
|
||||
3. 冻结期间 `can_trade=False`,禁止一切新开仓。
|
||||
|
||||
### 日冻结
|
||||
|
||||
- 复盘表单勾选情绪问题(怕踏空、报复开仓、盈利飘了、拿不住单、扛单、重仓违规等)并提交后,可触发 **当日日冻结**。
|
||||
- 日冻结期间禁止新开仓,次日(按 `TRADING_DAY_RESET_HOUR`)重置。
|
||||
|
||||
---
|
||||
|
||||
## 保证金占用上限
|
||||
|
||||
| 项 | 配置位置 | 默认值 |
|
||||
|----|----------|--------|
|
||||
| 新开仓上限 | 系统设置 `max_margin_pct` | 30% |
|
||||
| 滚仓上限 | 系统设置 `roll_max_margin_pct` | 单独配置 |
|
||||
|
||||
- 新开仓前计算:现有持仓保证金 + 拟开仓位保证金,占权益比例不得超过 `max_margin_pct`。
|
||||
- **滚仓/顺势加仓** 使用 `roll_max_margin_pct` 单独收紧手数(见 [STRATEGY.md](./STRATEGY.md))。
|
||||
|
||||
---
|
||||
|
||||
## 计仓与单笔手数
|
||||
|
||||
| 模式 | 说明 |
|
||||
|------|------|
|
||||
| 固定手数 | 使用系统设置 `fixed_lots` |
|
||||
| 固定金额(以损定仓) | 须填止损价;手数 = 固定风险金额 ÷ 每手风险;同时受保证金上限约束 |
|
||||
| 单笔上限 | `DEFAULT_MAX_ORDER_LOTS = 50` |
|
||||
|
||||
固定金额模式公式(简化):
|
||||
|
||||
```
|
||||
每手风险 = |入场价 − 止损价| × 合约乘数
|
||||
手数 = floor(固定风险金额 / 每手风险)
|
||||
再按 max_margin_pct 收紧
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 可交易品种范围
|
||||
|
||||
| 条件 | 规则 |
|
||||
|------|------|
|
||||
| 权益 ≤ 20 万 **或** CTP 未连接 | 仅可交易:**玉米、豆粕、甲醇、螺纹钢** |
|
||||
| CTP 未连接时估算 | 可开仓表按 **10 万权益** 估算最大手数 |
|
||||
| 夜盘时段 | 可开仓表仅显示有夜盘品种 |
|
||||
|
||||
详见 [TRADING.md](./TRADING.md)、[ORDER_MONITOR.md](./ORDER_MONITOR.md)。
|
||||
|
||||
---
|
||||
|
||||
## 交易时段
|
||||
|
||||
- 非交易时段:**禁止报单**(开仓/平仓 API 返回 403)。
|
||||
- CTP 未连接:禁止下单;连接中提示稍候。
|
||||
|
||||
---
|
||||
|
||||
## 各板块风控对照
|
||||
|
||||
| 板块 | 开仓前校验 | 特殊规则 |
|
||||
|------|------------|----------|
|
||||
| 下单监控 | 全部全局规则 + 保证金 + 品种 | 移动保本须填止损 |
|
||||
| 关键位自动单 | 同上 + 交易时段 + CTP | 手数按 risk_percent 计算 |
|
||||
| 策略首仓 | 同上 | 趋势回调计划单独表 |
|
||||
| 滚仓/加仓 | 仓位上限冻结时仍可滚仓 | 滚仓保证金单独上限 |
|
||||
| 开单计划 | **不自动下单**,仅提醒 | 无 assert_can_open |
|
||||
| 关键支阻区 | 不自动下单 | 仅微信提醒 |
|
||||
|
||||
---
|
||||
|
||||
## 风险状态展示
|
||||
|
||||
下单监控顶栏显示当前状态:
|
||||
|
||||
| 状态 | 含义 |
|
||||
|------|------|
|
||||
| 正常 | 可新开仓 |
|
||||
| 1h / 4h 冻结 | 冷静期中 |
|
||||
| 日冻结 | 当日禁止新开仓 |
|
||||
| 仓位上限冻结 | 已达 active 上限,可滚仓不可开新仓 |
|
||||
@@ -0,0 +1,79 @@
|
||||
# 系统设置
|
||||
|
||||
**页面路径**:`/settings`
|
||||
|
||||
**相关文件**:`app.py`、`install_trading.py`、`nav_settings.py`
|
||||
|
||||
---
|
||||
|
||||
## 配置分区
|
||||
|
||||
| 分区 | 主要项 | 影响板块 |
|
||||
|------|--------|----------|
|
||||
| 导航显示 | 策略、计划、行情、手续费、AI 等开关 | 全部可关闭菜单 |
|
||||
| 交易模式 | SimNow / 实盘 CTP | 下单、策略、同步 |
|
||||
| 计仓与风险 | 固定手数/固定金额、risk_percent、max_margin_pct、roll_max_margin_pct | [ORDER_MONITOR](./ORDER_MONITOR.md)、[STRATEGY](./STRATEGY.md) |
|
||||
| 移动保本 | trailing_be_tick_buffer | 下单、关键位自动单 |
|
||||
| 挂单超时 | pending_order_timeout_sec | 下单监控 pending |
|
||||
| CTP 连接 | 前置、账号(可覆盖 .env) | 全部交易 |
|
||||
| 参考资金 | CTP 未连接时权益估算 | 可开仓品种表 |
|
||||
| 企业微信 | wechat_webhook | [WECHAT.md](./WECHAT.md) 全部推送 |
|
||||
| AI 分析 | 见 [AI.md](./AI.md) | /ai 页面 |
|
||||
| 登录账号 | 用户名/密码 → .env | 登录 |
|
||||
| 备份恢复 | 见 [BACKUP.md](./BACKUP.md) | 数据库 |
|
||||
|
||||
---
|
||||
|
||||
## 下单逻辑
|
||||
|
||||
设置页 **不直接下单**。修改项在下次 API 调用时生效;部分 CTP 配置需重连。
|
||||
|
||||
---
|
||||
|
||||
## 风控相关默认值
|
||||
|
||||
| 设置键 | 默认 | 说明 |
|
||||
|--------|------|------|
|
||||
| risk_percent | 1 | 单笔风险占权益 % |
|
||||
| max_margin_pct | 30 | 新开仓保证金上限 |
|
||||
| roll_max_margin_pct | 单独 | 滚仓保证金上限 |
|
||||
| fixed_lots / fixed_amount | — | 计仓模式 |
|
||||
| trailing_be_tick_buffer | 2 | 移动保本 1R 缓冲跳数 |
|
||||
|
||||
环境变量风控(冷静期、仓位上限)见 [RISK.md](./RISK.md),通常在 `.env` 配置。
|
||||
|
||||
---
|
||||
|
||||
## 微信推送
|
||||
|
||||
配置 **企业微信 Webhook** 后,以下模块推送生效:
|
||||
|
||||
- 开单计划、关键位、下单、策略、AI 日终(见 [WECHAT.md](./WECHAT.md) 索引)
|
||||
|
||||
未配置 Webhook:所有 `send_wechat_msg()` 静默跳过。
|
||||
|
||||
---
|
||||
|
||||
## 导航开关
|
||||
|
||||
`nav_settings.py` 中 `NAV_TOGGLES` 控制菜单可见性;`@require_nav` 保护路由。
|
||||
|
||||
| 键 | 菜单 |
|
||||
|----|------|
|
||||
| strategy | 策略交易 |
|
||||
| plans | 开单计划 |
|
||||
| market | 行情 K 线 |
|
||||
| fees | 手续费配置 |
|
||||
| ai | AI 分析 |
|
||||
|
||||
下单监控、关键位、记录、统计、设置 **不可关闭**。
|
||||
|
||||
---
|
||||
|
||||
## 相关文档
|
||||
|
||||
- [INDEX.md](./INDEX.md)
|
||||
- [RISK.md](./RISK.md)
|
||||
- [WECHAT.md](./WECHAT.md)
|
||||
- [AI.md](./AI.md)
|
||||
- [BACKUP.md](./BACKUP.md)
|
||||
@@ -0,0 +1,56 @@
|
||||
# 统计分析
|
||||
|
||||
**页面路径**:`/stats`
|
||||
|
||||
**相关文件**:`stats_engine.py`、`app.py`(`/api/stats`)
|
||||
|
||||
---
|
||||
|
||||
## 功能概述
|
||||
|
||||
### 汇总指标(页顶卡片)
|
||||
|
||||
总交易次数、胜率、平均盈利/亏损、盈亏比、连续亏损、最大回撤、最大盈亏金额及占比、累计手续费、情绪单数量/占比。
|
||||
|
||||
进入页面自动加载 `/api/stats`,无手动「重新计算」按钮。
|
||||
|
||||
### 分项统计
|
||||
|
||||
下拉维度:按时间、周、月、品种、手续费、方向、交易类型、情绪单等,表格展示分组指标。
|
||||
|
||||
---
|
||||
|
||||
## 下单逻辑
|
||||
|
||||
**无**。只读展示,不触发报单。
|
||||
|
||||
---
|
||||
|
||||
## 风控规则
|
||||
|
||||
**无**。统计结果不影响账户状态。
|
||||
|
||||
---
|
||||
|
||||
## 数据来源
|
||||
|
||||
| 表 | 用途 |
|
||||
|----|------|
|
||||
| `trade_logs` | 主:成交、盈亏、手续费 |
|
||||
| `review_records` | 情绪单标记等 |
|
||||
| `stats_cache` | 缓存加速 |
|
||||
|
||||
开单计划的 `trade_records` **不计入** 此处主统计(除非另有合并逻辑)。
|
||||
|
||||
---
|
||||
|
||||
## 微信推送
|
||||
|
||||
**无**。
|
||||
|
||||
---
|
||||
|
||||
## 相关文档
|
||||
|
||||
- [RECORDS.md](./RECORDS.md)
|
||||
- [FEES.md](./FEES.md) — 手续费计算
|
||||
@@ -0,0 +1,117 @@
|
||||
# 策略交易
|
||||
|
||||
**页面路径**:`/strategy`、`/strategy/records`
|
||||
|
||||
**相关文件**:`install_trading.py`(趋势回调、顺势加仓/滚仓)
|
||||
|
||||
---
|
||||
|
||||
## 功能概述
|
||||
|
||||
| 策略 | 说明 |
|
||||
|------|------|
|
||||
| 趋势回调 | 首仓 + 网格补仓 + 统一止盈 |
|
||||
| 顺势加仓(滚仓) | 对已有 active 持仓加仓,单独保证金上限 |
|
||||
|
||||
均需 **CTP 已连接** 且有对应持仓监控。
|
||||
|
||||
---
|
||||
|
||||
## 趋势回调 — 下单逻辑
|
||||
|
||||
### 1. 创建计划(预览 → 确认首仓)
|
||||
|
||||
用户填写:品种、方向、止损、补仓上沿、止盈、风险比例等 → 系统预览手数/网格 → 确认后 **市价开首仓**。
|
||||
|
||||
**校验**(与下单监控相同):
|
||||
|
||||
- 交易时段、CTP 连接
|
||||
- `assert_can_open()`、[RISK.md](./RISK.md)
|
||||
- 品种范围、保证金上限
|
||||
|
||||
**成交后**:
|
||||
|
||||
- 写入 `trend_pullback_plans`(status=active)
|
||||
- 创建/关联 `trade_order_monitors`(monitor_type=trend)
|
||||
- 微信:`趋势回调首仓 {sym} {first_lots}手`
|
||||
|
||||
### 2. 运行中监控
|
||||
|
||||
后台扫描 active 计划:
|
||||
|
||||
| 条件 | 动作 |
|
||||
|------|------|
|
||||
| 价格触及 **take_profit** | 全部平仓,计划结案 |
|
||||
| 价格回落至 **网格档位** | 按档位补仓(不超过 remainder_lots) |
|
||||
|
||||
**补仓**:市价加仓,更新均价与监控。
|
||||
|
||||
**止盈**:市价全平。
|
||||
|
||||
微信:
|
||||
|
||||
- 止盈 → `趋势回调止盈 {sym}`
|
||||
- 补仓 → `趋势回调补仓 {sym} +{add_lots}手 @档位{N}`
|
||||
|
||||
### 3. 策略记录
|
||||
|
||||
`/strategy/records` 单独归档已结束计划。
|
||||
|
||||
---
|
||||
|
||||
## 顺势加仓(滚仓)— 下单逻辑
|
||||
|
||||
针对 **已有 active 持仓** 的加仓预览与执行。
|
||||
|
||||
**特殊风控**:
|
||||
|
||||
| 项 | 说明 |
|
||||
|----|------|
|
||||
| 仓位上限冻结 | **仍允许滚仓**(`can_roll=True`) |
|
||||
| `roll_max_margin_pct` | 滚仓后总保证金占用单独上限 |
|
||||
| 手数收紧 | `cap_lots_for_margin_budget()` 按滚仓上限裁剪 |
|
||||
|
||||
流程:预览加仓价/手数/新止损 → 确认 → CTP 市价加仓 → 更新 monitor。
|
||||
|
||||
---
|
||||
|
||||
## 风控规则
|
||||
|
||||
| 规则 | 趋势首仓 | 滚仓 |
|
||||
|------|----------|------|
|
||||
| assert_can_open | ✓ | 仓位冻结时仍可 |
|
||||
| max_margin_pct | ✓ 首仓 | — |
|
||||
| roll_max_margin_pct | — | ✓ |
|
||||
| 交易时段 | ✓ | ✓ |
|
||||
| 品种范围 | ✓ | ✓ |
|
||||
| 单笔 50 手 | ✓ | ✓ |
|
||||
|
||||
全局规则见 [RISK.md](./RISK.md)。
|
||||
|
||||
---
|
||||
|
||||
## 止盈止损
|
||||
|
||||
趋势持仓纳入 `sl_tp_guard` 本地监控(与下单监控相同机制)。
|
||||
|
||||
- monitor_type = `trend` / `roll`
|
||||
- 平仓写入 `trade_logs`,来源标签「趋势回调」「顺势加仓」
|
||||
|
||||
---
|
||||
|
||||
## 微信推送
|
||||
|
||||
| 事件 | 模板 |
|
||||
|------|------|
|
||||
| 首仓 | [WECHAT §11](./WECHAT.md#11-策略趋势回调) |
|
||||
| 止盈 | 同上 |
|
||||
| 补仓 | 同上 |
|
||||
| 结构化平仓 | [WECHAT §4](./WECHAT.md#4-平仓完成) |
|
||||
|
||||
---
|
||||
|
||||
## 相关文档
|
||||
|
||||
- [ORDER_MONITOR.md](./ORDER_MONITOR.md)
|
||||
- [RISK.md](./RISK.md)
|
||||
- [WECHAT.md](./WECHAT.md)
|
||||
+305
@@ -0,0 +1,305 @@
|
||||
# 企业微信推送
|
||||
|
||||
**配置**:系统设置 → 企业微信 Webhook(`wechat_webhook`)。
|
||||
|
||||
**发送函数**:`app.send_wechat_msg()` — 所有推送正文前自动加前缀:
|
||||
|
||||
```
|
||||
【国内期货】
|
||||
{正文}
|
||||
```
|
||||
|
||||
未配置 Webhook 时静默跳过,不报错。
|
||||
|
||||
---
|
||||
|
||||
## 推送类型索引
|
||||
|
||||
| # | 类型 | 触发场景 | 模板章节 |
|
||||
|---|------|----------|----------|
|
||||
| 1 | 手动开仓成功(结构化) | 下单监控成交且填写止损 | [§1](#1-手动开仓成功) |
|
||||
| 2 | 手动开仓(简版) | 成交但未填止损 | [§2](#2-简版开仓) |
|
||||
| 3 | 挂单提交 | 限价单未立即成交 | [§3](#3-挂单提交) |
|
||||
| 4 | 平仓完成(结构化) | trade_logs 写入平仓记录 | [§4](#4-平仓完成) |
|
||||
| 5 | SL/TP 触发(简版) | 本地止盈止损市价平仓委托已提交 | [§5](#5-本地止盈止损触发) |
|
||||
| 6 | 关键位自动单结果 | 箱体/收敛突破尝试下单 | [§6](#6-关键位自动单) |
|
||||
| 7 | 关键位开仓成功(结构化) | 自动单成交 | [§7](#7-关键位开仓成功) |
|
||||
| 8 | 关键支阻区提醒 | 5m 收盘突破区间 | [§8](#8-关键支阻区提醒) |
|
||||
| 9 | 开单计划触发 | 现价进入决策区间 | [§9](#9-开单计划) |
|
||||
| 10 | 开单计划止盈/止损 | 激活后价格触及 TP/SL | [§10](#10-开单计划结果) |
|
||||
| 11 | 策略趋势回调 | 首仓/止盈/补仓 | [§11](#11-策略趋势回调) |
|
||||
| 12 | AI 分析 | 开仓/平仓/日终报告 | [§12](#12-ai-分析) |
|
||||
|
||||
实现文件:`wechat_notify.py`、`trade_notify.py`、`key_monitor_lib.py`、`app.py`、`install_trading.py`、`ai_worker.py`。
|
||||
|
||||
---
|
||||
|
||||
## 结构化推送
|
||||
|
||||
以下模板由 `wechat_notify.py` 生成,字段随实际成交数据填充。
|
||||
|
||||
### 1. 手动开仓成功
|
||||
|
||||
**函数**:`format_open_success()` · **来源**:`trade_notify.notify_manual_open_filled()`
|
||||
|
||||
**触发**:下单监控开仓 **成交** 且填写了 **止损价**。
|
||||
|
||||
**模板**:
|
||||
|
||||
```
|
||||
📈 {品种名} 开仓成功
|
||||
💼 账户:{模拟盘/实盘}
|
||||
|
||||
🧾 订单基础信息
|
||||
📌 来源:期货下单
|
||||
🔖 委托号:{order_id}
|
||||
📈 方向:多头(long)/ 空头(short)
|
||||
⚠ 单笔风控:{risk_percent}%≈{risk_amount}元
|
||||
|
||||
📊 仓位配置
|
||||
账户权益:{capital} 元
|
||||
开仓手数:{lots} 手
|
||||
占用保证金:{margin} 元
|
||||
仓位占比:{margin_pct}%
|
||||
|
||||
🎯 价位 & 盈亏比
|
||||
开仓价:{entry}
|
||||
止损价:{stop_loss}
|
||||
止盈价:{take_profit}
|
||||
计划盈亏比:RR {rr} : 1
|
||||
移动保本:1.0R → {be_px}(缓冲 {be_tick_buffer} 跳) ← 仅开启移动保本时
|
||||
|
||||
📌 状态
|
||||
✅ 已进入下单监控,本地 SL/TP 守护
|
||||
```
|
||||
|
||||
**示例**:
|
||||
|
||||
```
|
||||
📈 螺纹钢 开仓成功
|
||||
💼 账户:SimNow 模拟
|
||||
|
||||
🧾 订单基础信息
|
||||
📌 来源:期货下单
|
||||
📈 方向:多头(long)
|
||||
⚠ 单笔风控:1%≈1000.00元
|
||||
|
||||
📊 仓位配置
|
||||
账户权益:100000.00 元
|
||||
开仓手数:2 手
|
||||
占用保证金:8500.00 元
|
||||
仓位占比:8.50%
|
||||
|
||||
🎯 价位 & 盈亏比
|
||||
开仓价:3200
|
||||
止损价:3180
|
||||
止盈价:3240
|
||||
计划盈亏比:RR 2 : 1
|
||||
|
||||
📌 状态
|
||||
✅ 已进入下单监控,本地 SL/TP 守护
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 4. 平仓完成
|
||||
|
||||
**函数**:`format_close_done()` · **来源**:`trade_notify.notify_trade_log_close()`
|
||||
|
||||
**触发**:`trade_logs` 新增平仓记录(SL/TP 守护、CTP 同步、手动平仓等)。
|
||||
|
||||
**模板**:
|
||||
|
||||
```
|
||||
📈/📉 {品种名} 平仓完成
|
||||
💼 账户:{mode_label}
|
||||
|
||||
🧾 平仓概要
|
||||
📌 方向:多头(long)/ 空头(short)
|
||||
📌 平仓结果:{止盈|止损|保本止盈|移动止盈|手动平仓}
|
||||
💰 本单净盈亏:+/-{pnl_net} 元
|
||||
⏱ 持仓时长:{N分钟|N小时N分钟|N天…}
|
||||
💵 账户权益:{equity_after} 元
|
||||
|
||||
🎯 价位(计划)
|
||||
开仓价:{entry}
|
||||
平仓价:{close_price}
|
||||
止盈价:{take_profit}
|
||||
止损价:{stop_loss}
|
||||
|
||||
📎 备注
|
||||
成交价不在计划止盈/止损带内(可能为手动或其他类型平仓) ← 可选
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 7. 关键位开仓成功
|
||||
|
||||
**函数**:`format_key_open_success()` — 在 §1 基础上追加:
|
||||
|
||||
```
|
||||
📎 关键位触发
|
||||
类型:{箱体突破|收敛突破}
|
||||
模式:{顺势|反转} · {向上突破|向下突破}
|
||||
5m 收盘:{bar_time}
|
||||
```
|
||||
|
||||
**来源字段**:`{monitor_type}·{trade_mode}`(如「箱体突破·顺势」)。
|
||||
|
||||
---
|
||||
|
||||
### 8. 关键支阻区提醒
|
||||
|
||||
**函数**:`format_zone_alert()` · **最多 3 次**,间隔约 **5 分钟**。
|
||||
|
||||
**模板**:
|
||||
|
||||
```
|
||||
📌 {品种名} 关键位突破提醒({1|2|3}/3)
|
||||
|
||||
🧾 突破概要
|
||||
📌 类型:关键支阻区
|
||||
⏱ 触发时间:{bar_time}
|
||||
📊 上沿:{upper}|下沿:{lower}
|
||||
💹 触发收盘:{close_price}
|
||||
🎯 {向上突破/向下突破}({多头/空头})
|
||||
📍 突破价位:{boundary}
|
||||
|
||||
📎 说明
|
||||
· 人工盯盘,共推送 3 次(间隔约 5 分钟)
|
||||
· 推送完毕后本条监控自动结案
|
||||
· 不参与自动开仓
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 简版与业务推送
|
||||
|
||||
### 2. 简版开仓
|
||||
|
||||
**触发**:成交但未填止损。
|
||||
|
||||
```
|
||||
{模拟盘/实盘} 开仓 {symbol} {direction} {lots}手 @{price}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 3. 挂单提交
|
||||
|
||||
**触发**:限价开仓委托已提交、尚未成交。
|
||||
|
||||
```
|
||||
委托已提交 · {symbol} {direction} {lots}手挂单中({N} 分钟未成交自动撤单)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 5. 本地止盈止损触发
|
||||
|
||||
**触发**:`sl_tp_guard` 本地检测到 TP/SL,已提交市价平仓委托(结构化平仓推送在成交写入 trade_logs 后另行发送)。
|
||||
|
||||
```
|
||||
{止盈|止损} {symbol} {direction} {lots}手 @{mark},平仓委托已提交
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 6. 关键位自动单
|
||||
|
||||
**函数**:`format_auto_breakout_msg()` · **成败均推送**。
|
||||
|
||||
**模板**:
|
||||
|
||||
```
|
||||
✅/❌ {品种名} {箱体突破|收敛突破}自动单
|
||||
⏱ 5m 收盘:{bar_time}
|
||||
🎯 {向上突破|向下突破} · {顺势|反转} · {做多|做空}
|
||||
💹 入场:{entry} 止损:{sl} 止盈:{tp}(盈亏比 {rr})
|
||||
📦 手数:{lots}
|
||||
🛡 已开启移动保本(达目标盈亏比自动止盈) ← 可选
|
||||
{detail} ← 失败原因等
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 9. 开单计划
|
||||
|
||||
**触发**:`planned` → 现价进入 `[zone_lower, zone_upper]`。
|
||||
|
||||
```
|
||||
【开单计划触发】{name} ({symbol})
|
||||
方向:做多/做空
|
||||
决策区间:{zone_lower} ~ {zone_upper}
|
||||
决策理由:{reason}
|
||||
当前价:{p}
|
||||
止损:{stop_loss} 止盈:{take_profit}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 10. 开单计划结果
|
||||
|
||||
**触发**:`active` 状态下触及止盈或止损。
|
||||
|
||||
```
|
||||
[做多/做空] {name} 已{止盈|止损}
|
||||
决策区间:{zone_lower} ~ {zone_upper}
|
||||
止损:{stop_loss} 止盈:{take_profit}
|
||||
当前价:{p}
|
||||
```
|
||||
|
||||
> 开单计划 **不自动下单**,仅微信提醒并写入 `trade_records`。
|
||||
|
||||
---
|
||||
|
||||
### 11. 策略趋势回调
|
||||
|
||||
| 事件 | 模板 |
|
||||
|------|------|
|
||||
| 首仓成交 | `趋势回调首仓 {sym} {first_lots}手` |
|
||||
| 止盈平仓 | `趋势回调止盈 {sym}` |
|
||||
| 补仓成交 | `趋势回调补仓 {sym} +{add_lots}手 @档位{done+1}` |
|
||||
|
||||
---
|
||||
|
||||
### 12. AI 分析
|
||||
|
||||
详见 [AI.md#微信推送](./AI.md#微信推送)。
|
||||
|
||||
**事件分析**(开仓/平仓后,AI 成功时):
|
||||
|
||||
```
|
||||
🤖 AI 分析 · {title}
|
||||
|
||||
{content 前 1800 字}
|
||||
```
|
||||
|
||||
**日终报告**:
|
||||
|
||||
```
|
||||
🤖 {YYYY-MM-DD} 日终持仓与交易报告
|
||||
|
||||
{content 前 1800 字}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 推送与板块对照
|
||||
|
||||
| 板块 | 推送类型 |
|
||||
|------|----------|
|
||||
| 下单监控 | §1 §2 §3 §4 §5 §12 |
|
||||
| 关键位监控 | §6 §7 §8 |
|
||||
| 开单计划 | §9 §10 |
|
||||
| 策略交易 | §11 §4 |
|
||||
| AI 分析 | §12 |
|
||||
|
||||
---
|
||||
|
||||
## 注意事项
|
||||
|
||||
1. 所有消息经 `【国内期货】` 前缀发送,企业微信群机器人 `msgtype=text`。
|
||||
2. 结构化开仓/平仓需 **填写止损** 才会发送完整模板;否则为简版。
|
||||
3. AI 推送仅在 AI 调用 **成功** 时发送;失败内容只写入 `/ai` 页面。
|
||||
4. 关键支阻区第 3 次推送后监控自动归档,不再推送。
|
||||
Reference in New Issue
Block a user