- 金融科技
- 后端
- 数据分析
【免费下载链接】QUANTAXIS
QUANTAXIS 支持任务调度 分布式部署的 股票/期货/期权 数据/回测/模拟/交易/可视化/多账户 纯本地量化解决方案
QUANTAXIS 是一个纯本地的股票/期货/期权量化解决方案,覆盖数据获取、回测、模拟、实盘交易、可视化与多账户管理。为了让用户跳过繁琐的环境配置,项目在docker/目录下提供了一套完整的 Docker 化部署方案,其核心是qa-service:一个把 MongoDB 数据库、RabbitMQ 事件消息队列、Jupyter 工作台、Web 可视化界面、回测与实盘服务全部预装并自动拉起的"一站式量化环境"。本指南以 docker/readme.md 为主线,结合仓库内真实的一键脚本、docker-compose 配置与镜像 Dockerfile,带你完成 Docker 安装、qa-service 环境初始化、日常使用与数据备份还原,并深入理解这套容器编排的底层原理。读完你即可在 Linux、Windows 或 macOS 上快速部署一套开箱即用的 QUANTAXIS 环境。
1. 部署总览:四步走
原文档将整套部署流程提纲挈领地分为四个阶段,这也是本指南的组织脉络:
- 安装 Docker:在宿主机上装好 Docker 与 Docker Compose 运行环境;
- 配置 qa-service 环境:创建两个数据卷(volume),并获取 docker-compose 编排文件;
- 拉起并开始使用:执行
docker-compose up,通过网页与 Jupyter 直接开始回测、实盘与可视化; - Docker 进阶:日志查看、服务状态管理、停止/删除、更新以及数据库备份还原。
如果你只想"用",完成前两步后由脚本自动完成第三步即可,完全不需要深入理解 Docker 概念;进阶部分则留给需要长期运维或二次开发的同学。
2. 安装 Docker
2.1 Linux:一键安装脚本
仓库中提供了针对 Ubuntu 等 Linux 发行版的一键安装脚本 config/install_docker.sh,其核心逻辑如下:
curl -sSL https://get.daocloud.io/docker | sh curl -L https://get.daocloud.io/docker/compose/releases/download/1.24.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose chmod +x /usr/local/bin/docker-compose可以看到脚本做了两件事:
- 通过 DaoCloud 镜像源安装 Docker 引擎(比直接访问 Docker 官方源在国内网络环境更稳定);
- 下载docker-compose 1.24.1到
/usr/local/bin/并赋予执行权限——qa-service 的编排文件正是基于该版本的 compose 语法编写(version: '2'),因此使用仓库提供的脚本可以保证版本兼容。
原文档给出的使用方式是:先将脚本下载到本地,然后以 root 权限执行:
sudo bash install_docker.sh注意:该脚本仅适用于 Linux,Windows/macOS 用户请勿使用。
2.2 Windows / macOS:安装 Docker Desktop
Windows 与 macOS 下需要手动安装Docker Desktop(图形化安装包,官方渠道下载即可)。原文档特别强调了一个关键注意事项:
安装 exe 时,最后一步关于"使用 Windows container"的选项一定不要勾选!
QUANTAXIS 的容器全部是基于 Linux 镜像构建的(如daocloud.io/quantaxis/qacommunity-rust-go:allin-20210218),必须以Linux container模式运行。同时,原文档也建议尽量避免在 Windows 10 以下的旧系统上部署,以免遇到兼容性问题。
安装完成后,可以在终端验证 Docker 是否可用:
docker version docker-compose version3. 理解 qa-service:一个"预装好一切的量化环境"
qa-service 的本质是一个 Docker Compose 环境(environment),它替你预装并预拉起了 QUANTAXIS 使用所需的全部组件。原文档给出了非常明确的定位:
- 只想使用(写回测、跑实盘、看可视化)→ 拉起 qa-service 即可,不需要学会 Docker;
- 想做二次开发(魔改源码、与现有系统集成)→ 不建议直接上 Docker,先在本地调试部署完成,再学习制作镜像以实现分发。
在你第一次使用 qa-service 之前,需要完成两项一次性预处理:
- 创建两个 Docker 数据卷(volume):
qamg:存放数据库(MongoDB)的数据文件;qacode:存放你编写的代码(策略/回测脚本)。
- 准备 docker-compose.yaml 编排文件:这是描述整个环境配置的设置文件。你不需要读懂其中的每一行,只需要把它下载到一个专属文件夹(例如
D:/qa/或~/quantaxis_docker/)中备用。
关于 volume,可以把它理解为Docker 级别的"可移动硬盘":容器是易失的,删除后数据随之消失;而 volume 挂载在宿主机上,数据可以跨容器生命周期持久保留。qamg与qacode两个 volume只需创建一次,后续反复docker-compose up/down都不会丢失数据。
4. Linux 下使用 qa-service
4.1 第一次使用:一键脚本
Linux 用户(原文档戏称"默认精通百度搜索的男人")可以直接使用仓库中的 docker/qaservice_docker.sh。该脚本的内容非常直观:
echo "QUANTAXIS_DOCKER_SERVICE" mkdir quantaxis_docker && cd quantaxis_docker wget https://raw.githubusercontent.com/QUANTAXIS/QUANTAXIS/master/docker/qa-service/docker-compose.yaml docker volume create qamg docker volume create qacode docker-compose up -d它依次完成了:创建专属目录quantaxis_docker→ 下载 docker/qa-service/docker-compose.yaml → 创建qamg、qacode两个数据卷 → 以-d(后台守护)模式拉起整套环境。下载脚本后执行:
sudo bash qaservice_docker.sh4.2 后续使用
后续启动/停止服务时,只需cd到存放 docker-compose.yaml 的目录(即第一次脚本创建的quantaxis_docker):
docker-compose up -d5. Windows / macOS 下使用 qa-service
第一次使用需要手动完成四步:
第 1 步:创建两个数据卷
docker volume create --name=qamg docker volume create --name=qacode第 2 步:下载编排文件—— 获取 docker/qa-service/docker-compose.yaml,保存到本地。
第 3 步:把它放到你心爱的专属文件夹中(例如D:/qa/),记住这个目录。
第 4 步:拉起服务
cd D:/qa # 换成你的专属目录 docker-compose up首次执行
docker-compose up会从镜像仓库拉取全部镜像,耗时较长属正常现象;中途不要中断,等待各容器完成初始化。
后续使用:先更新镜像,再启动:
cd D:/qa docker-compose pull # 更新 docker 镜像文件 docker-compose up6. 拉起后:端口一览与三种使用姿势
6.1 端口分配
原文档给出了 qa-service 暴露的核心端口。结合 docker/qa-service/docker-compose.yaml 与 docker/qa-service/docker-compose3.yaml 两个编排文件,完整的端口映射如下:
| 端口 | 服务 | 说明 |
|---|---|---|
| 27017 | MongoDB | QUANTAXIS 主数据库(数据文件存于qamg卷) |
| 8888 | Jupyter | 在线写策略、跑回测的交互式工作台 |
| 8010 | quantaxis_webserver | Web 可视化服务 |
| 8018 / 8019 / 8028 / 8029 | quantaxis_webserver 辅助端口 | Web 服务扩展端口 |
| 81 | quantaxis_community | 社区版 Web 界面(容器内 80 端口映射到宿主机 81) |
| 8787 | qa 容器开发端口 | 社区镜像预留 |
| 61208 | 系统监控(glances) | 容器资源监控界面(v3 编排中映射 61209/61208) |
| 15672 | qa-eventmq 管理界面 | RabbitMQ 管理控制台(默认账号admin/admin) |
| 5672 | qa-eventmq AMQP | 消息队列业务端口 |
| 4369 | qa-eventmq epmd | Erlang 分布式节点端口 |
| 8011 | qamarketcollector | 实时行情采集服务(v3 编排) |
| 8020 | qatrader | 交易网关服务(v3 编排) |
6.2 三种使用姿势
环境拉起后,QUANTAXIS 已经帮你把配置环境的"脏活"全部干完,你可以直接:
- 通过 HTML 界面工作:浏览器访问社区版界面(端口 81)与 quantaxis_webserver(端口 8010),直接编写回测、查看回测结果、操作实盘;
- 通过 Jupyter 工作:访问 8888 端口打开 Jupyter Lab,在线编写与运行策略,代码默认持久化到
qacode卷(/root/code); - 本地 Python + 远端环境:如果你本地已有 Python 环境,可以在本地编写代码,通过网络连接 qa-service 提供的数据库(27017)与消息队列(5672),把 Docker 当作"共享基础设施"来用。
原文档还特别提醒两个观念:
- Docker 与本地环境可以并存:有了本地 Python 并不妨碍使用 Docker,两者互不冲突;
- Docker 的目的是快速拉起:如果你有精力把 QUANTAXIS 的各个模块全部本地部署一遍,同样欢迎——Docker 只是省事的手段,不是唯一路径。
7. 进阶运维:日志、状态、停止与更新
以下内容属于 Docker 进阶操作,看不懂、不想看可以跳过;对长期使用来说却非常实用。
7.1 查看每日数据更新日志
docker-compose 中预留了qacron(定时数据更新)服务(编排文件中以注释形式存在)。查看其日志:
docker logs cron容器名注意:日志只输出到容器前台,如果日志对你很重要,建议使用专业的日志收集工具从 cron 容器采集。
7.2 查看服务状态
docker ps # 查看运行中的容器列表 docker stats # 实时查看各容器 CPU/内存占用 docker-compose top # 查看 compose 各服务对应的进程 docker-compose ps # 查看 compose 各服务的运行状态7.3 停止 / 删除全部服务
原文档戏称"这两条真的超级管用,不信你可以试下":
# 停止所有容器 docker stop $(docker ps -a -q) # 删除所有容器 docker rm $(docker ps -a -q)注意:
docker rm删除的是容器本身,不会删除qamg、qacode数据卷,因此你的数据库与代码不会丢失;若想连数据卷一起清理,需显式执行docker volume rm qamg qacode(务必谨慎,数据不可恢复)。
7.4 更新镜像
docker-compose pull拉取最新镜像后,再执行docker-compose up -d即可让新配置生效。
8. 数据库备份与还原(关键数据安全)
MongoDB 数据保存在qamg卷中,下面两组命令分别完成备份与还原,全程无需进入容器。
8.1 备份(输出到宿主机当前目录,文件名dbbackup.tar)
第 1 步:停止服务,避免备份过程中数据被写入:
docker-compose stop第 2 步:利用一个临时 Alpine 容器,把qamg卷挂载为/data/db,将宿主机当前目录挂载为/backup,再打包:
docker run --rm -v qamg:/data/db \ -v $(pwd):/backup alpine \ tar zcvf /backup/dbbackup.tar /data/db第 3 步:备份完成后重启服务:
docker-compose up -d8.2 还原(宿主机当前目录下需存在dbbackup.tar)
第 1 步:停止服务:
docker-compose stop第 2 步:先清理旧数据目录(diagnostic.data、journal、configdb),再从备份包解压还原:
docker run --rm -v qamg:/data/db \ -v $(pwd):/backup alpine \ sh -c "cd /data/db \ && rm -rf diagnostic.data \ && rm -rf journal \ && rm -rf configdb \ && cd / \ && tar xvf /backup/dbbackup.tar"第 3 步:重新启动服务:
docker-compose up -d建议将备份文件
dbbackup.tar定期转移到异地存储,qamg卷只是本机数据卷,宿主机磁盘故障时仍会丢失。
9. 源码级深入:qa-service 容器编排原理
要理解 qa-service 为什么能"一键拉起一切",需要回到仓库中的编排文件与镜像构建脚本。
9.1 docker-compose.yaml 结构解析
docker/qa-service/docker-compose.yaml(compose v2 语法)定义了 5 个服务,它们在自定义网络qanetwork(子网172.19.0.0/24,网关172.19.0.1)内通过固定 IP 互联:
| 服务 | 镜像 | 固定 IP | 职责 |
|---|---|---|---|
qa | quantaxis/qacommunity-rust-go:allin-20210218 | 172.19.0.3 | 社区版主容器:Jupyter(8888) + 社区界面(80→81),挂载qacode:/root/code |
qaweb | 同上 | 172.19.0.4 | Web 服务(8010 等端口),通过 wait_for_it 等待 MQ 就绪后启动 celery worker |
mgdb | quantaxis/qamongo_single:latest | 172.19.0.2 | MongoDB 单机实例,初始化库quantaxis,数据挂载qamg:/data/db |
qaeventmq | quantaxis/qaeventmq:latest | 172.19.0.5 | RabbitMQ 事件消息队列(15672/5672/4369) |
qatrader | quantaxis/qatrader:latest | 172.19.0.9 | 交易网关(8020),等待 MQ 就绪后启动qatraderserver |
关键设计点:
- 外部卷声明:
volumes段使用external: true+ 固定名称qamg/qacode,这正是为什么必须先手动docker volume create的原因——Compose 不会自动创建外部卷,缺失会导致启动失败; - 启动顺序控制:
depends_on保证数据库与消息队列先于应用启动;而command: ['/root/wait_for_it.sh', 'qaeventmq:5672', '--', ...]则使用 docker/qa-service/wait_for_it.sh 脚本轮询 TCP 端口,确保 AMQP 真正就绪后才拉起业务进程(wait_for_it.sh是标准 wait-for-it 实现,支持-t超时、-s严格模式等参数,默认超时 15 秒); - 自愈能力:全部服务配置
restart: always,进程异常退出或宿主机重启后容器自动恢复。
9.2 环境变量:容器间如何"认出彼此"
docker/qa-service/env.env(compose v3 编排通过env_file引用)集中定义了服务间的连接信息:
TZ=Asia/Shanghai # 时区 LANG=C.UTF-8 # 语言编码 MONGO_INITDB_DATABASE=quantaxis # MongoDB 初始数据库名 MONGODB=mgdb # 数据库主机名(对应 mgdb 服务) QARUN=qaweb # 运行模式 QAPUBSUB_IP=qaeventmq # 消息队列主机名 QAPUBSUB_PORT=5672 # AMQP 端口 QAPUBSUB_USER=admin # 消息队列账号 QAPUBSUB_PWD=admin # 消息队列密码 QARUN_AMQP=pyamqp://admin:admin@qaeventmq:5672// # Celery 使用的 AMQP 连接串 EventMQ_IP=qaeventmq # EventMQ 主机名QUANTAXIS 各模块正是通过MONGODB、QAPUBSUB_*这类环境变量在容器内定位彼此的——这也解释了为什么 docker 内无需修改任何配置文件即可互通。若你自定义部署拓扑(例如把消息队列换到宿主机),只需调整这些变量即可。
9.3 镜像内部:社区容器启动链路
以 docker/kite/qa-community-rust2/Dockerfile 为例,社区镜像基于 Jupyter 基础镜像构建,内置了:Python 量化全家桶(quantaxis、quantaxis_webserver、quantaxis_run、qifimanager、qavifiserver、eventlet等,经 pypi 镜像安装)、Rust 工具链、Go 环境(gophernotes Jupyter 内核)、Rust Jupyter 内核(evcxr)、Keras/TensorFlow,以及定期更新脚本daily_update(内容为每周一至周五 18:18 由 cron 触发执行config/update_future.py更新期货数据)。容器入口 run-community.sh 会先根据MONGODB环境变量把QASetting.py中的localhost替换为实际的数据库主机名,再启动 Jupyter Lab 与社区界面 HTTP 服务:
sed -i "s|localhost|$MONGODB|" /opt/conda/lib/python3.8/site-packages/QUANTAXIS/QAUtil/QASetting.py jupyter lab --allow-root --notebook-dir=/root --config /root/.jupyter/jupyter_notebook_config.py & cd /root/qamazing_community && python -m http.server 80Web 服务容器则通过 runcelery.sh 依次拉起quantaxis_webserver、qifi_manager、qavifiserver、portfoliohandler,最后启动 Celery worker 处理回测/任务队列:
quantaxis_webserver & qifi_manager & qavifiserver & /root/portfoliohandler & celery -A quantaxis_run worker --loglevel=info9.4 编排的两种版本
仓库在docker/qa-service/下同时提供了两个编排文件:
- docker/qa-service/docker-compose.yaml:compose v2 语法,基础五服务,对应 docker-compose 1.24.1 一键脚本安装的版本;
- docker/qa-service/docker-compose3.yaml:compose v3.7 语法,额外包含
qamonitor(系统监控,61209/61208)、qamarketcollector(实时行情采集,8011)两个服务,并通过env_file: env.env统一注入环境变量,适合新版本 Docker Compose 与更完整的监控/采集场景。
如果你使用新版 Docker Desktop(内置较新 compose 版本),可以优先选用 v3 编排文件并重命名为docker-compose.yaml,以获得监控与实时采集能力。
10. 小结与继续阅读
一句话总结这套方案:安装 Docker → 创建两个数据卷 → 拿到 docker-compose.yaml →docker-compose up,然后浏览器打开 8888/8010/81 端口即可开始量化开发。数据库在qamg卷中持久化、代码在qacode卷中持久化,备份还原也有现成命令,整个环境可复制、可迁移、可自愈。
相关源码与文档可继续深入阅读:
- 一键安装脚本:config/install_docker.sh
- Linux 一键部署脚本:docker/qaservice_docker.sh
- 基础编排文件:docker/qa-service/docker-compose.yaml
- v3 编排文件与配置:docker/qa-service/docker-compose3.yaml、docker/qa-service/env.env
- 就绪等待脚本:docker/qa-service/wait_for_it.sh
- 镜像构建与启动脚本:docker/kite/qa-community-rust2/Dockerfile、docker/kite/qa-community-rust2/run-community.sh、docker/kite/qa-community-rust2/runcelery.sh
- 事件消息队列镜像:docker/qa-eventmq/Dockerfile
- 部署相关文档:doc/deployment/docker.md、doc/deployment/overview.md
- Kubernetes 部署参考:docker/k8s-deployment/50-quantaxis.yaml
- 金融科技
- 后端
- 数据分析
【免费下载链接】QUANTAXIS
QUANTAXIS 支持任务调度 分布式部署的 股票/期货/期权 数据/回测/模拟/交易/可视化/多账户 纯本地量化解决方案
相关推荐
OpenIM Server Docker 环境安装指南:从 Docker 与 Docker Compose 安装到一键拉起 IM 依赖组件
OpenIM Server Docker 环境安装指南:从 Docker 与 Docker Compose 安装到一键拉起 IM 依赖组件 导读 本指南以 Op
即时通讯后端微服务WebSocketHuly 开发环境 Docker Compose 部署全指南:从 rush 构建到一键拉起整套微服务
Huly 开发环境 Docker Compose 部署全指南:从 rush 构建到一键拉起整套微服务 本文围绕 dev/readme.md https://li
后端前端企业应用项目管理即时通讯CRM超详细Informer2020安装指南:从环境配置到Docker一键部署
超详细Informer2020安装指南:从环境配置到Docker一键部署 1. 前言:解决时间序列预测模型的环境配置痛点 你是否在部署Informer2020时
人工智能深度学习机器学习
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考