MSMP 矩陣資料總覽
所屬章節:MSMP 歷史資料 以 2026-08-20 實際執行結果為準(台股 25 張表、美股 10 張表)
Overview
api.MSMP(台股)與 api.USMSMP(美股)提供矩陣式歷史資料:
每個欄位都是一張 日期(index) × 股票代號(columns) 的 DataFrame。
這是做全市場橫向運算(選股、排名、回測)的資料來源,積木底層用的就是它。
資料放在本地快取,不需要 token;登入時會檢查並更新,之後個別欄位延遲載入。
| 成員 | 型態 | 說明 |
|---|---|---|
<表名>.<欄位> |
DataFrame |
日期 × 股票代號 的矩陣 |
get(table, name) |
DataFrame |
同上,用字串指定 |
get_table() |
印出 | 列出所有表與欄位 |
list |
dict |
股池,見 股池 |
INFO |
DataFrame |
全市場基本資料(代號、名稱、上市日、下市日) |
INDEX |
dict |
各頻率的日期序列('D' / 'M' / 'Q') |
TSE / OTC |
物件 | 加權 / 櫃買指數(單欄矩陣) |
TSE_週 / OTC_週 / TSE_月 / OTC_月 |
物件 | 指數的週 / 月頻 |
DataFrame(df) |
ProboDataFrame |
把一般 DataFrame 包成可與 MSMP 運算的型態 |
msmp_to_dic(names, *dfs) |
dict |
寬表轉長表,以股票代號分組 |
Manual Sample Input/Output
Example 1:矩陣長相
input
output
DataFrame shape: (3, 6)
00400A 00401A 00402A 00403A 00404A 00405A
date
2026-08-17 15.0500 13.7000 9.9500 10.4000 9.6300 8.8000
2026-08-18 14.7600 13.4500 9.8700 10.1600 9.5200 8.6000
2026-08-19 14.5100 13.2600 9.6400 9.9700 9.4100 8.4700
index 名稱是 date,columns 是股票代號。完整矩陣為 1000 個交易日 × 2865 檔。
MSMP 只到前一交易日(今天 2026-08-20,最後一列是 2026-08-19)。 要當日盤中資料請用 Data.get 的分K。
Example 2:兩種取法等價
input
output
欄位名打錯時:
input
output
Example 3:INDEX 各頻率
input
output
D: len=6579 最後=2026-08-19 00:00:00
M: len=320 最後=2026-09-10 00:00:00
Q: len=107 最後=2026-11-16 00:00:00
M與Q的最後一筆是未來日期(財報/營收的預定公布日)。 這是screener的date='last'可能取到未來日期的原因,見 執行選股。
Example 4:INFO 全市場基本資料
input
output
DataFrame shape: (2873, 7)
columns: ['股票代號', '股票名稱', '日期', '市場', 'ETF', '上市日', '下市日']
股票代號 股票名稱 日期 市場 ETF 上市日 下市日
0 00400A 主動國泰動能高息 20260820 1 1 NaT NaT
1 00401A 主動摩根台灣鑫收 20260820 1 1 NaT NaT
2 00402A 主動安聯美國科技 20260820 1 1 NaT NaT
常用來把代號轉名稱:
Example 5:大盤指數是單欄矩陣
input
output
DataFrame shape: (3, 1)
columns: ['TSE']
TSE
date
2026-08-17 45857.2700
2026-08-18 45308.6800
2026-08-19 44719.3500
指數只有一個 column('TSE' 或 'OTC')。與個股矩陣做運算時,
ProboDataFrame 會自動把它廣播成對方的欄位,所以可以直接寫:
Example 6:三張欄位語意特殊的表
這三張表 msmp-tables.md 有列欄位,但用法容易踩錯,單獨說明。
其他_大盤 —— columns 是「法人分類」不是股票代號
['全體投信', '全體外資', '全體自營', '八大行庫',
'OTC 投信(股票)', 'OTC 投信', 'OTC 外資(股票)', 'OTC 外資非自營(股票)',
'OTC 外資自營(股票)', 'OTC 外資', 'OTC 外資非自營', 'OTC 外資自營',
'OTC 自營(股票)', 'OTC 自營避險(股票)', 'OTC 自營自行(股票)', 'OTC 自營',
'OTC 自營避險', 'OTC 自營自行', 'TSE 投信', '境內機構',
'境外機構', '境內華僑', '境外華僑', 'TSE 外資',
'TSE 外資非自', 'TSE 外資自營', 'TSE 自營', 'TSE 自營避險',
'TSE 自營自行']
12 個欄位是 成交金額_百萬 / 買入金額_百萬 / 賣出金額_百萬 / 買賣超金額_百萬
的當日、近一週、近一月三個版本。
不要拿它跟個股矩陣相除。 兩邊沒有共同 column,相除得到的是 0 欄的空矩陣,而且不會報錯——這正是
v24積木曾經永遠選不到股票的原因, 見 block-caveats.md 第 11 節。要算「個股佔大盤成交比重」請用個股自己加總:
其他_籌碼集中 —— 12 個時間窗 × 3 個指標
37 欄 = 籌碼集中度 / 主力買賣超張數 / 家數差 各 12 個窗
(1/2/3/4/5/10/20/60/100/120/180/240 日)+ 家數和。
api.MSMP.其他_籌碼集中.籌碼集中度_20日['2330'].dropna().iloc[-1] # -1.70
api.MSMP.其他_籌碼集中.主力買賣超張數_5日
api.MSMP.其他_籌碼集中.家數差_20日
矩陣是 (1000, 2451),起始日比 日_K 晚(2022-08-23 vs 2022-07-08)——
需要暖身期的指標都會這樣,跟 日_K 做運算前先確認 index 對齊。
日_CAPM —— 9 個期間的 Beta
欄位:Beta一月、Beta二月、Beta三月、Beta六月、Beta九月、
Beta一年、Beta二年、Beta三年、Beta五年。矩陣 (1000, 2175)。
(1000, 2451)/(1000, 2175)的欄數都少於日_K的 2866。 需要計算期間的表覆蓋的股票比較少(新上市、興櫃常缺)。 跨表運算後記得.dropna(),不然會拿到一堆 NaN。
相關文件
- MSMP 資料表與欄位完整清單(台股 25 張、美股 10 張,程式產生)
- MSMP 股池 list
- USMSMP 美股矩陣資料