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