完善下单表单与 CTP 持仓,requirements 加入 vnpy 并更新部署文档

以损定仓/固定张数分栏下单、限价市价、持仓仅读柜台;DEPLOY 补充 SimNow 与 vnpy 安装说明。

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
dekun
2026-06-24 10:52:25 +08:00
parent 709801305f
commit 62cd868f79
9 changed files with 394 additions and 308 deletions
+84 -13
View File
@@ -20,13 +20,15 @@
## 环境要求
- **系统**Ubuntu 20.04+(推荐)
- **Python**3.10+
- **Python**3.10+vnpy_ctp 要求 ≥3.10
- **Node.js + PM2**:进程守护与开机自启
- **编译工具**(安装 vnpy_ctp 时需要):`build-essential``python3-dev`
- **网络**
- `hq.sinajs.cn`(新浪行情)
- 企业微信 API(若启用推送)
- `git.bz121.com`(拉取代码)
- 可选:`pip` 安装 akshare 时需访问 PyPI
- `pypi.org`pip 安装依赖)
- SimNow / 期货公司 **CTP 前置地址**(下单与持仓,见下文)
---
@@ -60,10 +62,12 @@ bash deploy.sh
```bash
apt update
apt install -y python3 python3-venv python3-pip git nodejs npm
apt install -y python3 python3-venv python3-pip python3-dev git nodejs npm build-essential
npm install -g pm2
```
`build-essential``python3-dev` 用于编译安装 **vnpy_ctp**CTP 网关)。若 `pip install vnpy_ctp` 报编译错误,请先确认上述包已安装。
### 2. 克隆代码
```bash
@@ -80,16 +84,13 @@ pip install --upgrade pip
pip install -r requirements.txt
```
### 4. 可选:AKShare(手续费第三方同步)
依赖已包含 **vnpy**、**vnpy_ctp**CTP 报单)、**akshare**(手续费同步)。安装完成后可验证:
```bash
source venv/bin/activate
pip install akshare
python -c "from vnpy_ctp import CtpGateway; print('vnpy_ctp OK')"
```
不安装也可使用系统内置 `data/fee_rates.json` 默认费率
### 5. 环境变量
若提示找不到模块,查看本文「CTP / vnpy 故障排查」一节
```bash
cp .env.example .env
@@ -107,6 +108,12 @@ nano .env
| `WECHAT_WEBHOOK` | 企业微信机器人地址(可选) |
| `QUOTE_SOURCE` | `sina`(默认)/ `ths` / `auto` |
| `THS_REFRESH_TOKEN` | 同花顺 iFinD token(机构用户) |
| `SIMNOW_USER` | SimNow 仿真账号(模拟盘必填) |
| `SIMNOW_PASSWORD` | SimNow 密码 |
| `SIMNOW_TD_ADDRESS` | SimNow 交易前置(以官网最新为准) |
| `SIMNOW_MD_ADDRESS` | SimNow 行情前置 |
| `CTP_LIVE_*` | 期货公司实盘 CTP(后期接入,见 `.env.example` |
| `TRADING_MODE` | `simulation`SimNow/ `live`(实盘) |
示例:
@@ -119,8 +126,21 @@ ADMIN_PASSWORD=你的强密码
ADMIN_SYNC_FROM_ENV=false
WECHAT_WEBHOOK=
QUOTE_SOURCE=sina
# —— SimNow 模拟盘(在 simnow.com.cn 注册)——
SIMNOW_USER=你的SimNow账号
SIMNOW_PASSWORD=你的密码
SIMNOW_BROKER_ID=9999
SIMNOW_TD_ADDRESS=tcp://180.168.146.187:10201
SIMNOW_MD_ADDRESS=tcp://180.168.146.187:10211
SIMNOW_APP_ID=simnow_client_test
SIMNOW_AUTH_CODE=0000000000000000
SIMNOW_PRODUCT_INFO=simnow_client_test
TRADING_MODE=simulation
```
SimNow 前置地址会随官网更新,部署前请到 [SimNow 官网](https://www.simnow.com.cn/) 核对 **7×24** 或交易时段地址。
### 6. PM2 启动
```bash
@@ -150,15 +170,25 @@ pip install -r requirements.txt
pm2 restart qihuo
```
新增可选依赖(如 akshare):
`vnpy_ctp` 安装失败(常见于缺少编译环境):
```bash
pip install akshare
apt install -y build-essential python3-dev
source venv/bin/activate
pip install --no-cache-dir vnpy vnpy_ctp
pm2 restart qihuo
```
应用启动时会自动执行 SQLite 表结构迁移(`ALTER TABLE` 容错),一般无需手工改库。
### 首次启用 CTP 下单
1. 浏览器登录 → **系统设置** 确认 **模拟盘 · SimNow**
2. 打开 **持仓监控** 页 → 点击 **连接 CTP**
3. 连接成功后:权益来自柜台、**持仓监控** 显示 CTP 实际持仓、**期货下单** 可报单
详见 [TRADING.md](./TRADING.md)。
---
## PM2 常用命令
@@ -274,7 +304,11 @@ ufw allow 6600/tcp
| 现价一直 `--` | 新浪网络不可达 | 检查服务器能否访问 `hq.sinajs.cn` |
| 关键位 500 | 缺 `sina_code` 列 | `git pull` 重启;或手工 `ALTER TABLE` |
| K 线生成失败 | matplotlib 未装 | `pip install matplotlib==3.9.2` |
| 手续费同步失败 | 未装 akshare | `pip install akshare` 或用「重载 JSON」 |
| 手续费同步失败 | 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` |
查看应用是否在监听:
@@ -283,6 +317,37 @@ ufw allow 6600/tcp
ss -tlnp | grep 6600
```
### CTP / vnpy 故障排查
页面提示 **「未安装 vnpy / vnpy_ctp」** 表示 Python 环境未成功安装 CTP 网关,下单与柜台持仓不可用(看盘、策略、复盘仍可用)。
**1. 安装依赖**
```bash
cd /opt/qihuo
source venv/bin/activate
apt install -y build-essential python3-dev # 首次需要
pip install -r requirements.txt
python -c "from vnpy_ctp import CtpGateway; print('OK')"
pm2 restart qihuo
```
**2. 配置 SimNow`.env`**
填写 `SIMNOW_USER``SIMNOW_PASSWORD`,前置地址以 SimNow 官网为准。
**3. 连接**
登录系统 → **持仓监控****连接 CTP**。成功则顶栏显示「CTP 已连接」,权益变为 SimNow 账户资金。
**4. 常见错误**
| 日志/现象 | 处理 |
|-----------|------|
| `pip install vnpy_ctp` 编译失败 | 安装 `build-essential python3-dev` 后重试 |
| CTP 连接超时 | 检查前置 IP、端口、SimNow 是否维护、是否在允许连接时段 |
| 已连接但下单拒单 | 检查合约代码、价格精度、是否有足够保证金 |
---
## 安全建议
@@ -299,6 +364,9 @@ ss -tlnp | grep 6600
```
/opt/qihuo/
├── app.py
├── vnpy_bridge.py # CTP 执行层
├── recommend_store.py # 品种推荐缓存
├── recommend_stream.py # 品种推荐 SSE 推送
├── venv/
├── futures.db
├── .env
@@ -309,9 +377,11 @@ ss -tlnp | grep 6600
├── data/fee_rates.json
├── ecosystem.config.cjs
├── deploy.sh
├── requirements.txt # 含 vnpy、vnpy_ctp
└── docs/
├── FEATURES.md
── DEPLOY.md
── DEPLOY.md
└── TRADING.md
```
---
@@ -319,4 +389,5 @@ ss -tlnp | grep 6600
## 相关文档
- [功能说明文档](./FEATURES.md)
- [交易与 SimNow 配置](./TRADING.md)
- [README](../README.md)
+20 -6
View File
@@ -9,14 +9,27 @@
已移除「本地 SQLite 假撮合」;模拟盘与实盘均走 **vnpy_ctp**,仅 `.env` 前置与账号不同。
## 依赖安装
`requirements.txt` 已包含 `vnpy``vnpy_ctp`。服务器部署:
```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 故障排查」。
## 首次使用 SimNow
1. 在 [SimNow](https://www.simnow.com.cn/) 注册仿真账号
2. 复制 `.env.example``.env`,填写 `SIMNOW_USER``SIMNOW_PASSWORD`
3. 核对 SimNow 官网最新的 **7×24 或交易时段** 前置地址
4. `pip install vnpy vnpy_ctp`
5. 启动程序 → **期货下单** → 点击 **连接 CTP**
6. 连接成功后,权益、持仓、下单均来自 SimNow
4. `pip install -r requirements.txt`(含 vnpyvnpy_ctp
5. 启动程序 → **持仓监控** → 点击 **连接 CTP**
6. 连接成功后,权益、持仓、下单均来自 SimNow 柜台
## 参考资金
@@ -26,8 +39,7 @@
| 页面 | 路径 |
|------|------|
| 品种推荐 | `/recommend` |
| 期货下单 | `/trade` |
| 持仓监控(含下单、推荐 | `/positions` |
| 策略交易 | `/strategy` |
| 策略记录 | `/strategy/records` |
@@ -37,4 +49,6 @@
|------|------|
| `POST /api/ctp/connect` | 按当前模式连接 SimNow 或实盘 CTP |
| `GET /api/ctp/status` | 连接状态与缺失配置项 |
| `POST /api/trade/order` | 限价报单(需已连接 CTP |
| `POST /api/trade/order` | 报单(限价/市价,需已连接 CTP |
| `GET /api/trading/live` | 持仓(CTP 柜台数据) |
| `GET /api/recommend/stream` | 品种推荐 SSE 推送 |