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
2
python --version
pip --version

获取飞书 Webhook URL

Sequoia-X 需要一个飞书自定义机器人的 Webhook 地址来推送选股结果。

步骤 1:创建飞书群机器人

  1. 打开飞书,进入任意群聊(或创建新群)
  2. 点击群设置 → 群机器人添加机器人自定义机器人
  3. 设置机器人名称和描述后点击添加

步骤 2:获取 Webhook 地址

创建完成后,你会获得一个 Webhook 地址,格式如下:

text

1
https://open.feishu.cn/open-apis/bot/v2/hook/xxxxxxxxxxxxxxxxxxxxxxxxx

步骤 3:可选签名校验

如果开启了「签名校验」安全设置,需记录密钥用于后续配置。

提示:自定义机器人仅支持单向往群组内推送消息,不支持与用户进行消息交互,适用于自动推送选股结果场景。


方案一:使用 uv 部署(推荐)

uv 是快速的 Python 包管理器,能显著加速依赖安装。

步骤 1:安装 uv

1
2
3
4
5
# macOS / Linux
curl -LsSf https://astral.sh/uv/install.sh | sh

# Windows(PowerShell)
powershell -c "irm https://astral.sh/uv/install.ps1 | iex"

步骤 2:克隆仓库

1
2
git clone https://github.com/sngyai/Sequoia-X.git
cd Sequoia-X

步骤 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
2
git clone https://github.com/sngyai/Sequoia-X.git
cd Sequoia-X

步骤 2:创建虚拟环境(推荐)

1
2
3
4
5
6
7
8
# 创建虚拟环境
python -m venv .venv

# 激活(Linux/macOS)
source .venv/bin/activate

# 激活(Windows)
.venv\Scripts\activate

步骤 3:安装依赖

1
pip install .

步骤 4:配置环境变量

1
2
cp .env.example .env
# 编辑 .env,填入飞书 Webhook URL

步骤 5:首次回填历史数据

1
python main.py --backfill

步骤 6:日常运行

1
python main.py

自动化定时运行

Sequoia-X 设计为每日收盘后自动运行。推荐使用 crontab 实现定时任务。

Linux/macOS 配置 crontab

1
2
# 编辑 crontab
crontab -e

添加以下内容(每个交易日 19:15 执行):

1
15 19 * * 1-5 cd /root/Sequoia-X && .venv/bin/python main.py >> log.txt 2>&1

crontab 时间格式说明

text

1
2
3
4
5
6
7
15 19 * * 1-5
│ │ │ │ │
│ │ │ │ └── 星期(1-5 表示周一至周五)
│ │ │ └──── 月份(* 表示每月)
│ │ └────── 日期(* 表示每日)
│ └───────── 小时(19 点)
└──────────── 分钟(15 分)

Windows 任务计划程序

  1. 打开「任务计划程序」
  2. 创建基本任务,设置触发器为「每周」,选择周一至周五
  3. 设置时间为 19:15
  4. 操作选择「启动程序」,程序路径填写 Python 解释器,参数填写 main.py,起始位置填写项目目录

项目结构说明

text

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Sequoia-X/
├── main.py # 入口:argparse 分发日常/回填模式
├── pyproject.toml # 依赖声明 + ruff/pytest 配置
├── .env.example # 环境变量模板
├── data/ # SQLite 数据库(运行时生成,不入 git)
├── sequoia_x/
│ ├── core/
│ │ ├── config.py # Pydantic-settings 配置管理
│ │ └── logger.py # rich 结构化日志
│ ├── data/
│ │ └── engine.py # 数据引擎(baostock 回填 + 增量同步 + SQLite)
│ ├── strategy/
│ │ ├── base.py # 策略抽象基类
│ │ ├── turtle_trade.py # 海龟交易策略
│ │ ├── ma_volume.py # 均线放量策略
│ │ ├── high_tight_flag.py # 高窄旗形策略
│ │ ├── limit_up_shakeout.py # 涨停洗盘策略
│ │ ├── uptrend_limit_down.py # 上升跌停策略
│ │ └── rps_breakout.py # RPS 突破策略
│ └── notify/
│ └── feishu.py # 飞书 Webhook 推送
└── tests/ # 属性测试(hypothesis)

数据说明

项目 说明
数据源 baostock(免费、无需注册、无限流)
复权方式 后复权(hfq)— 历史价格不变,适合增量存储,避免除权导致数据错乱
存储 本地 SQLite(data/sequoia_v2.db),可直接拷贝到其他机器使用
日常增量 8 进程并行通过 baostock 拉取,2~3 分钟完成全市场更新

关于 baostock 的注意事项

baostock 是一个免费、开源的证券数据平台,无需注册,但有以下使用限制:

  1. 必须先登录:每次运行前需调用 bs.login(),并检查返回码
  2. 不支持并发:连续调用 5 次以上可能触发风控,建议请求间隔 ≥1 秒
  3. 股票代码格式:必须为 sh.600000sz.000001 格式
  4. 会话管理:登录状态仅在当前 Python 进程有效,脚本重启需重新登录
  5. 显式登出:必须调用 bs.logout(),否则进程残留连接

Sequoia-X 已在数据引擎中处理了上述问题,包括重试和自动重连机制。


常见问题排查

问题 症状 解决方案
baostock 登录失败 查询返回空表或报错 检查网络能否访问 bs.baostock.com:443,确保服务器时间准确,检查防火墙设置
数据下载失败 连接超时或中断 检查网络稳定性,关闭防火墙测试,避免频繁请求触发限流
飞书推送失败 未收到消息 验证 Webhook URL 是否正确,检查签名密钥是否匹配,确认飞书群机器人是否启用
回填过程超时 长时间无响应 项目已内置重试和自动重连机制,如仍失败可分段回填或稍后重试
crontab 任务未执行 定时任务无效 检查 crontab 语法,确认路径为绝对路径,查看系统日志 /var/log/syslog
虚拟环境未激活 模块导入错误 确保执行 source .venv/bin/activate 后再运行脚本
数据目录权限问题 数据库写入失败 确保 data/ 目录存在且有写入权限

网络诊断脚本

如遇到 baostock 连接问题,可运行以下命令诊断:

1
2
3
4
5
# 检测 DNS 解析和网络连通性
ping -c 3 bs.baostock.com

# 检测 443 端口是否被阻断
timeout 5 bash -c 'cat </dev/null >/dev/tcp/bs.baostock.com/443' && echo "端口可达" || echo "端口被阻断"

数据备份与恢复

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
2
3
4
5
6
7
8
9
10
cd Sequoia-X

# 拉取最新代码
git pull

# 更新依赖(uv 方式)
uv sync

# 或(pip 方式)
pip install . --upgrade

总结

部署方案 适用场景 难度 推荐度
uv 部署 大多数用户,追求速度 ⭐⭐⭐⭐⭐
pip 部署 熟悉传统 Python 环境 ⭐⭐ ⭐⭐⭐⭐
配合 crontab 自动化定时选股 ⭐⭐ ⭐⭐⭐⭐⭐
数据迁移 换机器或备份 ⭐⭐⭐⭐

对于大多数用户,uv 部署是最简单直接的选择:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 安装 uv
curl -LsSf https://astral.sh/uv/install.sh | sh

# 克隆并进入项目
git clone https://github.com/sngyai/Sequoia-X.git
cd Sequoia-X

# 安装依赖
uv sync

# 配置飞书 Webhook
cp .env.example .env
# 编辑 .env 填入你的 Webhook URL

# 首次回填历史数据
uv run python main.py --backfill

# 测试运行
uv run python main.py

# 配置 crontab 自动运行
crontab -e
# 添加:15 19 * * 1-5 cd /root/Sequoia-X && .venv/bin/python main.py >> log.txt 2>&1

完成部署后,系统将在每个交易日收盘后自动扫描全市场股票,运行 7 种策略,并将符合条件的股票推送至你的飞书群。如需查看详细选股结果,可检查日志文件 log.txt 或直接查询 SQLite 数据库。