Update documentation to match current product features.

Rewrite module docs for order monitor, CTP sync, and stats; remove obsolete simulated-position and UI descriptions.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
dekun
2026-06-26 02:08:01 +08:00
parent bdfa21def8
commit 7b60f0dce5
6 changed files with 280 additions and 341 deletions
+31 -21
View File
@@ -1,30 +1,37 @@
# 国内期货交易监控复盘系统 # 国内期货交易监控复盘系统
基于 Flask 的国内期货**监控 + 模拟持仓 + 复盘** Web 应用。支持开单计划、关键位监控、持仓监控、交易记录、复盘 K 线、手续费估算与企业微信推送。 基于 Flask 的国内期货 **CTP 下单 + 监控 + 复盘 + 统计** Web 应用。模拟盘连接 SimNow,实盘连接期货公司 CTP;支持关键位/计划提醒、交易记录同步、资金曲线、品种推荐与企业微信推送。
## 文档 ## 文档
| 文档 | 说明 | | 文档 | 说明 |
|------|------| |------|------|
| **[功能说明文档](docs/FEATURES.md)** | 各模块功能、操作逻辑、费率与数据库说明 | | **[功能说明](docs/FEATURES.md)** | 各模块功能、页面路径、数据库与后台任务 |
| **[部署文档](docs/DEPLOY.md)** | 一键部署、手动部署、更新、PM2、故障排查 | | **[部署文档](docs/DEPLOY.md)** | 一键部署、更新、PM2、故障排查 |
| **[SimNow 接入](docs/SIMNOW.md)** | 仿真账号注册与 CTP 前置 |
| **[交易与策略](docs/TRADING.md)** | 下单、持仓、品种推荐、策略 API |
| **[手续费与导航](docs/FEES.md)** | CTP 费率同步、导航开关 |
## 功能一览 ## 功能一览
| 模块 | 说明 | | 模块 | 路径 | 说明 |
|------|------| |------|------|------|
| **开单计划** | 当日决策区间、止损止盈;进入区间激活并推送 | | **下单监控**(默认首页) | `/positions` | CTP 连接、期货下单、当前持仓、品种推荐 |
| **关键位监控** | 箱体/阻力支撑突破提醒,监控历史归档 | | **策略交易** | `/strategy` | 趋势回调 / 顺势加仓(可导航开关) |
| **持仓监控** | 模拟持仓录入、实时卡片、平仓记入交易记录 | | **开单计划** | `/plans` | 当日决策区间、触发推送(可开关) |
| **交易记录与复盘** | 平仓记录核对、填入复盘、K 线自动生成 | | **关键位监控** | `/keys` | 箱体/阻力支撑突破提醒 |
| **统计分析** | 胜率、手续费与净盈亏汇总 | | **行情 K 线** | `/market` | 多周期 K 线(可开关) |
| **手续费配置** | 本地费率表(默认标准×2),可选 AKShare 同步 | | **交易记录与复盘** | `/records` | 资金曲线、CTP 成交同步、复盘上传 |
| **品种简介** | 合约规格查询(东方财富 / 新浪) | | **统计分析** | `/stats` | 汇总指标 + 多维度分项统计 |
| **系统设** | 实盘资金、企业微信、改密码、深色/浅色主题 | | **手续费配** | `/fees` | CTP / 本地费率(可开关) |
| **品种简介** | `/contract` | 合约规格查询(可开关) |
| **系统设置** | `/settings` | 交易模式、CTP、计仓、微信、主题 |
登录后默认进入 **下单监控**;刷新当前页不会跳转,仅访问根路径 `/` 或新登录时进入默认页。
## 快速开始 ## 快速开始
**服务器(Ubuntu root** **服务器(Ubuntu**
```bash ```bash
cd /opt/qihuo && bash deploy.sh cd /opt/qihuo && bash deploy.sh
@@ -34,16 +41,19 @@ cd /opt/qihuo && bash deploy.sh
**更新** **更新**
```bash ```bash
cd /opt/qihuo && git pull && pm2 restart qihuo cd /opt/qihuo
git fetch origin && git reset --hard origin/main
source venv/bin/activate && pip install -r requirements.txt
pm2 restart qihuo
``` ```
细步骤见 [部署文档](docs/DEPLOY.md)。 详见 [部署文档](docs/DEPLOY.md)。
**本地开发** **本地开发**
```bash ```bash
python3 -m venv venv python3 -m venv venv
source venv/bin/activate source venv/bin/activate # Windows: venv\Scripts\activate
pip install -r requirements.txt pip install -r requirements.txt
cp .env.example .env cp .env.example .env
python app.py python app.py
@@ -51,14 +61,14 @@ python app.py
## 品种与行情 ## 品种与行情
- 合约代码:**同花顺格式**`ag2606``SR609``IF2606`),输入中文自动匹配主力 - 合约代码:**同花顺格式**`ag2606``SR609``IF2606`),中文联想匹配主力
- 行情:默认**新浪财经**(免费);机构用户可配置同花顺 iFinD token - 行情:默认 **新浪财经**;机构用户可配置同花顺 iFinD token
## 环境要求 ## 环境要求
- Python 3.10+ - Python 3.10+vnpy_ctp
- PM2(生产部署) - PM2(生产部署)
- 网络可访问 `hq.sinajs.cn` - 网络:新浪行情、Git 仓库、SimNow/CTP 前置(见部署文档)
## 仓库 ## 仓库
+29 -8
View File
@@ -175,12 +175,15 @@ mkdir -p /opt/qihuo/logs /opt/qihuo/uploads
```bash ```bash
cd /opt/qihuo cd /opt/qihuo
git pull git fetch origin
git reset --hard origin/main
source venv/bin/activate source venv/bin/activate
pip install -r requirements.txt pip install -r requirements.txt
pm2 restart qihuo pm2 restart qihuo
``` ```
若服务器曾用 SCP 覆盖文件导致 `git pull` 冲突,用 `git reset --hard origin/main` 与远端对齐。
`vnpy_ctp` 安装失败(常见于缺少编译环境): `vnpy_ctp` 安装失败(常见于缺少编译环境):
```bash ```bash
@@ -195,8 +198,8 @@ pm2 restart qihuo
### 首次启用 CTP 下单 ### 首次启用 CTP 下单
1. 浏览器登录 → **系统设置** 确认 **模拟盘 · SimNow** 1. 浏览器登录 → **系统设置** 确认 **模拟盘 · SimNow**
2. 打开 **持仓监控** 页 → 点击 **连接 CTP** 2. 打开 **下单监控** 页 → 点击 **连接 CTP**
3. 连接成功后:权益来自柜台、**持仓监控** 显示 CTP 实际持仓、**期货下单** 可报单 3. 连接成功后:权益来自柜台、显示 CTP 持仓、可报单与品种推荐
详见 [TRADING.md](./TRADING.md)。 详见 [TRADING.md](./TRADING.md)。
@@ -318,9 +321,10 @@ ufw allow 6600/tcp
| 手续费同步失败 | akshare 异常 | 使用「重载 JSON」或检查 akshare | | 手续费同步失败 | akshare 异常 | 使用「重载 JSON」或检查 akshare |
| **未安装 vnpy / vnpy_ctp** | 依赖未装或编译失败 | 见下方「CTP / vnpy 故障排查」 | | **未安装 vnpy / vnpy_ctp** | 依赖未装或编译失败 | 见下方「CTP / vnpy 故障排查」 |
| **CTP 连接超时** | SimNow 地址/账号/非交易时段 | 核对 `.env` 与 SimNow 官网前置 | | **CTP 连接超时** | SimNow 地址/账号/非交易时段 | 核对 `.env` 与 SimNow 官网前置 |
| **持仓监控为空** | 未连接 CTP 或确实无仓 | 先点「连接 CTP」 | | **下单监控无持仓** | 未连接 CTP 或确实无仓 | 先点「连接 CTP」 |
| `database is locked` | SQLite 并发 | `git pull` 最新版后重启 | | **`Could not resolve host`** | 服务器 DNS 故障 | 配置 systemd-resolved 公共 DNS,见下方 |
| `git pull` 冲突 | 本地有修改 | 备份 `futures.db` 后处理冲突或 `git stash` | | `database is locked` | SQLite 并发 | 更新代码后重启 |
| `git pull` 冲突 | 本地有修改 / SCP 部署 | `git fetch && git reset --hard origin/main` |
查看应用是否在监听: 查看应用是否在监听:
@@ -328,7 +332,24 @@ ufw allow 6600/tcp
ss -tlnp | grep 6600 ss -tlnp | grep 6600
``` ```
### CTP / vnpy 故障排查 ### DNS 无法解析(git / curl 均失败)
`curl cip.cc``git pull``Could not resolve host`
```bash
mkdir -p /etc/systemd/resolved.conf.d
cat > /etc/systemd/resolved.conf.d/dns.conf <<'EOF'
[Resolve]
DNS=223.5.5.5 8.8.8.8
FallbackDNS=1.1.1.1
EOF
systemctl restart systemd-resolved
resolvectl flush-caches
```
验证:`resolvectl query git.bz121.com``curl cip.cc`
---
页面提示 **「未安装 vnpy / vnpy_ctp」** 表示 Python 环境未成功安装 CTP 网关,下单与柜台持仓不可用(看盘、策略、复盘仍可用)。 页面提示 **「未安装 vnpy / vnpy_ctp」** 表示 Python 环境未成功安装 CTP 网关,下单与柜台持仓不可用(看盘、策略、复盘仍可用)。
@@ -349,7 +370,7 @@ pm2 restart qihuo
**3. 连接** **3. 连接**
登录系统 → **持仓监控****连接 CTP**。成功则顶栏显示「CTP 已连接」,权益变为 SimNow 账户资金。 登录系统 → **下单监控****连接 CTP**。成功则顶栏显示「CTP 已连接」,权益变为 SimNow 账户资金。
**4. 常见错误** **4. 常见错误**
+151 -237
View File
@@ -1,6 +1,6 @@
# 功能说明文档 # 功能说明文档
国内期货交易监控复盘系统(Flask + SQLite + PM2)各模块使用说明与技术要点 国内期货交易监控复盘系统(Flask + SQLite + vnpy_ctp + PM2
--- ---
@@ -9,23 +9,72 @@
| 项目 | 说明 | | 项目 | 说明 |
|------|------| |------|------|
| 访问端口 | 默认 `6600` | | 访问端口 | 默认 `6600` |
| 数据存储 | SQLite `futures.db`(品种、计划、监控、持仓、交易记录、复盘、费率等) | | 默认首页 | 登录后 `/`**下单监控** `/positions` |
| 行情来源 | 默认新浪财经(免费);可选同花顺 iFinD(机构 token | | 数据存储 | SQLite `futures.db` |
| 合约代码 | 同花顺格式(如 `ag2606``SR609``IF2606` | | 行情 | 默认新浪;可选同花顺 iFinD |
| 主题 | 支持深色 / 浅色切换(页头左侧 | | 合约代码 | 同花顺格式(`ag2606``SR609``IF2606` |
| 主题 | 页头深色 / 浅色切换 |
### 导航结构 ### 导航结构
| 菜单 | 路径 | 作用 | | 菜单 | 路径 | 可关闭 |
|------|------|------| |------|------|--------|
| 开单计划 | `/plans` | 当日计划录入与历史 | | **下单监控** | `/positions` | 否(默认首页) |
| 关键位监控 | `/keys` | 关键位突破监控与历史 | | 策略交易 | `/strategy` | 是 |
| 持仓监控 | `/positions` | 模拟持仓录入与实时卡片 | | 开单计划 | `/plans` | |
| 交易记录与复盘 | `/records` | 平仓记录 + 复盘上传与历史 | | 关键位监控 | `/keys` | 否 |
| 统计分析 | `/stats` | 胜率、手续费、盈亏汇总 | | 行情 K 线 | `/market` | 是 |
| 手续费配置 | `/fees` | 本地费率表与倍率 | | 交易记录与复盘 | `/records` | 否 |
| 品种简介 | `/contract` | 合约规格查询 | | 统计分析 | `/stats` | 否 |
| 系统设置 | `/settings` | 资金、微信、改密码 | | 手续费配置 | `/fees` | 是 |
| 品种简介 | `/contract` | 是 |
| 系统设置 | `/settings` | 否 |
关闭项在 **系统设置 → 导航显示** 配置;直接访问 URL 会提示并跳回下单监控。
---
## 下单监控
**路径**`/positions`
### 顶栏
- 模拟盘 / 实盘模式、CTP 连接状态、风险状态
- 权益、可用资金(连接 CTP 后来自柜台)
- **连接 CTP** / 重连;断线自动重连;开盘前 30 分钟自动连接
### 期货下单
- 品种联想(仅推荐可开品种或全部主力,取决于计仓模式)
- 方向、手数(固定手数 / 固定金额计仓)
- 限价 / 市价(FAK)、止盈、止损
- 非交易时段禁止报单
### 当前持仓
- 开仓委托先显示 **挂单中**,成交后显示为 active 持仓
- 挂单超时自动撤单;交易时段内可 **手动撤单**
- 持仓卡片:浮盈亏、保证金、止盈止损、平仓等
- 数据经 SSE 推送,无需整页刷新
### 品种推荐
- 按当前权益与保证金上限筛选可开品种
- **行业分类**、走势(多头/空头/震荡/转多/转空)、跳空、昨日成交量(手)、成交额
- 支持行业筛选与多字段排序
- 每日后台刷新缓存
详见 [TRADING.md](./TRADING.md)。
---
## 策略交易
**路径**`/strategy``/strategy/records`
- 趋势回调自动补仓、顺势加仓等(需 CTP 已连接且有 active 持仓监控)
- 策略记录单独归档
--- ---
@@ -33,21 +82,11 @@
**路径**`/plans` **路径**`/plans`
### 功能 - 录入当日计划:主力合约、方向、决策区间、止损、止盈
- 状态:`planned``active``closed` / `expired`
- 制定**当日**开单计划:主力合约、方向、决策区间(上/下沿)、止损、止盈、决策理由。 - 现价进入区间 → 企业微信推送并激活
- 计划状态:`planned`(待触发)→ `active`(已激活)→ `closed` / `expired` - 激活后监控止盈/止损,触发写入 `trade_records` 并关闭计划
- 列表**实时现价**与距区间上下沿距离(约 1 秒轮询 `/api/plan_prices`)。 - 列表约 1 秒轮询 `/api/plan_prices`
### 触发逻辑(后台线程,约 3 秒)
1. **待触发**:现价进入决策区间 `[下限, 上限]` → 企业微信通知,状态变为「已激活」。
2. **已激活**:持续监控止盈 / 止损;触发后写入 `trade_records`(系统自动止盈止损记录),计划关闭。
### 操作
- 左侧表单添加计划;右侧为进行中计划列表。
- 下方可按日期筛选历史计划。
--- ---
@@ -55,102 +94,45 @@
**路径**`/keys` **路径**`/keys`
### 功能 - 类型:箱体突破、收敛突破、关键阻力、关键支撑
- 突破规则推送(去重);删除后归档至监控历史
- 监控类型:箱体突破、收敛突破、关键阻力位、关键支撑位。 - 列表约 1 秒轮询 `/api/key_prices`
- 录入:品种、类型、方向、上沿/下沿(阻力/支撑)。
- 列表显示现价、距上沿、距下沿(约 1 秒轮询 `/api/key_prices`)。
- **监控历史**:删除的监控归档,可查看上沿、下沿、归档时间。
### 推送逻辑
| 类型 | 规则 |
|------|------|
| 箱体 / 收敛 | 突破上沿、跌破下沿各推送一次(去重) |
| 阻力 / 支撑 | 单向突破推送一次 |
--- ---
## 持仓监控 ## 行情 K 线
**路径**`/positions` **路径**`/market`
### 功能 - 多周期 K 线(TradingView Lightweight Charts
- 支持 CTP 连接后部分数据增强
模拟盘持仓管理,与关键位页面分离。 - 需在导航中开启
### 持仓录入
| 字段 | 说明 |
|------|------|
| 主力合约 | 品种联想,同花顺代码 |
| 开仓时间 | 与合约、张数同一行,避免标签错位 |
| 张数 | 手数 |
| 成交价格 / 止损 / 止盈 | 用于方向推断与盈亏计算 |
- **方向**:未选手动方向时,根据止损与成交价自动判断(止损低于成交 → 做多,反之做空)。
- **风险比例**:依赖系统设置中的「实盘资金」。
### 实时持仓卡片
约 1 秒轮询 `/api/position_live`,展示:
- 成交价、止损、止盈、盈亏比、标记价、浮盈亏
- **预估手续费**、**扣费后浮盈亏**(按本地费率表估算)
- 保证金、仓位占比、开仓时间、持仓时长、张数
- **平仓**:按现价平仓,写入「交易记录」,并从持仓列表移除
### 平仓 → 交易记录
平仓时自动:
1. 拉取现价作为平仓价;
2. 计算毛盈亏、手续费、净盈亏;
3. 写入 `trade_logs`
4. 删除 `position_monitors` 对应行。
--- ---
## 交易记录与复盘 ## 交易记录与复盘
**路径**`/records``/trades` 自动跳转到此页 **路径**`/records``/trades` 重定向至此
页面上方为**交易记录**,下方为**复盘上传**与**复盘历史**。 ### 资金曲线
- 页顶 Lightweight Charts 资金曲线
- 随深色/浅色主题自动切换颜色
### 交易记录 ### 交易记录
来源主要为「持仓监控」平仓;字段包括: - **CTP 已连接** 时打开页面自动同步柜台成交(来源「柜台」)
- 程序写入的记录来源为「本地」,可核对、删除
- 表头固定,表体约 10 行高度内滚动
- **修改/核对开关**:开启后可编辑并「核对修改」
- **填入复盘**:预填复盘表单
| 列 | 说明 | 主要字段:品种、类型、方向、成交价、止损/止盈、手数、保证金、盈亏、手续费、净盈亏、最新资金、结果。
|----|------|
| 品种 / 类型 / 方向 | 类型多为「持仓监控」 |
| 成交 / 止损 / 止盈 | 开仓时价格 |
| 基数 | 张数 + 保证金 |
| 持仓分钟 | 开平时间差 |
| 盈亏(元) | 毛盈亏(未扣费) |
| 手续费 | 开+平合计(本地费率估算) |
| 净盈亏 | 毛盈亏 − 手续费 |
| 结果 | 止盈 / 止损 / 手动平仓等 |
**修改/核对开关**(小字单行):开启后可编辑关键字段并「核对修改」保存(标记 `verified`)。 ### 复盘上传 / 复盘历史
**填入复盘**:跳转本页复盘表单,自动预填品种、方向、价格、时间、盈亏等,并滚动到「复盘上传」区域。 - 手动复盘表单、截图、自动 K 线图(matplotlib
- 按本日/本周/本月/自定义日期筛选历史
### 复盘上传
手动复盘表单,支持:
- 品种、方向、张数、周期、成交价、止损、止盈、平仓价
- 开仓/平仓时间 → 自动计算持仓时长、初始/实际盈亏比
- 开仓类型、离场触发、行为标签(勾选为情绪单)
- 截图上传;**自动 K 线**matplotlib 生成复盘图)
- 保存时自动计算**手续费**与**净盈亏**写入 `review_records`
### 复盘历史
- 筛选:本日 / 本周 / 本月 / 自定义日期
- 列表含盈亏、手续费、净盈亏;支持全屏详情弹窗
- 另含「系统自动记录(止盈/止损)」:来自开单计划/关键位触发的 `trade_records`
--- ---
@@ -158,24 +140,17 @@
**路径**`/stats` **路径**`/stats`
### 监控触发统计(trade_records ### 汇总指标(单行卡片
- 总交易、止盈、止损、胜率 总交易次数、胜率、平均盈利/亏损、盈亏比、连续亏损、最大回撤、最大盈亏金额及占比、累计手续费、情绪单数量/占比。
- 按品种 / 类型 / 方向分组胜率
### 手续费与盈亏汇总(trade_logs + review_records 进入页面自动加载(`/api/stats`),无手动「重新计算」按钮。
| 指标 | 说明 | ### 分项统计
|------|------|
| 累计手续费 | 交易记录 + 复盘记录手续费之和 |
| 毛盈亏合计 | 未扣费盈亏 |
| 净盈亏合计 | 扣费后盈亏 |
| 计费笔数 | 有手续费字段的记录数 |
| 按品种手续费 | 交易记录中各品种累计手续费 |
### 最近交易 下拉选择维度:按时间、周、月、品种、手续费、方向、交易类型、情绪单等,表格展示分组指标。
展示最近 10 笔 `trade_logs`:毛盈亏、手续费、净盈亏、结果 数据来源:`trade_logs`(主)+ `review_records`(情绪单等)
--- ---
@@ -183,36 +158,9 @@
**路径**`/fees` **路径**`/fees`
模拟盘参考费率,**非期货公司实盘账单**。 - **默认**:连接 CTP 后同步柜台费率(`source=ctp`
- 备选:本地 `data/fee_rates.json`、AKShare 参考表 × 倍率
### 数据来源 - 详见 [FEES.md](./FEES.md)
1. **本地 JSON**`data/fee_rates.json`(首次空库自动加载,已为常见品种写入约 **交易所标准 × 2**
2. **第三方同步**`pip install akshare` 后,点击「从第三方同步(AKShare)」
3. **手工编辑**:表格内修改单品种费率并保存
### 倍率
- 设置项「第三方标准费率 × N」,默认 **2**
- 从 AKShare 同步时:拉取参考标准后乘以该倍率写入 `fee_rates`
- 已写入表的数值即为当前生效费率,改倍率后需重新同步或手工调整
### 费率字段
| 字段 | 含义 |
|------|------|
| 开仓(元/手) | 固定每手费用 |
| 开仓(比例) | 成交价 × 合约乘数 × 手数 × 比例 |
| 平昨(元/手) / 平昨(比例) | 非当日平仓 |
| 平今(元/手) / 平今(比例) | 当日平仓(部分品种平今更高) |
### 计费规则
- 一笔往返 = **开仓费 + 平仓费**
- 开仓日与平仓日相同 → 用**平今**;否则用**平昨**
- 合约乘数见 `contract_specs.py`,与保证金估算共用
相关代码:`fee_specs.py`(计算)、`fee_sync.py`AKShare 同步)、`contract_specs.py`(乘数/保证金)。
--- ---
@@ -220,29 +168,8 @@
**路径**`/contract` **路径**`/contract`
### 功能 - 查询合约规格(东方财富 + 新浪补充)
- API`GET /api/contract_profile?symbol=...`
查询指定合约的**交易所规格说明**,展示风格与看盘软件「合约简介」类似:
- 交易品种、交易代码、交易单位、报价单位
- 最小变动价位(附一手最小波动估算)
- 最低交易保证金、涨跌停幅度
- 合约月份、交易时间、最后交易日、交割日期
- 交割方式、交割地点、交割品级、上市日期、交易所
### 使用
1. 导航进入「品种简介」
2. 输入中文品种名或同花顺合约代码(如 `螺纹钢``rb2510`
3. 从联想列表选择或点击「查询」
### 数据来源
- 主数据:**东方财富** 合约详情接口
- 补充:**新浪财经** 合约页(交割地点、上市日期等)
- 若已安装 AKShare,优先走 AKShare 封装;否则直接请求上述数据源
API`GET /api/contract_profile?symbol=rb2510` 返回 JSON。
--- ---
@@ -252,44 +179,37 @@ API`GET /api/contract_profile?symbol=rb2510` 返回 JSON。
| 功能 | 说明 | | 功能 | 说明 |
|------|------| |------|------|
| 实盘资金 | 用于持仓监控的风险金额、仓位占比计算 | | 导航显示 | 开关可选菜单项 |
| 行情说明 | 当前行情源展示 | | 交易模式 | SimNow / 实盘 CTP |
| 企业微信 Webhook | 计划/关键位触发推送 | | 计仓模式 | 固定手数、固定金额 |
| 修改密码 | 修改管理员密码 | | 保证金上限、移动保本、挂单超时 | 见表单说明 |
| CTP 连接 | SimNow / 实盘前置与账号(可覆盖 `.env` |
| 参考资金 | CTP 未连接时用于推荐与估算 |
| 企业微信 Webhook | 计划/关键位推送 |
| 修改密码 | 管理员密码 |
| 深色/浅色主题 | 页头切换 |
### 账号与密码 忘记密码:`python reset_admin.py`
- 账号存在 `futures.db``settings`
-`.env` 不会自动改密码,需 `ADMIN_SYNC_FROM_ENV=true` 并重启,或网页改密
- 忘记密码:`python reset_admin.py`
--- ---
## 品种与行情 ## 品种与行情
### 品种联想
- 输入中文或代码,调用 `/api/symbols/search`
- 自动匹配主力合约,写入 `symbol``symbol_name``market_code``sina_code`
- 实现:`symbols.py` + `static/js/symbol.js`
### 合约代码格式 ### 合约代码格式
| 交易所 | 示例 | 格式 | | 交易所 | 示例 |
|--------|------|------| |--------|------|
| 上期所 / 大商所 / 能源中心 | `ag2606``rb2605` | 小写品种 + 4 位年月 | | 上期所 / 大商所 / 能源 | `ag2606``rb2605`(小写+4位年月 |
| 郑商所 | `SR609``MA606` | 大写品种 + 3 位年月 | | 郑商所 | `SR609``MA606`(大写+3位年月 |
| 中金所 | `IF2606` | 大写品种 + 4 位年月 | | 中金所 | `IF2606` |
### 行情 ### 行情
| 配置 | 说明 | | 配置 | 说明 |
|------|------| |------|------|
| `QUOTE_SOURCE=sina` | 默认新浪 `hq.sinajs.cn` | | `QUOTE_SOURCE=sina` | 默认新浪 |
| `QUOTE_SOURCE=ths` | iFinD 机构 token | | `QUOTE_SOURCE=ths` | iFinD token |
| `QUOTE_SOURCE=auto` | 有 token 优先同花顺,失败回退新浪 | | `QUOTE_SOURCE=auto` | 有 token 优先同花顺 |
个人用户:**看同花顺代码,价格走新浪**,满足监控需求。
--- ---
@@ -297,52 +217,47 @@ API`GET /api/contract_profile?symbol=rb2510` 返回 JSON。
| 表名 | 用途 | | 表名 | 用途 |
|------|------| |------|------|
| `settings` | 密码哈希、微信、实盘资金、手续费倍率等 | | `settings` | 密码、微信、资金、导航、交易参数 |
| `order_plans` | 开单计划 | | `order_plans` | 开单计划 |
| `key_monitors` | 关键位监控active / archived | | `key_monitors` | 关键位监控 |
| `position_monitors` | 当前持仓 | | `trade_logs` | 平仓交易记录(含 `source``ctp_trade_key` |
| `trade_logs` | 平仓交易记录(含 fee、pnl_net) | | `review_records` | 复盘 |
| `trade_records` | 计划/关键位自动止盈止损记录 | | `trade_records` | 计划自动止盈止损记录 |
| `review_records` | 复盘记录(含 fee、pnl_net | | `fee_rates` | 手续费缓存 |
| `fee_rates` | 品种手续费(`source`ctp / akshare / json / manual | | `product_recommend_cache` | 品种推荐缓存 |
| `stats_cache` | 统计缓存 |
手续费默认 **CTP 柜台** 费率,见 [FEES.md](./FEES.md) 数据库文件:项目根目录 `futures.db`
数据库文件:`futures.db`(项目根目录,运行后生成)。
--- ---
## 后台任务 ## 后台任务
| 任务 | 频率 | 说明 | | 任务 | 说明 |
|------|------|------| |------|------|
| 计划/关键位行情轮询 | 约 3 秒 | 触发判断微信推送 | | 计划/关键位轮询 | 约 3 秒触发判断微信推送 |
| 关键位列表现价 | 约 1 秒 | 前端 `/api/key_prices` | | 品种推荐刷新 | 每日 + 按需 |
| 计划列表现价 | 约 1 秒 | 前端 `/api/plan_prices` | | 持仓 SSE | 前端订阅 `/api/trading/stream` |
| 持仓实时卡片 | 约 1 秒 | 前端 `/api/position_live` | | CTP 开盘前连接 | 默认开盘前 30 分钟 |
| 过期计划清理 | 启动时 | 非当日计划标记 expired | | 挂单超时撤单 | 可配置分钟数 |
| 止盈止损守护 | CTP 持仓监控线程 |
--- ---
## 目录与核心文件 ## 核心文件
``` ```
qihuo/ qihuo/
├── app.py # 路由、业务、DB ├── app.py # 路由、计划/关键位/记录/统计
├── market.py # 新浪 / 同花顺行情 ├── install_trading.py # 下单、推荐、策略路由
├── symbols.py # 品种搜索与主力映射 ├── vnpy_bridge.py # CTP 连接、报单、持仓
├── contract_specs.py # 合约乘数、保证金比例 ├── ctp_trade_sync.py # 柜台成交同步到 trade_logs
├── fee_specs.py # 手续费计算 ├── product_recommend.py # 品种推荐计算
├── fee_sync.py # AKShare 费率同步 ├── stats_engine.py # 统计分析
├── contract_profile.py # 品种/合约简介查询 ├── fee_specs.py / ctp_fee_sync.py
├── kline_chart.py # 复盘 K 线图 ├── market.py / kline_chart.py
├── data/fee_rates.json # 默认费率表 ├── templates/ static/
── reset_admin.py # 重置管理员密码 ── docs/
├── templates/ # 页面模板
├── static/js/ # 前端脚本
├── docs/ # 文档
├── futures.db # SQLite(运行后生成)
└── uploads/ # 复盘截图与 K 线图
``` ```
--- ---
@@ -350,9 +265,8 @@ qihuo/
## 安全提示 ## 安全提示
- 部署后立即修改默认密码 - 部署后立即修改默认密码
- 勿将 `.env` 提交仓库 - 勿将 `.env` 提交仓库
- 生产环境建议 Nginx 反代 + HTTPS - 生产建议 Nginx + HTTPS,限制 6600 访问范围
- 限制 6600 端口访问范围(内网 / VPN)
--- ---
+14 -34
View File
@@ -4,8 +4,8 @@
| 模式 | 说明 | | 模式 | 说明 |
|------|------| |------|------|
| **CTP 柜台**默认 | 连接 SimNow/实盘 CTP 后,通过 `ReqQryInstrumentCommissionRate` 查询柜台费率并缓存到 `fee_rates``source=ctp` | | **CTP 柜台**推荐 | 连接 SimNow/实盘 CTP 后,查询柜台费率并缓存到 `fee_rates``source=ctp` |
| **本地 / AKShare** | 使用 `data/fee_rates.json` 或 AKShare 交易所参考表 × 倍率,仅作离线估算 | | **本地 / AKShare** | `data/fee_rates.json` 或 AKShare 参考表 × 倍率,离线估算 |
### 计算公式 ### 计算公式
@@ -14,51 +14,31 @@
往返手续费 = 开仓费 + 平仓费(同日持仓用平今,否则平昨) 往返手续费 = 开仓费 + 平仓费(同日持仓用平今,否则平昨)
``` ```
CTP 返回字段映射:
| CTP 字段 | 本地字段 |
|----------|----------|
| OpenRatioByVolume | open_fixed |
| OpenRatioByMoney | open_ratio |
| CloseRatioByVolume | close_yesterday_fixed |
| CloseRatioByMoney | close_yesterday_ratio |
| CloseTodayRatioByVolume | close_today_fixed |
| CloseTodayRatioByMoney | close_today_ratio |
### 同步时机 ### 同步时机
1. **连接 CTP 成功后** — 后台自动同步主力合约费率(约 60 个品种) 1. 连接 CTP 成功后 — 后台自动同步主力合约费率
2. **手续费配置页**点击「从 CTP 同步费率」 2. **手续费配置页** — 「从 CTP 同步费率」
3. **按需查询** — 计算某品种手续费时,若缓存无 CTP 费率则单品种查询 3. 计算某品种时 — 缓存缺失则单品种查询
### 配置路径
- 系统设置 → **手续费配置**(可在导航中开关显示)
- 选择「计费依据」→ 保存
- CTP 已连接时点击「从 CTP 同步费率」
--- ---
## 导航显示开关 ## 导航显示开关
**系统设置 → 导航显示**单独开关以下顶栏入口 **系统设置 → 导航显示**开关
| 开关 key | 菜单 | | key | 菜单 |
|----------|--------| |-----|------|
| `fees` | 手续费配置 | | `fees` | 手续费配置 |
| `contract` | 品种简介 | | `contract` | 品种简介 |
| `plans` | 开单计划 | | `plans` | 开单计划 |
| `market` | 行情 K 线 | | `market` | 行情 K 线 |
| `strategy` | 策略交易 | | `strategy` | 策略交易 |
关闭后 关闭后顶栏隐藏;直接访问 URL 会提示并跳转到 **下单监控**
- 顶栏不显示该链接 始终显示:**下单监控**、关键位监控、交易记录与复盘、统计分析、系统设置。
- 直接访问对应 URL 会提示并跳转到 **持仓监控**
始终显示的入口:持仓监控、关键位监控、交易记录与复盘、统计分析、系统设置 设置保存在 `settings.nav_items`JSON
设置保存在 SQLite `settings.nav_items`JSON)。
--- ---
@@ -66,9 +46,9 @@ CTP 返回字段映射:
| 文件 | 说明 | | 文件 | 说明 |
|------|------| |------|------|
| `fee_specs.py` | 费率查询与计算 | | `fee_specs.py` | 费率计算 |
| `ctp_fee_sync.py` | CTP 费率同步 | | `ctp_fee_sync.py` | CTP 同步 |
| `nav_settings.py` | 导航开关 | | `nav_settings.py` | 导航开关 |
| `vnpy_bridge.py` | CTP 连接与费率查询 | | `vnpy_bridge.py` | CTP 连接 |
详见 [DEPLOY.md](./DEPLOY.md)、[TRADING.md](./TRADING.md)。 详见 [DEPLOY.md](./DEPLOY.md)、[TRADING.md](./TRADING.md)。
+2 -2
View File
@@ -152,7 +152,7 @@ pm2 restart qihuo
1. 登录本系统 1. 登录本系统
2. **系统设置** → 确认 **模拟盘 · SimNow** 2. **系统设置** → 确认 **模拟盘 · SimNow**
3. 打开 **持仓监控**`/positions` 3. 打开 **下单监控**`/positions`
4. 点击 **连接 CTP** 4. 点击 **连接 CTP**
5. 顶栏显示 **CTP 已连接**,权益变为 SimNow 账户资金即成功 5. 顶栏显示 **CTP 已连接**,权益变为 SimNow 账户资金即成功
@@ -228,4 +228,4 @@ pm2 restart qihuo
- [ ] `.env``SIMNOW_USER``SIMNOW_PASSWORD` 已填写 - [ ] `.env``SIMNOW_USER``SIMNOW_PASSWORD` 已填写
- [ ] 前置地址与官网 **7×24 或交易时段** 说明一致 - [ ] 前置地址与官网 **7×24 或交易时段** 说明一致
- [ ] `pip install -r requirements.txt``vnpy_ctp` 导入成功 - [ ] `pip install -r requirements.txt``vnpy_ctp` 导入成功
- [ ] 系统 **持仓监控****连接 CTP** 成功 - [ ] 系统 **下单监控****连接 CTP** 成功
+52 -38
View File
@@ -1,58 +1,72 @@
# 期货下单与策略交易 # 下单监控与策略交易
## 默认首页
登录或访问 `/` 后进入 **下单监控**`/positions`)。页面包含:
| 区域 | 说明 |
|------|------|
| 顶栏 | 交易模式、CTP 状态、权益/可用、连接 CTP |
| 期货下单 | 限价/市价报单、止盈止损、以损定仓/固定手数 |
| 当前持仓 | CTP 持仓卡片、挂单中、撤单、平仓 |
| 品种推荐 | 按权益筛选、行业分类、走势/跳空/成交量排序 |
`/trade``/recommend` 均重定向到 `/positions`(推荐锚点 `#recommend`)。
## 两种交易通道 ## 两种交易通道
| 设置 | 实际连接 | 资金 | | 设置 | 实际连接 | 资金 |
|------|----------|------| |------|----------|------|
| **模拟盘** | **SimNow**vnpy → CTP 仿真前置) | SimNow 账户权益 | | **模拟盘** | SimNowvnpy → CTP 仿真前置) | SimNow 账户权益 |
| **实盘** | **期货公司 CTP**(后期配置 `CTP_LIVE_*` | 柜台权益 | | **实盘** | 期货公司 CTP`.env` `CTP_LIVE_*` | 柜台权益 |
已移除「本地 SQLite 假撮合」;模拟盘与实盘均走 **vnpy_ctp**`.env` 前置与账号不同 模拟盘与实盘均走 **vnpy_ctp**无本地假撮合
## 依赖安装 ## 下单与持仓
`requirements.txt` 已包含 `vnpy``vnpy_ctp`。服务器部署: - **限价开仓**:先显示「挂单中」,柜台成交后进入持仓监控;超时未成交自动撤单(时长见系统设置)
- **撤单**:交易时段内可手动撤单;非交易时段按钮不可用
- **平仓**:程序平仓写入 `trade_logs`(来源「本地」)
- **持仓数据**SSE `/api/trading/stream` 推送,约 1 秒刷新
```bash ## 品种推荐
cd /opt/qihuo
source venv/bin/activate
pip install -r requirements.txt
python -c "from vnpy_ctp import CtpGateway; print('OK')"
```
详见 [DEPLOY.md](./DEPLOY.md) 中「CTP / vnpy 故障排查」。 - 每日后台刷新可开品种列表(`/api/recommend/stream`
- 最大手数 = floor(权益 × 保证金上限 ÷ 1 手保证金)
- 展示近一周日线走势、跳空、昨日成交量(手)、成交额
- 可按 **行业** 筛选,支持多字段排序
## 首次使用 SimNow ## 策略交易
完整注册、查投资者代码、前置地址与故障排查见 **[SimNow 注册与接入说明](./SIMNOW.md)**。
简要步骤:
1. 在 [SimNow 官网](https://www.simnow.com.cn/) 注册,查询 **投资者代码**(非手机号)
2. 复制 `.env.example``.env`,填写 `SIMNOW_USER``SIMNOW_PASSWORD`
3. 核对 SimNow 官网最新的 **7×24 或交易时段** 前置地址
4. `pip install -r requirements.txt`(含 vnpy、vnpy_ctp
5. 启动程序 → **持仓监控** → 点击 **连接 CTP**
6. 连接成功后,权益、持仓、下单均来自 SimNow 柜台
## 参考资金
系统设置中的「参考资金」仅在 **CTP 未连接** 时用于品种推荐与以损定仓估算;连接 SimNow 后自动改用柜台权益。
## 导航
| 页面 | 路径 | | 页面 | 路径 |
|------|------| |------|------|
| 持仓监控(含下单、推荐) | `/positions` |
| 策略交易 | `/strategy` | | 策略交易 | `/strategy` |
| 策略记录 | `/strategy/records` | | 策略记录 | `/strategy/records` |
## API 趋势回调、顺势加仓等策略需先在下单监控完成开仓,再在策略页配置。
## 参考资金
系统设置中的「参考资金」仅在 **CTP 未连接** 时用于品种推荐与以损定仓估算;连接后自动改用柜台权益。
## 首次使用 SimNow
完整步骤见 **[SimNow 注册与接入说明](./SIMNOW.md)**。
简要:注册 SimNow → 填写 `.env` → 安装 vnpy_ctp → 登录系统 → **下单监控****连接 CTP**
## 主要 API
| 接口 | 说明 | | 接口 | 说明 |
|------|------| |------|------|
| `POST /api/ctp/connect` | 按当前模式连接 SimNow 或实盘 CTP | | `POST /api/ctp/connect` | 连接 SimNow 或实盘 CTP |
| `GET /api/ctp/status` | 连接状态与缺失配置项 | | `GET /api/ctp/status` | 连接状态 |
| `POST /api/trade/order` | 报单(限价/市价,需已连接 CTP | | `POST /api/trade/order` | 报单(需已连接 CTP |
| `GET /api/trading/live` | 持仓(CTP 柜台数据 | | `POST /api/trading/order/cancel` | 撤单(交易时段 |
| `GET /api/recommend/stream` | 品种推荐 SSE 推送 | | `POST /api/trading/close` | 平仓 |
| `GET /api/trading/stream` | 持仓 SSE |
| `GET /api/recommend/list` | 品种推荐 JSON |
| `GET /api/recommend/stream` | 品种推荐 SSE |
| `POST /api/strategy/trend/execute` | 执行趋势策略 |
详见 [DEPLOY.md](./DEPLOY.md) 中 CTP 故障排查。