补充功能说明与独立部署文档,精简 README 为文档入口
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -1,128 +1,44 @@
|
|||||||
# 国内期货交易监控复盘系统
|
# 国内期货交易监控复盘系统
|
||||||
|
|
||||||
基于 Flask 的国内期货监控与复盘 Web 应用,支持开单计划、关键位监控、止盈止损自动跟踪、企业微信推送与统计分析。
|
基于 Flask 的国内期货**监控 + 模拟持仓 + 复盘** Web 应用。支持开单计划、关键位监控、持仓监控、交易记录、复盘 K 线、手续费估算与企业微信推送。
|
||||||
|
|
||||||
## 功能模块
|
## 文档
|
||||||
|
|
||||||
|
| 文档 | 说明 |
|
||||||
|
|------|------|
|
||||||
|
| **[功能说明文档](docs/FEATURES.md)** | 各模块功能、操作逻辑、费率与数据库说明 |
|
||||||
|
| **[部署文档](docs/DEPLOY.md)** | 一键部署、手动部署、更新、PM2、故障排查 |
|
||||||
|
|
||||||
|
## 功能一览
|
||||||
|
|
||||||
| 模块 | 说明 |
|
| 模块 | 说明 |
|
||||||
|------|------|
|
|------|------|
|
||||||
| **开单计划** | 品种、方向、决策区间、止损/止盈;价格进入区间后激活并推送 |
|
| **开单计划** | 当日决策区间、止损止盈;进入区间激活并推送 |
|
||||||
| **关键位监控** | 箱体/收敛突破、阻力/支撑位突破提醒(触发后去重) |
|
| **关键位监控** | 箱体/阻力支撑突破提醒,监控历史归档 |
|
||||||
| **交易记录与复盘** | 自动记录止盈/止损结果 |
|
| **持仓监控** | 模拟持仓录入、实时卡片、平仓记入交易记录 |
|
||||||
| **统计分析** | 总交易、胜率,按品种/类型/方向统计 |
|
| **交易记录与复盘** | 平仓记录核对、填入复盘、K 线自动生成 |
|
||||||
| **系统设置** | 修改密码、配置企业微信 Webhook |
|
| **统计分析** | 胜率、手续费与净盈亏汇总 |
|
||||||
|
| **手续费配置** | 本地费率表(默认标准×2),可选 AKShare 同步 |
|
||||||
|
| **系统设置** | 实盘资金、企业微信、改密码、深色/浅色主题 |
|
||||||
|
|
||||||
## 品种与合约代码(同花顺格式)
|
## 快速开始
|
||||||
|
|
||||||
输入中文品种名(如「白银」「螺纹钢」)或同花顺合约代码(如 `ag2606`、`SR609`、`IF2606`),系统自动匹配**当前主力月份合约**。
|
**服务器(Ubuntu root)**
|
||||||
|
|
||||||
| 交易所 | 同花顺示例 | 说明 |
|
|
||||||
|--------|-----------|------|
|
|
||||||
| 上期所 / 大商所 / 上期能源 | `ag2606`、`rb2605`、`m2609` | 小写品种 + 4 位年月 |
|
|
||||||
| 郑商所 | `SR609`、`MA606` | 大写品种 + 3 位年月 |
|
|
||||||
| 中金所 | `IF2606`、`IH2606` | 大写品种 + 4 位年月 |
|
|
||||||
|
|
||||||
界面展示**同花顺合约代码**(ag2608、IF2606),与看盘软件一致;**行情默认走新浪财经**(免费,普通用户无需 token)。
|
|
||||||
|
|
||||||
## 行情说明
|
|
||||||
|
|
||||||
| 项目 | 说明 |
|
|
||||||
|------|------|
|
|
||||||
| 合约代码 | 同花顺格式,输入中文自动匹配主力月份 |
|
|
||||||
| 价格数据 | 新浪财经 API(免费) |
|
|
||||||
| 同花顺 iFinD | 仅机构/付费数据接口用户可用,**普通期货通用户无 refresh_token** |
|
|
||||||
|
|
||||||
因此个人用户使用本系统:**看同花顺代码,价格走新浪**,两者在主力合约价格上基本一致,满足监控需求。
|
|
||||||
|
|
||||||
## 快速部署(Ubuntu root + /opt/qihuo)
|
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# root 登录后执行
|
cd /opt/qihuo && bash deploy.sh
|
||||||
cd /opt/qihuo # 或先 git clone 再 bash deploy.sh
|
# 访问 http://<IP>:6600
|
||||||
bash deploy.sh
|
|
||||||
```
|
```
|
||||||
|
|
||||||
默认安装路径:`/opt/qihuo`,服务端口:`6600`。
|
**更新**
|
||||||
|
|
||||||
部署完成后访问:`http://服务器IP:6600`
|
|
||||||
|
|
||||||
## 环境要求
|
|
||||||
|
|
||||||
- Ubuntu 20.04+(推荐)
|
|
||||||
- **root 用户**运行(部署目录 `/opt/qihuo`)
|
|
||||||
- Python 3.10+
|
|
||||||
- Node.js + PM2(进程守护)
|
|
||||||
- 网络可访问 `hq.sinajs.cn`(行情)及企业微信 API
|
|
||||||
|
|
||||||
## 手动部署
|
|
||||||
|
|
||||||
### 1. 安装系统依赖
|
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
apt update
|
cd /opt/qihuo && git pull && pm2 restart qihuo
|
||||||
apt install -y python3 python3-venv python3-pip git nodejs npm
|
|
||||||
npm install -g pm2
|
|
||||||
```
|
```
|
||||||
|
|
||||||
### 2. 克隆到 /opt/qihuo
|
详细步骤见 [部署文档](docs/DEPLOY.md)。
|
||||||
|
|
||||||
```bash
|
**本地开发**
|
||||||
git clone https://git.bz121.com/dekun/qihuo.git /opt/qihuo
|
|
||||||
cd /opt/qihuo
|
|
||||||
```
|
|
||||||
|
|
||||||
### 3. 虚拟环境与依赖
|
|
||||||
source venv/bin/activate
|
|
||||||
pip install -r requirements.txt
|
|
||||||
```
|
|
||||||
|
|
||||||
### 4. 配置环境变量
|
|
||||||
|
|
||||||
```bash
|
|
||||||
cp .env.example .env
|
|
||||||
# 编辑 .env,至少修改 SECRET_KEY 和 ADMIN_PASSWORD
|
|
||||||
nano .env
|
|
||||||
```
|
|
||||||
|
|
||||||
`.env` 主要字段:
|
|
||||||
|
|
||||||
```env
|
|
||||||
HOST=0.0.0.0
|
|
||||||
PORT=6600
|
|
||||||
SECRET_KEY=随机长字符串
|
|
||||||
ADMIN_USERNAME=admin
|
|
||||||
ADMIN_PASSWORD=你的密码
|
|
||||||
ADMIN_SYNC_FROM_ENV=false
|
|
||||||
WECHAT_WEBHOOK=企业微信机器人地址(可选)
|
|
||||||
QUOTE_SOURCE=sina
|
|
||||||
```
|
|
||||||
|
|
||||||
**改密码说明**:账号存在 `futures.db` 里,改 `.env` 后不会自动生效。
|
|
||||||
|
|
||||||
- **首次部署**:写好 `ADMIN_USERNAME` / `ADMIN_PASSWORD` 后启动即可。
|
|
||||||
- **已部署后**:在 `.env` 设 `ADMIN_SYNC_FROM_ENV=true`,改密码后 `pm2 restart qihuo`;或在网页「系统设置」改密。
|
|
||||||
- **忘记密码**:`source venv/bin/activate && python reset_admin.py`
|
|
||||||
|
|
||||||
普通用户保持 `QUOTE_SOURCE=sina` 即可。
|
|
||||||
|
|
||||||
### 5. PM2 启动
|
|
||||||
|
|
||||||
```bash
|
|
||||||
pm2 start ecosystem.config.cjs
|
|
||||||
pm2 save
|
|
||||||
pm2 startup # 按提示执行生成的命令,实现开机自启
|
|
||||||
```
|
|
||||||
|
|
||||||
### 6. 常用 PM2 命令
|
|
||||||
|
|
||||||
```bash
|
|
||||||
pm2 status
|
|
||||||
pm2 logs qihuo
|
|
||||||
pm2 restart qihuo
|
|
||||||
pm2 stop qihuo
|
|
||||||
```
|
|
||||||
|
|
||||||
## 本地开发
|
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
python3 -m venv venv
|
python3 -m venv venv
|
||||||
@@ -132,44 +48,18 @@ cp .env.example .env
|
|||||||
python app.py
|
python app.py
|
||||||
```
|
```
|
||||||
|
|
||||||
## 目录结构
|
## 品种与行情
|
||||||
|
|
||||||
```
|
- 合约代码:**同花顺格式**(`ag2606`、`SR609`、`IF2606`),输入中文自动匹配主力
|
||||||
qihuo/
|
- 行情:默认**新浪财经**(免费);机构用户可配置同花顺 iFinD token
|
||||||
├── app.py # 主程序
|
|
||||||
├── market.py # 同花顺/新浪行情拉取
|
|
||||||
├── symbols.py # 期货品种与同花顺代码映射
|
|
||||||
├── requirements.txt
|
|
||||||
├── .env.example
|
|
||||||
├── deploy.sh # Ubuntu 一键部署
|
|
||||||
├── ecosystem.config.cjs # PM2 配置
|
|
||||||
├── static/js/symbol.js # 品种联想
|
|
||||||
├── templates/ # 页面模板
|
|
||||||
└── futures.db # SQLite 数据库(运行后生成)
|
|
||||||
```
|
|
||||||
|
|
||||||
## 监控逻辑说明
|
## 环境要求
|
||||||
|
|
||||||
### 开单计划
|
- Python 3.10+
|
||||||
|
- PM2(生产部署)
|
||||||
|
- 网络可访问 `hq.sinajs.cn`
|
||||||
|
|
||||||
1. **待触发**:当前价进入「决策区间 [下限, 上限]」→ 企业微信通知,状态变为「已激活」
|
## 仓库
|
||||||
2. **已激活**:监控止盈止损直至触发,写入交易记录,计划关闭
|
|
||||||
|
|
||||||
### 关键位监控
|
|
||||||
|
|
||||||
- 箱体/收敛:突破上沿或跌破下沿各推送一次
|
|
||||||
- 阻力/支撑:单向突破推送一次
|
|
||||||
|
|
||||||
后台线程每 3 秒轮询行情。
|
|
||||||
|
|
||||||
## 安全建议
|
|
||||||
|
|
||||||
- 部署后立即修改默认密码
|
|
||||||
- 勿将 `.env` 提交到仓库
|
|
||||||
- 生产环境建议用 Nginx 反代并配置 HTTPS
|
|
||||||
- 限制 6600 端口仅内网或 VPN 访问
|
|
||||||
|
|
||||||
## 仓库地址
|
|
||||||
|
|
||||||
https://git.bz121.com/dekun/qihuo.git
|
https://git.bz121.com/dekun/qihuo.git
|
||||||
|
|
||||||
|
|||||||
+322
@@ -0,0 +1,322 @@
|
|||||||
|
# 部署文档
|
||||||
|
|
||||||
|
国内期货交易监控复盘系统 — Ubuntu 服务器部署、更新与运维说明。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 部署概要
|
||||||
|
|
||||||
|
| 项目 | 默认值 |
|
||||||
|
|------|--------|
|
||||||
|
| 部署目录 | `/opt/qihuo` |
|
||||||
|
| 运行用户 | `root`(与 `deploy.sh` / PM2 配置一致) |
|
||||||
|
| 服务端口 | `6600` |
|
||||||
|
| 进程管理 | PM2,应用名 `qihuo` |
|
||||||
|
| 数据库 | SQLite `futures.db` |
|
||||||
|
| 仓库 | https://git.bz121.com/dekun/qihuo.git |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 环境要求
|
||||||
|
|
||||||
|
- **系统**:Ubuntu 20.04+(推荐)
|
||||||
|
- **Python**:3.10+
|
||||||
|
- **Node.js + PM2**:进程守护与开机自启
|
||||||
|
- **网络**:
|
||||||
|
- `hq.sinajs.cn`(新浪行情)
|
||||||
|
- 企业微信 API(若启用推送)
|
||||||
|
- `git.bz121.com`(拉取代码)
|
||||||
|
- 可选:`pip` 安装 akshare 时需访问 PyPI
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 一键部署(推荐)
|
||||||
|
|
||||||
|
以 **root** 登录服务器后执行:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd /opt/qihuo
|
||||||
|
# 若目录不存在,先克隆:
|
||||||
|
# git clone https://git.bz121.com/dekun/qihuo.git /opt/qihuo
|
||||||
|
|
||||||
|
bash deploy.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
`deploy.sh` 会自动完成:
|
||||||
|
|
||||||
|
1. 安装 `python3`、`python3-venv`、`git`、`nodejs`、`npm`、`pm2`
|
||||||
|
2. `git pull` 或 `git clone` 到 `/opt/qihuo`
|
||||||
|
3. 创建虚拟环境 `venv` 并 `pip install -r requirements.txt`
|
||||||
|
4. 首次生成 `.env`(随机 `SECRET_KEY`)
|
||||||
|
5. `pm2 start ecosystem.config.cjs` 并 `pm2 save`
|
||||||
|
|
||||||
|
部署完成后访问:`http://<服务器IP>:6600`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 手动部署
|
||||||
|
|
||||||
|
### 1. 安装系统依赖
|
||||||
|
|
||||||
|
```bash
|
||||||
|
apt update
|
||||||
|
apt install -y python3 python3-venv python3-pip git nodejs npm
|
||||||
|
npm install -g pm2
|
||||||
|
```
|
||||||
|
|
||||||
|
### 2. 克隆代码
|
||||||
|
|
||||||
|
```bash
|
||||||
|
git clone https://git.bz121.com/dekun/qihuo.git /opt/qihuo
|
||||||
|
cd /opt/qihuo
|
||||||
|
```
|
||||||
|
|
||||||
|
### 3. Python 虚拟环境与依赖
|
||||||
|
|
||||||
|
```bash
|
||||||
|
python3 -m venv venv
|
||||||
|
source venv/bin/activate
|
||||||
|
pip install --upgrade pip
|
||||||
|
pip install -r requirements.txt
|
||||||
|
```
|
||||||
|
|
||||||
|
### 4. 可选:AKShare(手续费第三方同步)
|
||||||
|
|
||||||
|
```bash
|
||||||
|
source venv/bin/activate
|
||||||
|
pip install akshare
|
||||||
|
```
|
||||||
|
|
||||||
|
不安装也可使用系统内置 `data/fee_rates.json` 默认费率。
|
||||||
|
|
||||||
|
### 5. 环境变量
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cp .env.example .env
|
||||||
|
nano .env
|
||||||
|
```
|
||||||
|
|
||||||
|
| 变量 | 说明 |
|
||||||
|
|------|------|
|
||||||
|
| `HOST` | 监听地址,默认 `0.0.0.0` |
|
||||||
|
| `PORT` | 端口,默认 `6600` |
|
||||||
|
| `SECRET_KEY` | Flask Session 密钥,务必随机 |
|
||||||
|
| `ADMIN_USERNAME` | 初始管理员用户名 |
|
||||||
|
| `ADMIN_PASSWORD` | 初始管理员密码(仅首次建库生效) |
|
||||||
|
| `ADMIN_SYNC_FROM_ENV` | `true` 时重启可从 `.env` 同步账号密码 |
|
||||||
|
| `WECHAT_WEBHOOK` | 企业微信机器人地址(可选) |
|
||||||
|
| `QUOTE_SOURCE` | `sina`(默认)/ `ths` / `auto` |
|
||||||
|
| `THS_REFRESH_TOKEN` | 同花顺 iFinD token(机构用户) |
|
||||||
|
|
||||||
|
示例:
|
||||||
|
|
||||||
|
```env
|
||||||
|
HOST=0.0.0.0
|
||||||
|
PORT=6600
|
||||||
|
SECRET_KEY=请替换为随机长字符串
|
||||||
|
ADMIN_USERNAME=admin
|
||||||
|
ADMIN_PASSWORD=你的强密码
|
||||||
|
ADMIN_SYNC_FROM_ENV=false
|
||||||
|
WECHAT_WEBHOOK=
|
||||||
|
QUOTE_SOURCE=sina
|
||||||
|
```
|
||||||
|
|
||||||
|
### 6. PM2 启动
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd /opt/qihuo
|
||||||
|
pm2 start ecosystem.config.cjs
|
||||||
|
pm2 save
|
||||||
|
pm2 startup # 按提示执行命令,实现开机自启
|
||||||
|
```
|
||||||
|
|
||||||
|
### 7. 创建日志目录(若不存在)
|
||||||
|
|
||||||
|
```bash
|
||||||
|
mkdir -p /opt/qihuo/logs /opt/qihuo/uploads
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 更新部署
|
||||||
|
|
||||||
|
代码已推送后,在服务器执行:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd /opt/qihuo
|
||||||
|
git pull
|
||||||
|
source venv/bin/activate
|
||||||
|
pip install -r requirements.txt
|
||||||
|
pm2 restart qihuo
|
||||||
|
```
|
||||||
|
|
||||||
|
若新增可选依赖(如 akshare):
|
||||||
|
|
||||||
|
```bash
|
||||||
|
pip install akshare
|
||||||
|
pm2 restart qihuo
|
||||||
|
```
|
||||||
|
|
||||||
|
应用启动时会自动执行 SQLite 表结构迁移(`ALTER TABLE` 容错),一般无需手工改库。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## PM2 常用命令
|
||||||
|
|
||||||
|
```bash
|
||||||
|
pm2 status # 查看状态
|
||||||
|
pm2 logs qihuo # 查看日志
|
||||||
|
pm2 logs qihuo --lines 100
|
||||||
|
pm2 restart qihuo # 重启
|
||||||
|
pm2 stop qihuo # 停止
|
||||||
|
pm2 delete qihuo # 删除进程
|
||||||
|
pm2 save # 保存进程列表
|
||||||
|
```
|
||||||
|
|
||||||
|
日志文件:
|
||||||
|
|
||||||
|
- `/opt/qihuo/logs/pm2-out.log`
|
||||||
|
- `/opt/qihuo/logs/pm2-error.log`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 本地开发
|
||||||
|
|
||||||
|
```bash
|
||||||
|
git clone https://git.bz121.com/dekun/qihuo.git
|
||||||
|
cd qihuo
|
||||||
|
python3 -m venv venv
|
||||||
|
source venv/bin/activate # Windows: venv\Scripts\activate
|
||||||
|
pip install -r requirements.txt
|
||||||
|
cp .env.example .env
|
||||||
|
python app.py
|
||||||
|
```
|
||||||
|
|
||||||
|
浏览器访问:`http://127.0.0.1:6600`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 账号与密码
|
||||||
|
|
||||||
|
| 场景 | 操作 |
|
||||||
|
|------|------|
|
||||||
|
| 首次部署 | `.env` 中设置 `ADMIN_USERNAME` / `ADMIN_PASSWORD` 后启动 |
|
||||||
|
| 已部署后改 `.env` 密码 | 设 `ADMIN_SYNC_FROM_ENV=true`,`pm2 restart qihuo` |
|
||||||
|
| 网页改密码 | 登录 → 系统设置 |
|
||||||
|
| 忘记密码 | `cd /opt/qihuo && source venv/bin/activate && python reset_admin.py` |
|
||||||
|
|
||||||
|
账号数据在 `futures.db` 的 `settings` 表,不会仅因改 `.env` 自动更新(除非开启 `ADMIN_SYNC_FROM_ENV`)。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 数据库与数据文件
|
||||||
|
|
||||||
|
| 路径 | 说明 |
|
||||||
|
|------|------|
|
||||||
|
| `/opt/qihuo/futures.db` | 主数据库,建议定期备份 |
|
||||||
|
| `/opt/qihuo/uploads/` | 复盘截图、自动 K 线图 |
|
||||||
|
| `/opt/qihuo/data/fee_rates.json` | 默认手续费表(可重载) |
|
||||||
|
|
||||||
|
备份示例:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cp /opt/qihuo/futures.db /opt/qihuo/futures.db.bak.$(date +%Y%m%d)
|
||||||
|
```
|
||||||
|
|
||||||
|
### 手工补列(极少需要)
|
||||||
|
|
||||||
|
若极老版本库缺少字段,可对照报错执行(新版本启动会自动迁移):
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sqlite3 /opt/qihuo/futures.db "ALTER TABLE key_monitors ADD COLUMN sina_code TEXT;"
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Nginx 反向代理(可选)
|
||||||
|
|
||||||
|
将 6600 反代到 80/443,并配置 HTTPS:
|
||||||
|
|
||||||
|
```nginx
|
||||||
|
server {
|
||||||
|
listen 80;
|
||||||
|
server_name your.domain.com;
|
||||||
|
|
||||||
|
location / {
|
||||||
|
proxy_pass http://127.0.0.1:6600;
|
||||||
|
proxy_set_header Host $host;
|
||||||
|
proxy_set_header X-Real-IP $remote_addr;
|
||||||
|
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||||
|
proxy_set_header X-Forwarded-Proto $scheme;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 防火墙
|
||||||
|
|
||||||
|
若使用 `ufw`,开放端口:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
ufw allow 6600/tcp
|
||||||
|
# 或使用 Nginx 时只开放 80/443
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 故障排查
|
||||||
|
|
||||||
|
| 现象 | 可能原因 | 处理 |
|
||||||
|
|------|----------|------|
|
||||||
|
| 无法访问 6600 | 服务未启动 / 防火墙 | `pm2 status`、`pm2 logs qihuo` |
|
||||||
|
| 登录失败 | 密码未同步 | 网页改密或 `reset_admin.py` |
|
||||||
|
| 现价一直 `--` | 新浪网络不可达 | 检查服务器能否访问 `hq.sinajs.cn` |
|
||||||
|
| 关键位 500 | 缺 `sina_code` 列 | `git pull` 重启;或手工 `ALTER TABLE` |
|
||||||
|
| K 线生成失败 | matplotlib 未装 | `pip install matplotlib==3.9.2` |
|
||||||
|
| 手续费同步失败 | 未装 akshare | `pip install akshare` 或用「重载 JSON」 |
|
||||||
|
| `git pull` 冲突 | 本地有修改 | 备份 `futures.db` 后处理冲突或 `git stash` |
|
||||||
|
|
||||||
|
查看应用是否在监听:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
ss -tlnp | grep 6600
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 安全建议
|
||||||
|
|
||||||
|
1. 部署后立即修改默认密码
|
||||||
|
2. 勿将 `.env`、`futures.db` 提交到公开仓库
|
||||||
|
3. 生产环境使用 HTTPS + 限制访问 IP
|
||||||
|
4. 定期备份 `futures.db` 与 `uploads/`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 目录结构(部署后)
|
||||||
|
|
||||||
|
```
|
||||||
|
/opt/qihuo/
|
||||||
|
├── app.py
|
||||||
|
├── venv/
|
||||||
|
├── futures.db
|
||||||
|
├── .env
|
||||||
|
├── logs/
|
||||||
|
│ ├── pm2-out.log
|
||||||
|
│ └── pm2-error.log
|
||||||
|
├── uploads/
|
||||||
|
├── data/fee_rates.json
|
||||||
|
├── ecosystem.config.cjs
|
||||||
|
├── deploy.sh
|
||||||
|
└── docs/
|
||||||
|
├── FEATURES.md
|
||||||
|
└── DEPLOY.md
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 相关文档
|
||||||
|
|
||||||
|
- [功能说明文档](./FEATURES.md)
|
||||||
|
- [README](../README.md)
|
||||||
@@ -0,0 +1,327 @@
|
|||||||
|
# 功能说明文档
|
||||||
|
|
||||||
|
国内期货交易监控复盘系统(Flask + SQLite + PM2)各模块使用说明与技术要点。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 系统概览
|
||||||
|
|
||||||
|
| 项目 | 说明 |
|
||||||
|
|------|------|
|
||||||
|
| 访问端口 | 默认 `6600` |
|
||||||
|
| 数据存储 | SQLite `futures.db`(品种、计划、监控、持仓、交易记录、复盘、费率等) |
|
||||||
|
| 行情来源 | 默认新浪财经(免费);可选同花顺 iFinD(机构 token) |
|
||||||
|
| 合约代码 | 同花顺格式(如 `ag2606`、`SR609`、`IF2606`) |
|
||||||
|
| 主题 | 支持深色 / 浅色切换(页头左侧) |
|
||||||
|
|
||||||
|
### 导航结构
|
||||||
|
|
||||||
|
| 菜单 | 路径 | 作用 |
|
||||||
|
|------|------|------|
|
||||||
|
| 开单计划 | `/plans` | 当日计划录入与历史 |
|
||||||
|
| 关键位监控 | `/keys` | 关键位突破监控与历史 |
|
||||||
|
| 持仓监控 | `/positions` | 模拟持仓录入与实时卡片 |
|
||||||
|
| 交易记录与复盘 | `/records` | 平仓记录 + 复盘上传与历史 |
|
||||||
|
| 统计分析 | `/stats` | 胜率、手续费、盈亏汇总 |
|
||||||
|
| 手续费配置 | `/fees` | 本地费率表与倍率 |
|
||||||
|
| 系统设置 | `/settings` | 资金、微信、改密码 |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 开单计划
|
||||||
|
|
||||||
|
**路径**:`/plans`
|
||||||
|
|
||||||
|
### 功能
|
||||||
|
|
||||||
|
- 制定**当日**开单计划:主力合约、方向、决策区间(上/下沿)、止损、止盈、决策理由。
|
||||||
|
- 计划状态:`planned`(待触发)→ `active`(已激活)→ `closed` / `expired`。
|
||||||
|
- 列表**实时现价**与距区间上下沿距离(约 1 秒轮询 `/api/plan_prices`)。
|
||||||
|
|
||||||
|
### 触发逻辑(后台线程,约 3 秒)
|
||||||
|
|
||||||
|
1. **待触发**:现价进入决策区间 `[下限, 上限]` → 企业微信通知,状态变为「已激活」。
|
||||||
|
2. **已激活**:持续监控止盈 / 止损;触发后写入 `trade_records`(系统自动止盈止损记录),计划关闭。
|
||||||
|
|
||||||
|
### 操作
|
||||||
|
|
||||||
|
- 左侧表单添加计划;右侧为进行中计划列表。
|
||||||
|
- 下方可按日期筛选历史计划。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 关键位监控
|
||||||
|
|
||||||
|
**路径**:`/keys`
|
||||||
|
|
||||||
|
### 功能
|
||||||
|
|
||||||
|
- 监控类型:箱体突破、收敛突破、关键阻力位、关键支撑位。
|
||||||
|
- 录入:品种、类型、方向、上沿/下沿(阻力/支撑)。
|
||||||
|
- 列表显示现价、距上沿、距下沿(约 1 秒轮询 `/api/key_prices`)。
|
||||||
|
- **监控历史**:删除的监控归档,可查看上沿、下沿、归档时间。
|
||||||
|
|
||||||
|
### 推送逻辑
|
||||||
|
|
||||||
|
| 类型 | 规则 |
|
||||||
|
|------|------|
|
||||||
|
| 箱体 / 收敛 | 突破上沿、跌破下沿各推送一次(去重) |
|
||||||
|
| 阻力 / 支撑 | 单向突破推送一次 |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 持仓监控
|
||||||
|
|
||||||
|
**路径**:`/positions`
|
||||||
|
|
||||||
|
### 功能
|
||||||
|
|
||||||
|
模拟盘持仓管理,与关键位页面分离。
|
||||||
|
|
||||||
|
### 持仓录入
|
||||||
|
|
||||||
|
| 字段 | 说明 |
|
||||||
|
|------|------|
|
||||||
|
| 主力合约 | 品种联想,同花顺代码 |
|
||||||
|
| 开仓时间 | 与合约、张数同一行,避免标签错位 |
|
||||||
|
| 张数 | 手数 |
|
||||||
|
| 成交价格 / 止损 / 止盈 | 用于方向推断与盈亏计算 |
|
||||||
|
|
||||||
|
- **方向**:未选手动方向时,根据止损与成交价自动判断(止损低于成交 → 做多,反之做空)。
|
||||||
|
- **风险比例**:依赖系统设置中的「实盘资金」。
|
||||||
|
|
||||||
|
### 实时持仓卡片
|
||||||
|
|
||||||
|
约 1 秒轮询 `/api/position_live`,展示:
|
||||||
|
|
||||||
|
- 成交价、止损、止盈、盈亏比、标记价、浮盈亏
|
||||||
|
- **预估手续费**、**扣费后浮盈亏**(按本地费率表估算)
|
||||||
|
- 保证金、仓位占比、开仓时间、持仓时长、张数
|
||||||
|
- **平仓**:按现价平仓,写入「交易记录」,并从持仓列表移除
|
||||||
|
|
||||||
|
### 平仓 → 交易记录
|
||||||
|
|
||||||
|
平仓时自动:
|
||||||
|
|
||||||
|
1. 拉取现价作为平仓价;
|
||||||
|
2. 计算毛盈亏、手续费、净盈亏;
|
||||||
|
3. 写入 `trade_logs`;
|
||||||
|
4. 删除 `position_monitors` 对应行。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 交易记录与复盘
|
||||||
|
|
||||||
|
**路径**:`/records`(`/trades` 自动跳转到此页)
|
||||||
|
|
||||||
|
页面上方为**交易记录**,下方为**复盘上传**与**复盘历史**。
|
||||||
|
|
||||||
|
### 交易记录
|
||||||
|
|
||||||
|
来源主要为「持仓监控」平仓;字段包括:
|
||||||
|
|
||||||
|
| 列 | 说明 |
|
||||||
|
|----|------|
|
||||||
|
| 品种 / 类型 / 方向 | 类型多为「持仓监控」 |
|
||||||
|
| 成交 / 止损 / 止盈 | 开仓时价格 |
|
||||||
|
| 基数 | 张数 + 保证金 |
|
||||||
|
| 持仓分钟 | 开平时间差 |
|
||||||
|
| 盈亏(元) | 毛盈亏(未扣费) |
|
||||||
|
| 手续费 | 开+平合计(本地费率估算) |
|
||||||
|
| 净盈亏 | 毛盈亏 − 手续费 |
|
||||||
|
| 结果 | 止盈 / 止损 / 手动平仓等 |
|
||||||
|
|
||||||
|
**修改/核对开关**(小字单行):开启后可编辑关键字段并「核对修改」保存(标记 `verified`)。
|
||||||
|
|
||||||
|
**填入复盘**:跳转本页复盘表单,自动预填品种、方向、价格、时间、盈亏等,并滚动到「复盘上传」区域。
|
||||||
|
|
||||||
|
### 复盘上传
|
||||||
|
|
||||||
|
手动复盘表单,支持:
|
||||||
|
|
||||||
|
- 品种、方向、张数、周期、成交价、止损、止盈、平仓价
|
||||||
|
- 开仓/平仓时间 → 自动计算持仓时长、初始/实际盈亏比
|
||||||
|
- 开仓类型、离场触发、行为标签(勾选为情绪单)
|
||||||
|
- 截图上传;**自动 K 线**(matplotlib 生成复盘图)
|
||||||
|
- 保存时自动计算**手续费**与**净盈亏**写入 `review_records`
|
||||||
|
|
||||||
|
### 复盘历史
|
||||||
|
|
||||||
|
- 筛选:本日 / 本周 / 本月 / 自定义日期
|
||||||
|
- 列表含盈亏、手续费、净盈亏;支持全屏详情弹窗
|
||||||
|
- 另含「系统自动记录(止盈/止损)」:来自开单计划/关键位触发的 `trade_records`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 统计分析
|
||||||
|
|
||||||
|
**路径**:`/stats`
|
||||||
|
|
||||||
|
### 监控触发统计(trade_records)
|
||||||
|
|
||||||
|
- 总交易、止盈、止损、胜率
|
||||||
|
- 按品种 / 类型 / 方向分组胜率
|
||||||
|
|
||||||
|
### 手续费与盈亏汇总(trade_logs + review_records)
|
||||||
|
|
||||||
|
| 指标 | 说明 |
|
||||||
|
|------|------|
|
||||||
|
| 累计手续费 | 交易记录 + 复盘记录手续费之和 |
|
||||||
|
| 毛盈亏合计 | 未扣费盈亏 |
|
||||||
|
| 净盈亏合计 | 扣费后盈亏 |
|
||||||
|
| 计费笔数 | 有手续费字段的记录数 |
|
||||||
|
| 按品种手续费 | 交易记录中各品种累计手续费 |
|
||||||
|
|
||||||
|
### 最近交易
|
||||||
|
|
||||||
|
展示最近 10 笔 `trade_logs`:毛盈亏、手续费、净盈亏、结果。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 手续费配置
|
||||||
|
|
||||||
|
**路径**:`/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`(乘数/保证金)。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 系统设置
|
||||||
|
|
||||||
|
**路径**:`/settings`
|
||||||
|
|
||||||
|
| 功能 | 说明 |
|
||||||
|
|------|------|
|
||||||
|
| 实盘资金 | 用于持仓监控的风险金额、仓位占比计算 |
|
||||||
|
| 行情说明 | 当前行情源展示 |
|
||||||
|
| 企业微信 Webhook | 计划/关键位触发推送 |
|
||||||
|
| 修改密码 | 修改管理员密码 |
|
||||||
|
|
||||||
|
### 账号与密码
|
||||||
|
|
||||||
|
- 账号存在 `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 位年月 |
|
||||||
|
| 郑商所 | `SR609`、`MA606` | 大写品种 + 3 位年月 |
|
||||||
|
| 中金所 | `IF2606` | 大写品种 + 4 位年月 |
|
||||||
|
|
||||||
|
### 行情
|
||||||
|
|
||||||
|
| 配置 | 说明 |
|
||||||
|
|------|------|
|
||||||
|
| `QUOTE_SOURCE=sina` | 默认,新浪 `hq.sinajs.cn` |
|
||||||
|
| `QUOTE_SOURCE=ths` | 仅 iFinD 机构 token |
|
||||||
|
| `QUOTE_SOURCE=auto` | 有 token 时优先同花顺,失败回退新浪 |
|
||||||
|
|
||||||
|
个人用户:**看同花顺代码,价格走新浪**,满足监控需求。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 数据库表(简要)
|
||||||
|
|
||||||
|
| 表名 | 用途 |
|
||||||
|
|------|------|
|
||||||
|
| `settings` | 密码哈希、微信、实盘资金、手续费倍率等 |
|
||||||
|
| `order_plans` | 开单计划 |
|
||||||
|
| `key_monitors` | 关键位监控(active / archived) |
|
||||||
|
| `position_monitors` | 当前持仓 |
|
||||||
|
| `trade_logs` | 平仓交易记录(含 fee、pnl_net) |
|
||||||
|
| `trade_records` | 计划/关键位自动止盈止损记录 |
|
||||||
|
| `review_records` | 复盘记录(含 fee、pnl_net) |
|
||||||
|
| `fee_rates` | 品种手续费本地配置 |
|
||||||
|
|
||||||
|
数据库文件:`futures.db`(项目根目录,运行后生成)。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 后台任务
|
||||||
|
|
||||||
|
| 任务 | 频率 | 说明 |
|
||||||
|
|------|------|------|
|
||||||
|
| 计划/关键位行情轮询 | 约 3 秒 | 触发判断、微信推送 |
|
||||||
|
| 关键位列表现价 | 约 1 秒 | 前端 `/api/key_prices` |
|
||||||
|
| 计划列表现价 | 约 1 秒 | 前端 `/api/plan_prices` |
|
||||||
|
| 持仓实时卡片 | 约 1 秒 | 前端 `/api/position_live` |
|
||||||
|
| 过期计划清理 | 启动时 | 非当日计划标记 expired |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 目录与核心文件
|
||||||
|
|
||||||
|
```
|
||||||
|
qihuo/
|
||||||
|
├── app.py # 路由、业务、DB
|
||||||
|
├── market.py # 新浪 / 同花顺行情
|
||||||
|
├── symbols.py # 品种搜索与主力映射
|
||||||
|
├── contract_specs.py # 合约乘数、保证金比例
|
||||||
|
├── fee_specs.py # 手续费计算
|
||||||
|
├── fee_sync.py # AKShare 费率同步
|
||||||
|
├── kline_chart.py # 复盘 K 线图
|
||||||
|
├── data/fee_rates.json # 默认费率表
|
||||||
|
├── reset_admin.py # 重置管理员密码
|
||||||
|
├── templates/ # 页面模板
|
||||||
|
├── static/js/ # 前端脚本
|
||||||
|
├── docs/ # 文档
|
||||||
|
├── futures.db # SQLite(运行后生成)
|
||||||
|
└── uploads/ # 复盘截图与 K 线图
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 安全提示
|
||||||
|
|
||||||
|
- 部署后立即修改默认密码
|
||||||
|
- 勿将 `.env` 提交到仓库
|
||||||
|
- 生产环境建议 Nginx 反代 + HTTPS
|
||||||
|
- 限制 6600 端口访问范围(内网 / VPN)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 仓库
|
||||||
|
|
||||||
|
https://git.bz121.com/dekun/qihuo.git
|
||||||
Reference in New Issue
Block a user