開始使用 SnowyOwl
所屬章節:入門 以 2026-08-21 實際執行結果為準(資料日 2026-08-20)
Overview
snowyowl 是資料 + 選股積木 + 回測的整合套件。兩行就能拿到可用的 api 物件:
so.login(person_id, person_pwd, type='account'):帳密登入要帶帳號密碼;type='google'/'apple' 開瀏覽器登入。登入約 10-15 秒,含下載/更新本地 MSMP 快取。
先分流:你的問題屬於哪一類
三條路完全不同,走錯會繞遠路:
| 你要做的 | 走哪 | 起點 |
|---|---|---|
| 查一個事實——今天漲幅 5% 以上、台積電最近一個月、成交額前 10 名 | api.MSMP 矩陣,通常一行 |
msmp.md、data-history.md |
| 把多個條件 AND 起來篩股——突破 20 日高 且 外資買超 且 成交額佔比 >1% | 積木 api.Block |
block.md |
| 驗證一組規則能不能賺錢 | 回測 api.bt |
backtest.md |
積木是「條件組合」不是「查數據」。 拿積木回答事實問題常常找不到剛好對的, 或找到名稱像但語意不同的——例如
漲跌幅介於P1%到P2%之間其實算的是近 20 日 漲跌幅,不是當日。見 block-caveats.md 第 12 節。
Manual Sample Input/Output
Example 1:登入
input
output
[系統訊息] MSMP 物件初始化完成。
[系統訊息] USMSMP 物件初始化完成。
[系統訊息] 已將資料存入本地暫存
[系統訊息] Block 積木物件初始化完成。
[系統訊息] API 加載完成,歡迎使用。
Api Instance is ready
Example 2:查一個事實(最短路徑)
input
k = api.MSMP.日_K # index 是日期,columns 是股票代號
t = k.漲跌幅.iloc[-1].dropna() # 最後一個交易日的漲跌幅
len(t[t >= 5]), str(k.Close.index[-1].date())
output
回答時要講資料日期。
api.MSMP只到前一交易日——使用者說「今天」 通常指的是最近一個交易日,用k.Close.index[-1]取出來明講。
Example 3:選一次股
input
block = api.Block.con_tw('今日收盤價<>開高低P%',
operator='>', ohlc_field='adj_High', percent=3)
result = api.Block.screener_tw([block])
result['date'], result['dataframe'].shape
output
screener_tw 回傳 dict,四個 key:code / dataframe / date / sig。
詳見 Block.screener 執行選股。
Example 4:取單一標的的歷史資料
input
output
DataFrame shape: (1000, 14)
日期 股票代號 股票名稱 開盤價 最高價 最低價 收盤價 成交量 漲跌 漲跌幅(%)
997 2026-08-18 2330 台積電 2415 2415 2375 2380 19997.2130 -20 -0.8300
998 2026-08-19 2330 台積電 2340 2355 2335 2350 23618.6120 -30 -1.2600
999 2026-08-20 2330 台積電 2365 2375 2350 2375 16967.7370 25 1.0600
日頻一律 1000 筆(約 4.1 年),
api.MSMP與api.Data都一樣。 要更長的歷史得降頻——週/月/季/年頻回溯 11~16 年。見 data-history.md。
命名空間
| 命名空間 | 用途 | 文件 |
|---|---|---|
api.Block |
積木選股(台股 405 個、美股 260 個) | block.md 起 10 頁 |
api.Data / api.USData |
表格式查詢(台股 80 張表、美股 25 張) | data.md、usdata.md |
api.MSMP / api.USMSMP |
矩陣式歷史資料(日期 × 股票代號) | msmp.md、msmp-tables.md |
api.bt |
回測 | backtest.md 起 5 頁 |
snowyowl 沒有下單功能,api 上不存在 Order。詳見 api-structure.md。
文件怎麼查
| 想知道 | 看 |
|---|---|
| 撞到錯誤訊息 | errors.md(含 13 項「不報錯但結果是錯的」) |
| 有哪些積木、參數怎麼填 | block-get-table.md、block-reference-tw.md |
| 積木有哪些已知落差 | block-caveats.md(12 節) |
| 台股 80 張表按用途分組 | data-get-table.md |
| 某個頻率有多長歷史 / 期貨資料在哪 | data-history.md |
| MSMP 每張表有哪些欄位 | msmp-tables.md |
| 寫策略、成交價規則、報表欄位 | backtest-strategy.md、backtest-order.md、backtest-report.md |
全部 34 篇的索引在 llms.txt,全文串接在 llms-full.txt。
三個最常踩的坑
1. 單位。 _千 結尾 ÷1e5 得億元、_百萬 結尾 ÷1e4 得億元。
成交量:整股是張、零股是股、期貨是口。
2. 日頻只有 1000 筆。 「近五年」以上的問題要降到週/月/季頻。
3. SnowyOwl 沒有的資料:選擇權、匯率、央行利率、原物料、海外期貨。 表裡出現的「匯率」是財報的「匯率變動對現金之影響」、「利率」是殖利率/毛利率 這類財務比率——都不是行情。