A 股行情、策略掃描與通知管線
Sequoia-X V2 將 A 股收盤後選股拆成資料、策略與通知三層。資料引擎從 baostock 取得後復權日 K,寫入 data/sequoia_v2.db;策略讀取本地行情後回傳股票代碼。
日常模式先補齊最新行情,再執行主程式登錄的策略。策略有結果時,FeishuNotifier 產生互動卡片,並依 webhook_key 選擇策略專屬 Webhook;未設定專屬值時使用預設 Webhook。
回填模式用於首次建立或補齊歷史資料;日常模式處理增量同步、策略運算與通知。兩種模式共用同一份設定與 SQLite 資料庫。
行情同步
SQLite
策略掃描
股票名稱查詢
飛書卡片
A-Share Quantitative Stock Selection System V2
安裝套件並建立行情資料庫
準備 Python 3.10 以上環境。複製 repository 後,使用 uv sync 或 pip install . 安裝 pyproject.toml 宣告的依賴。
git clone https://github.com/sngyai/Sequoia-X.git
cd Sequoia-X
# 二選一
uv sync
pip install .環境變數與飛書 Webhook
複製範例設定並編輯 .env。FEISHU_WEBHOOK_URL 是必填 fallback;策略專屬值使用 STRATEGY_WEBHOOK_* 前綴。
cp .env.example .env
# 編輯 .env,填入飛書 Webhook URL
# 首次執行:回填歷史日 K
python main.py --backfill
# 日常執行:更新行情、掃描策略、推送結果
python main.py技術形態與公告事件的掃描入口
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 |
| 全市場相對強度 | RpsBreakout | 120 日價格序列 |
| 近期定向增發 | PrivatePlacement | akshare 公告資料 |
可重跑的資料流程與策略介面
系統以本地資料庫作為策略共同輸入。回填、增量更新、策略掃描與通知分別由獨立模組負責。
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
建立資料庫並執行每日掃描
以下流程沿用 README 的安裝與執行命令。先完成一次回填,再測試日常模式與 crontab。
$ uv sync
$ cp .env.example .env
$ python main.py --backfill
$ 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
可觀察的完成條件
data/sequoia_v2.db 已建立且含有 stock_daily 資料;日常模式完成後,日誌顯示各策略的命中數。只有策略回傳非空清單時才會送出飛書卡片。
資料限制、憑證管理與投資判斷
新增策略、測試與部署檢查
先以現有策略完成資料與通知驗證,再新增選股邏輯。每個策略維持單一 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