Sequoia-X V2 是面向 A 股市场的量化选股系统
Sequoia-X 详细部署教程
项目概述
Sequoia-X V2 是面向 A 股市场的量化选股系统,基于现代 Python 工程化标准从零重构。系统以 OOP 架构、向量化计算和增量数据更新为核心设计原则,每日收盘后自动选股并推送至飞书群。
核心特点:
- 数据层使用 baostock(免费、无需注册、无限流)拉取历史及增量日 K 数据(后复权)
- 存储于本地 SQLite,彻底规避东方财富反爬问题
- 内置 7 种技术形态选股策略
- 支持飞书 Webhook 自动推送
两种运行模式:
| 模式 | 命令 | 说明 |
|---|---|---|
| 日常模式 | python main.py |
8进程增量补数据 + 跑策略 + 飞书推送(2~3分钟) |
| 回填模式 | python main.py --backfill |
全市场历史K线一次性灌入(约12分钟) |
内置策略:
| 策略 | 说明 |
|---|---|
| TurtleTrade | 海龟突破:20日新高 + 成交额过亿 + 阳线防诱多,按涨幅排序 |
| MaVolume | 均线+放量突破 |
| HighTightFlag | 高而窄的旗形整理突破 |
| LimitUpShakeout | 涨停洗盘回踩确认 |
| UptrendLimitDown | 上升趋势中的跌停反包 |
| RpsBreakout | 欧奈尔 RPS 相对强度突破 |
部署前准备
系统要求
| 项目 | 要求 |
|---|---|
| Python | 3.10 或更高版本 |
| 操作系统 | Windows / macOS / Linux |
| 内存 | 最低 2GB,推荐 4GB+ |
| 磁盘空间 | 最低 500MB(数据库约 300MB) |
| 网络 | 需能访问 baostock 服务(bs.baostock.com:443) |
环境检查
1 | python --version |
获取飞书 Webhook URL
Sequoia-X 需要一个飞书自定义机器人的 Webhook 地址来推送选股结果。
步骤 1:创建飞书群机器人
- 打开飞书,进入任意群聊(或创建新群)
- 点击群设置 → 群机器人 → 添加机器人 → 自定义机器人
- 设置机器人名称和描述后点击添加
步骤 2:获取 Webhook 地址
创建完成后,你会获得一个 Webhook 地址,格式如下:
text
1 | https://open.feishu.cn/open-apis/bot/v2/hook/xxxxxxxxxxxxxxxxxxxxxxxxx |
步骤 3:可选签名校验
如果开启了「签名校验」安全设置,需记录密钥用于后续配置。
提示:自定义机器人仅支持单向往群组内推送消息,不支持与用户进行消息交互,适用于自动推送选股结果场景。
方案一:使用 uv 部署(推荐)
uv 是快速的 Python 包管理器,能显著加速依赖安装。
步骤 1:安装 uv
1 | # macOS / Linux |
步骤 2:克隆仓库
1 | git clone https://github.com/sngyai/Sequoia-X.git |
步骤 3:安装依赖
1 | uv sync |
步骤 4:配置环境变量
1 | cp .env.example .env |
编辑 .env 文件,填入飞书 Webhook URL:
1 | FEISHU_WEBHOOK_URL=https://open.feishu.cn/open-apis/bot/v2/hook/your-webhook-id |
如开启了签名校验,还需添加:
1 | FEISHU_SECRET=your-secret-key |
步骤 5:首次回填历史数据
1 | uv run python main.py --backfill |
约 12 分钟完成 ~5200 只 A 股历史后复权日 K 数据回填。
注意:baostock 需要显式登录和登出,且不支持并发请求。Sequoia-X 已内置 8 进程并行处理和重试机制,但仍建议在网络稳定的环境下执行回填。
步骤 6:日常运行测试
1 | uv run python main.py |
如配置正确,2~3 分钟后飞书群将收到选股推送。
方案二:使用 pip 部署
如果你不使用 uv,也可以使用标准 pip 安装。
步骤 1:克隆仓库
1 | git clone https://github.com/sngyai/Sequoia-X.git |
步骤 2:创建虚拟环境(推荐)
1 | # 创建虚拟环境 |
步骤 3:安装依赖
1 | pip install . |
步骤 4:配置环境变量
1 | cp .env.example .env |
步骤 5:首次回填历史数据
1 | python main.py --backfill |
步骤 6:日常运行
1 | python main.py |
自动化定时运行
Sequoia-X 设计为每日收盘后自动运行。推荐使用 crontab 实现定时任务。
Linux/macOS 配置 crontab
1 | # 编辑 crontab |
添加以下内容(每个交易日 19:15 执行):
1 | 15 19 * * 1-5 cd /root/Sequoia-X && .venv/bin/python main.py >> log.txt 2>&1 |
crontab 时间格式说明:
text
1 | 15 19 * * 1-5 |
Windows 任务计划程序
- 打开「任务计划程序」
- 创建基本任务,设置触发器为「每周」,选择周一至周五
- 设置时间为 19:15
- 操作选择「启动程序」,程序路径填写 Python 解释器,参数填写
main.py,起始位置填写项目目录
项目结构说明
text
1 | Sequoia-X/ |
数据说明
| 项目 | 说明 |
|---|---|
| 数据源 | baostock(免费、无需注册、无限流) |
| 复权方式 | 后复权(hfq)— 历史价格不变,适合增量存储,避免除权导致数据错乱 |
| 存储 | 本地 SQLite(data/sequoia_v2.db),可直接拷贝到其他机器使用 |
| 日常增量 | 8 进程并行通过 baostock 拉取,2~3 分钟完成全市场更新 |
关于 baostock 的注意事项
baostock 是一个免费、开源的证券数据平台,无需注册,但有以下使用限制:
- 必须先登录:每次运行前需调用
bs.login(),并检查返回码 - 不支持并发:连续调用 5 次以上可能触发风控,建议请求间隔 ≥1 秒
- 股票代码格式:必须为
sh.600000或sz.000001格式 - 会话管理:登录状态仅在当前 Python 进程有效,脚本重启需重新登录
- 显式登出:必须调用
bs.logout(),否则进程残留连接
Sequoia-X 已在数据引擎中处理了上述问题,包括重试和自动重连机制。
常见问题排查
| 问题 | 症状 | 解决方案 |
|---|---|---|
| baostock 登录失败 | 查询返回空表或报错 | 检查网络能否访问 bs.baostock.com:443,确保服务器时间准确,检查防火墙设置 |
| 数据下载失败 | 连接超时或中断 | 检查网络稳定性,关闭防火墙测试,避免频繁请求触发限流 |
| 飞书推送失败 | 未收到消息 | 验证 Webhook URL 是否正确,检查签名密钥是否匹配,确认飞书群机器人是否启用 |
| 回填过程超时 | 长时间无响应 | 项目已内置重试和自动重连机制,如仍失败可分段回填或稍后重试 |
| crontab 任务未执行 | 定时任务无效 | 检查 crontab 语法,确认路径为绝对路径,查看系统日志 /var/log/syslog |
| 虚拟环境未激活 | 模块导入错误 | 确保执行 source .venv/bin/activate 后再运行脚本 |
| 数据目录权限问题 | 数据库写入失败 | 确保 data/ 目录存在且有写入权限 |
网络诊断脚本
如遇到 baostock 连接问题,可运行以下命令诊断:
1 | # 检测 DNS 解析和网络连通性 |
数据备份与恢复
Sequoia-X 的数据存储在 data/sequoia_v2.db 文件中,可直接复制备份。
备份
1 | cp -r data ./data-backup-$(date +%Y%m%d) |
恢复
1 | cp -r data-backup-YYYYMMDD/. ./data/ |
迁移到其他机器
直接将整个 data/ 目录拷贝到新机器的项目目录下即可。
更新到最新版本
1 | cd Sequoia-X |
总结
| 部署方案 | 适用场景 | 难度 | 推荐度 |
|---|---|---|---|
| uv 部署 | 大多数用户,追求速度 | ⭐ | ⭐⭐⭐⭐⭐ |
| pip 部署 | 熟悉传统 Python 环境 | ⭐⭐ | ⭐⭐⭐⭐ |
| 配合 crontab | 自动化定时选股 | ⭐⭐ | ⭐⭐⭐⭐⭐ |
| 数据迁移 | 换机器或备份 | ⭐ | ⭐⭐⭐⭐ |
对于大多数用户,uv 部署是最简单直接的选择:
1 | # 安装 uv |
完成部署后,系统将在每个交易日收盘后自动扫描全市场股票,运行 7 种策略,并将符合条件的股票推送至你的飞书群。如需查看详细选股结果,可检查日志文件 log.txt 或直接查询 SQLite 数据库。




