跳轉到

資料頻率與歷史長度

所屬章節: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(...) 都不能用,要用字串比較:

s = api.MSMP.月_營收.金額_千['2330']
s[s.index >= '2026-M01']            # 字串比較剛好可行(zero-padded)

季頻同理是 '2026-Q2'、年頻是 '2026-Y' 或 2026(整數)。

2. 月_營收.金額_千 的單位是千元。 換億元要 ÷ 1e5,不是 ÷ 1e7:

api.MSMP.月_營收.金額_千['2330'].iloc[-1]        # 467580548.0
# ÷ 1e5 = 4676 億元   ← 對
# ÷ 1e7 = 46.8        ← 錯了 100 倍

凡是 _千 結尾的欄位都是這個規則。_百萬 結尾(如 成交額_百萬)則是 ÷ 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

相關頁