# quant **Repository Path**: liyonghai5168/quant ## Basic Information - **Project Name**: quant - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-11-02 - **Last Updated**: 2025-11-13 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 量化交易系统 一个基于Qlib、Vnpy和Odoo的量化交易系统,支持策略训练、回测、评估和实盘交易。 ## 📋 目录结构 ``` /home/quant/ ├── docker-compose.yml # Docker编排文件 ├── README.md # 项目说明文档(本文件) │ ├── docker/ # Docker配置目录 │ ├── qlib/ │ │ └── init.sh # qlib初始化脚本 │ ├── vnpy/ │ │ ├── zmq_server.py # vnpy ZMQ服务器 │ │ └── entrypoint.sh # vnpy启动脚本 │ ├── odoo/ │ │ ├── odoo.conf # Odoo配置文件 │ │ ├── requirements.txt # Python依赖 │ │ └── install_deps.sh # 依赖安装脚本 │ └── jupyter/ │ ├── jupyter_lab_config.py # Jupyter配置 │ ├── requirements.txt # Python依赖 │ └── install_deps.sh # 依赖安装脚本 │ ├── qlib/ # qlib相关目录 │ ├── data/ # qlib数据目录 │ ├── scripts/ # qlib训练脚本 │ ├── strategies/ # qlib训练生成的策略模型 │ ├── results/ # 回测结果 │ └── notebooks/ # Jupyter notebooks │ ├── vnpy/ # vnpy相关目录 │ ├── config/ # vnpy配置文件 │ │ └── vt_setting.json # 交易接口配置 │ ├── strategies/ # vnpy策略代码(按类型分类) │ │ ├── cta/ # CTA策略 │ │ ├── algo/ # 算法交易策略 │ │ ├── spread/ # 价差交易策略 │ │ ├── option/ # 期权策略 │ │ ├── portfolio/ # 组合策略 │ │ └── shared/ # 共享工具 │ ├── apps/ # 策略配置目录 │ └── logs/ # 日志目录 │ ├── cta/ │ ├── algo/ │ └── general/ │ └── odoo/ # Odoo相关目录 ├── custom_addons/ # Odoo自定义模块 │ ├── vnpy_manager/ # vnpy管理模块 │ └── qlib_jupyter/ # qlib Jupyter集成模块 └── config/ # Odoo配置 ``` ## 🚀 快速开始 ### 1. 启动系统 ```bash cd /home/quant docker-compose up -d ``` ### 2. 访问服务 - **Odoo Web界面**: http://localhost:8080 - 首次登录需要创建数据库 - 默认账号:admin - 首次登录会要求设置密码 - **Jupyter Lab**: http://localhost:8888 - Token:quant123 ### 3. 初始化数据库和安装模块 首次启动后,在Odoo中: 1. 访问 http://localhost:9069 2. 创建数据库(选择语言、设置管理员密码等) 3. 登录后,进入应用菜单 4. 搜索并安装 `vnpy_manager` 模块(vnpy交易系统管理) 5. 可选:安装 `qlib_jupyter` 模块(如需使用Jupyter功能) ## 📦 服务说明 ### Qlib服务 - **功能**: 策略训练、回测、评估 - **容器名**: `quant_qlib` - **数据目录**: `/home/quant/qlib/` - **用途**: 使用历史数据训练策略,筛选出优质策略用于实盘 ### Vnpy服务 - **功能**: 实盘交易执行 - **容器名**: `quant_vnpy` - **端口**: 5555 (ZMQ) - **用途**: 执行交易策略,管理订单、持仓、账户 ### Odoo服务 - **功能**: Web管理界面 - **容器名**: `quant_odoo` - **端口**: 8069 - **用途**: 统一管理vnpy策略、配置、交易数据 ### Jupyter服务 - **功能**: 策略开发和测试 - **容器名**: `quant_jupyter` - **端口**: 8888 - **用途**: 在Notebook中开发和测试Qlib策略 ## 📝 策略开发指南 ### 策略类型 系统支持以下策略类型: | 策略类型 | 目录 | 基类 | 用途 | |---------|------|------|------| | **CTA策略** | `vnpy/strategies/cta/` | `CtaTemplate` | 基于技术分析的策略 | | **算法交易** | `vnpy/strategies/algo/` | `AlgoTemplate` | TWAP、VWAP等算法 | | **价差交易** | `vnpy/strategies/spread/` | `SpreadTemplate` | 跨品种、跨期套利 | | **期权策略** | `vnpy/strategies/option/` | `OptionTemplate` | 期权交易策略 | | **组合策略** | `vnpy/strategies/portfolio/` | `PortfolioTemplate` | 多策略组合管理 | ### 开发CTA策略 1. **创建策略文件** ```python # /home/quant/vnpy/strategies/cta/my_strategy.py from vnpy.app.cta_strategy import CtaTemplate, BarData class MyStrategy(CtaTemplate): """我的策略""" # 策略参数 fast_window = 10 slow_window = 20 parameters = ["fast_window", "slow_window"] variables = [] def on_init(self): """策略初始化""" self.write_log("策略初始化") self.load_bar(20) def on_bar(self, bar: BarData): """K线数据推送""" # 您的交易逻辑 pass ``` 2. **在Odoo中注册策略** - 进入"vnpy交易系统" -> "策略管理" - 创建策略,选择类型为"CTA策略" - 填写策略文件路径:`/app/strategies/cta/my_strategy.py` - 填写策略类名:`MyStrategy` 3. **启动策略** - 在Odoo界面中点击"启动策略" ### 策略文件路径说明 - **宿主机路径**: `/home/quant/vnpy/strategies/cta/my_strategy.py` - **容器内路径**: `/app/strategies/cta/my_strategy.py` - **在Odoo中配置时使用容器内路径** ## 🔧 配置管理 ### 交易接口配置 1. **在Odoo中配置** - 进入"vnpy交易系统" -> "交易配置" - 填写交易接口信息(CTP、IB等) - 点击"保存到文件" 2. **配置文件位置** - 文件路径:`/home/quant/vnpy/config/vt_setting.json` - 容器内路径:`/app/config/vt_setting.json` 3. **修改配置后重启vnpy** ```bash docker-compose restart vnpy ``` ## 📊 数据管理 ### Qlib策略数据 1. **训练策略** ```bash docker exec -it quant_qlib python /app/scripts/train_strategy.py ``` 2. **查看策略数据** - 在Odoo中进入"qlib策略数据" - 点击"从文件加载"加载策略数据 - 查看训练和回测结果 3. **同步到vnpy** - 在策略数据页面点击"同步到vnpy策略" - 自动在Odoo中创建vnpy策略记录 ### 交易数据 - **订单**: 存储在Odoo数据库(增量更新,保留历史) - **成交**: 存储在Odoo数据库(增量更新,保留历史) - **持仓**: 存储在Odoo数据库(增量更新,保留历史) - **账户**: 存储在Odoo数据库(增量更新,保留历史) ### 数据同步 - **自动同步**: 默认每60秒自动同步一次 - **手动同步**: 在Odoo中进入"数据同步" -> 点击"立即同步" - **配置同步**: 可以设置同步间隔和选择同步的数据类型 ## 🔍 日志管理 ### 日志位置 - **vnpy日志**: `/home/quant/vnpy/logs/` - 按策略类型分类:`logs/cta/`, `logs/algo/`等 - **Odoo日志**: Odoo容器日志 ### 查看日志 1. **在Odoo中查看** - 进入"vnpy交易系统" -> "日志管理" - 选择日志文件 - 点击"刷新"获取最新日志 2. **直接查看文件** ```bash docker exec -it quant_vnpy tail -f /app/logs/vnpy_zmq.log ``` ## 📡 实时行情推送 - **Redis服务**: 新增 `quant_redis`(默认 6379),缓存最新 tick(`HSET vnpy:tick:`)并保留 `vnpy:ticks` Stream。 - **Socket.IO桥接**: `quant_realtime_bridge` 容器(端口 `7001`,通过 Nginx 可在 `http://localhost:8080/socket.io/` 访问)订阅 vn.py ZMQ PUB(5556),将数据写入 Redis,并按 `room` 将 tick 推送给 Web / App 端。 - **客户端用法**: ```js const socket = io("http://localhost:8080"); socket.emit("subscribe", ["rb2401.SHFE"]); socket.on("tick", (tick) => console.log(tick)); ``` - **HTTP接口**: `GET /api/tick/` 可读取 Redis 缓存的最新 Tick,供 Odoo 面板或脚本查询。 - 建议将 Web/移动端行情直接接入该服务;Odoo 仅在需要时取 Redis 快照或订阅低频事件,避免 `bus.bus` 承载高频 tick。 ## 🧩 分布式节点(实验性) - `worker_template/`:最小 vn.py 子项目模板,复制到任意云服务器即可独立运行。包含 `docker-compose.yml`、配置/策略挂载目录以及启动脚本。 - `control_api/`:FastAPI 控制服务(默认端口 9002),提供节点注册、心跳和命令执行接口。可通过 `uvicorn control_api.main:app --port 9002` 启动。 - `worker_nodes/node1/`:基于模板创建的本地示例节点,可配合 `control_api` 进行调试。 - 示例操作: ```bash cd control_api && uvicorn main:app --port 9002 ./worker_nodes/register_local_node.sh curl -X POST http://127.0.0.1:9002/nodes/node1/command \ -H "Authorization: Bearer changeme" \ -H "Content-Type: application/json" \ -d '{"action":"start"}' ``` - 正式环境可将 Control API 扩展为 SSH 调度,Odoo 通过其接口即可远程管理多台节点。 ## 🛠️ 常用命令 ### Docker管理 ```bash # 启动所有服务 docker-compose up -d # 停止所有服务 docker-compose down # 重启单个服务 docker-compose restart vnpy docker-compose restart odoo # 查看服务状态 docker-compose ps # 查看日志 docker-compose logs vnpy docker-compose logs odoo ``` ### 进入容器 ```bash # 进入vnpy容器 docker exec -it quant_vnpy bash # 进入qlib容器 docker exec -it quant_qlib bash # 进入odoo容器 docker exec -it quant_odoo bash # 进入jupyter容器 docker exec -it quant_jupyter bash ``` ### 策略管理 ```bash # 查看策略文件 ls -la /home/quant/vnpy/strategies/cta/ # 创建新策略 cat > /home/quant/vnpy/strategies/cta/new_strategy.py << 'EOF' # 策略代码 EOF ``` ## 📚 相关文档 - `VNPY_STRATEGY_DEVELOPMENT.md` - 策略开发详细指南 - `VNPY_STRUCTURE_OPTIMIZATION.md` - 目录结构优化说明 - `VNPY_STRATEGY_TYPES.md` - 策略类型说明 - `DATA_SYNC.md` - 数据同步机制说明 - `ARCHITECTURE.md` - 系统架构说明 - `SERVICE_DEPENDENCIES.md` - 服务依赖说明 ## ⚠️ 注意事项 ### 1. 策略文件路径 - **开发时**: 使用宿主机路径 `/home/quant/vnpy/strategies/` - **Odoo配置时**: 使用容器内路径 `/app/strategies/` ### 2. 配置修改 - 修改交易配置后需要重启vnpy服务 - 策略文件修改后需要重启策略(在Odoo中停止后重新启动) ### 3. 数据持久化 - 所有配置和策略文件都通过Docker卷挂载,重启不丢失 - 交易数据存储在Odoo数据库,永久保存 ### 4. 服务依赖 - Odoo依赖vnpy和jupyter服务 - vnpy依赖qlib服务(用于读取策略模型) - 建议启动顺序:qlib → vnpy → odoo ## 🔄 工作流程 ### 完整的策略开发流程 ``` 1. 数据准备 ↓ 2. Qlib训练策略(在Jupyter或脚本中) ↓ 3. 回测和评估 ↓ 4. 策略筛选(在Odoo中查看qlib策略数据) ↓ 5. 同步到vnpy(在Odoo中同步) ↓ 6. 开发vnpy策略代码(放在对应类型目录) ↓ 7. 在Odoo中注册策略 ↓ 8. 启动策略进行实盘交易 ↓ 9. 监控和管理(在Odoo中查看交易数据) ``` ## 🩺 健康检测 - 脚本:`scripts/gateway_health_check.py`(详见 `GATEWAY_HEALTH_CHECK.md`) - 默认读取 `vnpy/config/vt_setting.json`,调用 vn.py 的 `get_status`,并返回非零退出码表示有接口掉线 - 示例:`python3 scripts/gateway_health_check.py --interval 30 --iterations 0` 持续轮询;`--json` 可用于日志/监控系统 - 建议结合 Cron、systemd 或 CI 任务运行,实现自动化线上巡检 - 连接流程会等待CTP等接口完成真实登录;若未收到交易/行情回复,Odoo会提示“登录超时”,并视为未连接 ## 🆘 故障排查 ### vnpy无法连接 1. 检查vnpy服务是否运行:`docker-compose ps` 2. 检查ZMQ端口是否正常:`netstat -tlnp | grep 5555` 3. 查看vnpy日志:`docker-compose logs vnpy` ### Odoo无法连接vnpy 1. 检查网络连接:确保在同一Docker网络 2. 检查ZMQ服务:在Odoo中测试连接 3. 查看错误日志:在Odoo中查看同步错误信息 ### 策略无法启动 1. 检查策略文件路径是否正确 2. 检查策略类名是否正确 3. 查看vnpy日志了解详细错误信息 ## 📞 支持 如有问题,请查看相关文档或检查日志文件。 ## 📄 许可证 本项目仅供学习和研究使用。