使用手冊

A 股量化選股 · Python 3.10+

建立收盤後 A 股自動選股與飛書推送流程

sngyai/Sequoia-X 繁體中文使用手冊:安裝 Python A 股量化選股系統、回填與更新行情、執行七種掃描策略,並將結果推送至飛書。

Sequoia-X V2 是面向 A 股市場的 Python 量化選股系統。它把日 K 行情寫入本地 SQLite,依序執行技術形態與公告掃描策略,再將命中結果路由至飛書 Webhook。

sngyai/Sequoia-X
星標
—
分支
—
授權
—
資料截至
—
閱讀時間
5 分
更新日期
開啟原始報告
GitHub Stars
6.6k
主程式載入策略
7
執行模式
2
README 授權聲明
MIT

01系統定位

A 股行情、策略掃描與通知管線

Sequoia-X V2 將 A 股收盤後選股拆成資料、策略與通知三層。資料引擎從 baostock 取得後復權日 K,寫入 data/sequoia_v2.db;策略讀取本地行情後回傳股票代碼。

日常模式先補齊最新行情,再執行主程式登錄的策略。策略有結果時,FeishuNotifier 產生互動卡片,並依 webhook_key 選擇策略專屬 Webhook;未設定專屬值時使用預設 Webhook。

回填模式用於首次建立或補齊歷史資料;日常模式處理增量同步、策略運算與通知。兩種模式共用同一份設定與 SQLite 資料庫。

  1. 行情同步

  2. SQLite

  3. 策略掃描

  4. 股票名稱查詢

  5. 飛書卡片

A-Share Quantitative Stock Selection System V2

— sngyai/Sequoia-X README

02Python 3.10+

安裝套件並建立行情資料庫

準備 Python 3.10 以上環境。複製 repository 後,使用 uv sync 或 pip install . 安裝 pyproject.toml 宣告的依賴。

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

# 二選一
uv sync
pip install .

環境變數與飛書 Webhook

複製範例設定並編輯 .env。FEISHU_WEBHOOK_URL 是必填 fallback;策略專屬值使用 STRATEGY_WEBHOOK_* 前綴。

bash
cp .env.example .env
# 編輯 .env,填入飛書 Webhook URL

# 首次執行:回填歷史日 K
python main.py --backfill

# 日常執行:更新行情、掃描策略、推送結果
python main.py

03七個主程式策略

技術形態與公告事件的掃描入口

main.py 目前建立七個 BaseStrategy 子類。README 的策略表列出六個技術策略;目前程式碼另載入 PrivatePlacementStrategy,用 akshare 查詢近期定向增發資料。

Trend · 01

MaVolume

均線與成交量

掃描 5 日均線上穿 20 日均線,並要求當日成交量高於 20 日均量的 1.5 倍。

Breakout · 02

TurtleTrade

20 日突破

檢查收盤價突破前 20 日高點、成交額門檻與陽線條件,再依流通市值排序。

Pattern · 03

HighTightFlag

高窄旗形

尋找 40 日強動量、10 日收斂、高位抗跌與縮量同時成立的股票。

Pattern · 04

LimitUpShakeout

漲停後洗盤

檢查昨日漲停,以及今日收陰、放量且最低價未跌破昨日收盤的組合。

Reversal · 05

UptrendLimitDown

上升趨勢跌停

在 20 日均線高於 60 日均線的條件下,尋找放量跌停訊號。

Strength · 06

RpsBreakout

相對強度突破

計算 120 日報酬橫向排名,保留 RPS 90 以上且接近滾動高點的標的。

Event · 07

PrivatePlacement

定向增發公告

透過 akshare 取得全部增發資料,篩選最近七天的定向增發股票代碼。

策略選擇表

觀察目標策略資料需求
均線、成交量與價格突破MaVolume、TurtleTrade至少 20–21 根日 K
整理、洗盤與跌停型態HighTightFlag、LimitUpShakeout、UptrendLimitDown依策略為 3–60 根日 K
全市場相對強度RpsBreakout120 日價格序列
近期定向增發PrivatePlacementakshare 公告資料

04資料與擴充結構

可重跑的資料流程與策略介面

系統以本地資料庫作為策略共同輸入。回填、增量更新、策略掃描與通知分別由獨立模組負責。

RULE · 先建立本地歷史資料

--backfill 逐一補齊股票日 K;已更新至當日的股票會跳過,因此中斷後可以重新執行。

來源 · sequoia_x/data/engine.py

RULE · 後復權資料集中保存

baostock 查詢使用 adjustflag="1"。OHLCV 與成交額寫入 SQLite 的 stock_daily 表。

來源 · sequoia_x/data/engine.py

RULE · 增量同步限制在缺少日期

日常模式比較每檔股票的最後日期,只為缺少的區間建立任務,最多使用八個 worker。

來源 · sequoia_x/data/engine.py

RULE · 策略共用抽象介面

新增策略時繼承 BaseStrategy、實作 run() 並設定 webhook_key,再加入 main.py 的策略清單。

來源 · sequoia_x/strategy/base.py · main.py

RULE · Webhook 依策略路由

設定 STRATEGY_WEBHOOK_* 可將不同策略送至不同機器人;缺少專屬值時回退至 FEISHU_WEBHOOK_URL。

來源 · .env.example · core/config.py

RULE · 失敗留在日誌

資料查詢、策略計算與飛書請求各自捕捉錯誤。飛書 HTTP 200 之外,回應內的 code 也必須為 0。

來源 · data/engine.py · notify/feishu.py

05首次回填至排程

建立資料庫並執行每日掃描

以下流程沿用 README 的安裝與執行命令。先完成一次回填,再測試日常模式與 crontab。

~/Sequoia-X · initialization

$ uv sync
# 依 pyproject.toml 建立 Python 環境


$ cp .env.example .env
# 編輯 .env;填入 FEISHU_WEBHOOK_URL,視需要設定策略專屬 Webhook


$ python main.py --backfill
# 取得全市場股票代碼,將後復權歷史日 K 寫入 SQLite


$ python main.py
# 同步缺少的交易日 → 執行策略 → 有結果時推送飛書卡片


$ crontab -e
  15 19 * * 1-5 cd /root/Sequoia-X && .venv/bin/python main.py >> log.txt 2>&1
ok: 排程範例:週一至週五 19:15 執行;部署時替換為實際路徑
        

python main.py --backfill python main.py

— sngyai/Sequoia-X README · 兩種執行模式

可觀察的完成條件

data/sequoia_v2.db 已建立且含有 stock_daily 資料;日常模式完成後,日誌顯示各策略的命中數。只有策略回傳非空清單時才會送出飛書卡片。

06運行與風險邊界

資料限制、憑證管理與投資判斷

07擴充與維運

新增策略、測試與部署檢查

先以現有策略完成資料與通知驗證,再新增選股邏輯。每個策略維持單一 run() 入口,輸出股票代碼清單。

進階工作地圖

**1. 建立策略子類。**繼承 BaseStrategy,注入 DataEngine 與 Settings,實作 run()。

**2. 設定通知路由。**為策略指定 webhook_key,並在 .env 加入相符的 STRATEGY_WEBHOOK_*。

**3. 登錄主程式。**在 main.py 匯入並加入策略清單;空結果會略過通知。

**4. 補齊測試。**使用 pytest 驗證策略、資料引擎、設定與通知;開發依賴另含 Hypothesis 與 pytest-mock。

**5. 監控排程。**保留 stdout 與 stderr 日誌,檢查行情寫入數、各策略命中數及飛書回應。

延伸閱讀

① README.md:運行模式、安裝步驟、資料來源與排程範例。 ② data/engine.py:SQLite schema、回填與增量同步。 ③ strategy/base.py:策略擴充介面與回傳契約。

python main.py

— sngyai/Sequoia-X README · 日常模式