完善下单表单与 CTP 持仓,requirements 加入 vnpy 并更新部署文档
以损定仓/固定张数分栏下单、限价市价、持仓仅读柜台;DEPLOY 补充 SimNow 与 vnpy 安装说明。 Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
+84
-13
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user