資料頻率與歷史長度
所屬章節:Data 表格查詢 全部以 2026-08-21 實測(標的
2330,資料日 2026-08-20)
問「近五年 / 近十年」之前先看這頁。 日頻有 1000 筆硬上限(約 4 年)。 台股降頻就能拿到 11~16 年,但美股不行(週/月 K 也只有 4 年)——見下方「美股的規則不一樣」。 答不出來通常不是沒資料,是頻率選錯了。
下面的表除非另外標明,都是台股。
歷史長度地圖
| 頻率 | 取法 | 筆數 | 期間 | 約幾年 |
|---|---|---|---|---|
| 日 | MSMP.日_*(K、三大法人、融資券、指標…) |
1000 | 2022-07-08 ~ 2026-08-20 | 4.1 |
| 日 | Data.get('日K/技術指標/價量資料-單檔股票多個區間', s) |
1000 | 同上 | 4.1 |
| 日 | Data.get('還原日K價量資料(個股、ETF、大盤)-單檔股票多個區間', s) |
1000 | 同上 | 4.1 |
| 週 | MSMP.週_K |
604 | 2014-12-05 ~ | 11.7 |
| 週 | Data.get('還原週K價量資料(個股、ETF、大盤)-單檔股票多個區間', s) |
754 | 2012-01-06 ~ | 14.6 |
| 月 | MSMP.月_K |
141 | 2014-12-31 ~ | 11.7 |
| 月 | Data.get('還原月K價量資料(個股、ETF、大盤)-單檔股票多個區間', s) |
176 | 2012-01-01 ~ | 14.6 |
| 月營收 | MSMP.月_營收 |
199 | 2010-M01 ~ | 16.6 |
| 月營收 | Data.get('個股營收資訊-單檔股票多個區間', s) |
175 | — | ~14.6 |
| 季財報 | Data.get('個股季財報資訊-單檔股票多個區間', s) |
46 | 2015-Q1 ~ 2026-Q2 | 11.5 |
| 年股利 | Data.get('個股股利資訊(年)-單檔股票多個區間', s) |
15 | 2012 ~ 2026 | 15 |
| 年股利 | MSMP.季股利資訊 |
15 | 2012-Y ~ 2026-Y | 15 |
| 期貨 1 分 | MSMP._fut_TXF |
2,570,820 | 2017-05-15 ~ | 9.3 |
| 個股 1 分 | Data.get('取得歷史1分K(指定起訖日)', s, start, end) |
依區間 | 你指定 | — |
日頻是 1000 筆,週/月頻的 Data 版本比 MSMP 版本更長。
要長歷史的日線只能自己用 取得歷史1分K(指定起訖日) 逐段抓再聚合。
「近 N 年」該走哪張表
| 問題 | 走哪 |
|---|---|
| 近一週 / 一個月 / 一季 | 日頻,隨便哪張都行 |
| 近一年 ~ 近四年 | 日頻可以(1000 筆剛好蓋到 4.1 年) |
| 近五年 | 日頻不夠。週頻(還原週K,14.6 年)或季頻(個股季財報,11.5 年) |
| 近十年 | 週/月頻,或月營收(16.6 年) |
| 十年以上 | 只有 月_營收(2010 起)與年股利(2012 起) |
實例——「2330 近五年 PER 走勢」:
# ✗ 日頻只有 4.1 年,給不出五年
api.MSMP.日_指標.本益比['2330'] # (1000,) 2022-07-08 起
# ✓ 季頻有 11.5 年
d = api.Data.get('個股季財報資訊-單檔股票多個區間', '2330')
d[d['年季'] >= '2021-Q1'][['年季', '本益比', '公告EPS(元)']]
# 22 期,本益比 13.1 ~ 32.4
兩個容易誤判的陷阱
1. 月_營收 的 index 是字串不是日期。 格式 '2026-M07',
所以 .resample() / >= pd.Timestamp(...) 都不能用,要用字串比較:
季頻同理是 '2026-Q2'、年頻是 '2026-Y' 或 2026(整數)。
2. 月_營收.金額_千 的單位是千元。 換億元要 ÷ 1e5,不是 ÷ 1e7:
凡是 _千 結尾的欄位都是這個規則。_百萬 結尾(如 成交額_百萬)則是 ÷ 1e4 得億元。
期貨資料在 MSMP._fut_TXF
不在 api.Data 的 80 張表裡(那些全是台股現貨),期貨是 MSMP 的一個私有屬性:
f = api.MSMP._fut_TXF
# DataFrame (2570820, 7)
# columns: DateTime, Open, High, Low, Close, TotalVolume, settlement
| 欄 | 說明 |
|---|---|
DateTime |
1 分 K 的時間。零重複——這是單一「近月連續序列」,不是多合約併排 |
Open/High/Low/Close |
點數 |
TotalVolume |
口數 |
settlement |
這根 K 屬於哪個合約(結算日)。共 113 個不同值 = 113 個合約月 |
因為 DateTime 不重複,任何時點都只有近月合約,聚合成日線就是「近月合約日成交資訊」:
g = api.MSMP._fut_TXF.set_index('DateTime')
daily = g.resample('D').agg(開盤=('Open','first'), 最高=('High','max'),
最低=('Low','min'), 收盤=('Close','last'),
成交量=('TotalVolume','sum'),
結算日=('settlement','last')).dropna(subset=['開盤'])
daily.tail(5)
實測近一週(2026-08-15 ~ 08-20)合計 269,758 口,08-19 換月到 09-16 合約。
要 K 線而不是自己 resample,用
api.bt.Tools.get_fut_ohlc('TXF', freq=60)—— 它讀的就是這份快取,還會處理日夜盤時段與結算切斷。見 backtest-data.md。
美股的規則不一樣
台股的「降頻拿長歷史」在美股不成立。 台股週/月 K 回溯 11.7 年, 美股週 K 只有 4.5 年、月 K 只有 4 年——跟日 K 差不多。
| 頻率 | 台股 | 美股 |
|---|---|---|
| 日 | 1000 筆 / 4.1 年 | 1000 筆 / 4.0 年 |
| 週 | 604 筆 / 11.7 年 | 235 筆 / 4.5 年 |
| 月 | 141 筆 / 11.7 年 | 49 筆 / 4.0 年 |
| 季財報 | 46 期 / 11.5 年(走 Data) |
111 期 / 27.8 年(USMSMP.季財報_*) |
| 月/季營收 | 199 期 / 16.6 年 | 111 期 / 27.8 年 |
| 年股利 | 15 期 / 15 年 | 34 期 / 34 年 |
所以:
- 美股要長期股價:沒有。價格類最多 4.5 年。
- 美股要長期基本面:很充足,季財報回到 1998-Q4、股利回到 1993。
- 美股財報只覆蓋 5801 檔,價格覆蓋 13174 檔——跨表運算要
.dropna()。
細節見 usmsmp.md。
SnowyOwl 沒有的資料
問到這些要直接說沒有,不要硬湊:
- 選擇權(台指選擇權、個股選擇權)——完全沒有
- 匯率(USD/TWD 等 FX 行情)——沒有。表裡出現的「匯率」都是財報的 「匯率變動對現金及約當現金之影響」,不是行情
- 利率(央行、聯準會、公債殖利率)——沒有。出現的「利率」都是 「殖利率」「毛利率」「週轉率」這類財務比率
- 原物料(原油、黃金…)——沒有
- 海外期貨——沒有,期貨只有台指期 TXF
相關頁
- Data.get_table 列出可用表格:台股 80 張表完整清單
- MSMP 資料表與欄位完整清單:台股 25 張、美股 10 張矩陣表
- 回測:資料與週期:
bt.Tools.get_stock_ohlc/get_fut_ohlc - USMSMP 美股矩陣資料:美股 10 張表的欄位、形狀與期間