From 7b60f0dce5f50e4e492d2eb6258c4eb54a34fcdf Mon Sep 17 00:00:00 2001 From: dekun Date: Fri, 26 Jun 2026 02:08:01 +0800 Subject: [PATCH] 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 --- README.md | 52 ++++--- docs/DEPLOY.md | 37 ++++- docs/FEATURES.md | 388 ++++++++++++++++++----------------------------- docs/FEES.md | 50 ++---- docs/SIMNOW.md | 4 +- docs/TRADING.md | 90 ++++++----- 6 files changed, 280 insertions(+), 341 deletions(-) diff --git a/README.md b/README.md index 69026f4..9f3af03 100644 --- a/README.md +++ b/README.md @@ -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 前置(见部署文档) ## 仓库 diff --git a/docs/DEPLOY.md b/docs/DEPLOY.md index 258eff4..3e97d51 100644 --- a/docs/DEPLOY.md +++ b/docs/DEPLOY.md @@ -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. 常见错误** diff --git a/docs/FEATURES.md b/docs/FEATURES.md index 9f9ffea..18d302f 100644 --- a/docs/FEATURES.md +++ b/docs/FEATURES.md @@ -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 访问范围 --- diff --git a/docs/FEES.md b/docs/FEES.md index 62c16dd..5eebe6c 100644 --- a/docs/FEES.md +++ b/docs/FEES.md @@ -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线 | +| `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)。 diff --git a/docs/SIMNOW.md b/docs/SIMNOW.md index 7e3bd25..eec5f13 100644 --- a/docs/SIMNOW.md +++ b/docs/SIMNOW.md @@ -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** 成功 diff --git a/docs/TRADING.md b/docs/TRADING.md index 4d3b5d8..e775a24 100644 --- a/docs/TRADING.md +++ b/docs/TRADING.md @@ -1,58 +1,72 @@ -# 期货下单与策略交易 +# 下单监控与策略交易 + +## 默认首页 + +登录或访问 `/` 后进入 **下单监控**(`/positions`)。页面包含: + +| 区域 | 说明 | +|------|------| +| 顶栏 | 交易模式、CTP 状态、权益/可用、连接 CTP | +| 期货下单 | 限价/市价报单、止盈止损、以损定仓/固定手数 | +| 当前持仓 | CTP 持仓卡片、挂单中、撤单、平仓 | +| 品种推荐 | 按权益筛选、行业分类、走势/跳空/成交量排序 | + +`/trade`、`/recommend` 均重定向到 `/positions`(推荐锚点 `#recommend`)。 ## 两种交易通道 | 设置 | 实际连接 | 资金 | |------|----------|------| -| **模拟盘** | **SimNow**(vnpy → CTP 仿真前置) | SimNow 账户权益 | -| **实盘** | **期货公司 CTP**(后期配置 `CTP_LIVE_*`) | 柜台权益 | +| **模拟盘** | SimNow(vnpy → 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 故障排查。