tpex_mainboard_daily_close_quotes 是什麼?上櫃每日收盤行情端點怎麼用

發布於

tpex_mainboard_daily_close_quotes 是證券櫃檯買賣中心(TPEx)提供的上櫃主板每日收盤行情開放資料端點,免金鑰、直接 GET 就回傳 JSON。它回的是最新一個交易日的全市場快照——不能指定日期查歷史,歷史要自己每天抓下來存。

這個端點是什麼

這是 TPEx 開放資料平台上的上櫃主板(mainboard)每日收盤行情端點,涵蓋上櫃股票與在櫃檯買賣的 ETF。2026-07-31 實測回傳約一萬多筆,全部屬於同一個交易日,內容包含開高低收、成交股數、成交金額、成交筆數、最後買賣價,以及隔日的參考價與漲跌停價。

curl "https://www.tpex.org.tw/openapi/v1/tpex_mainboard_daily_close_quotes"

官方原始用法

不需要金鑰或任何標頭,直接 GET 即可。回傳是 JSON 陣列,每個元素是一檔證券當日的行情。欄位名稱為英文(Date、SecuritiesCompanyCode、Close、TradingShares 等),日期為民國年字串(例如 1150730 = 民國 115 年 7 月 30 日),數值皆為字串型別,部分欄位帶有多餘空白需要 trim。

import requests

url = "https://www.tpex.org.tw/openapi/v1/tpex_mainboard_daily_close_quotes"
rows = requests.get(url, timeout=30).json()
print(len(rows), rows[0]["Date"])

# 民國年 → 西元
def roc_to_date(s):
s = s.strip()
return f"{int(s[:3]) + 1911:04d}-{s[3:5]}-{s[5:7]}"

print(roc_to_date(rows[0]["Date"]))

它的限制

  • 只有最新一個交易日:端點回傳當前快照,沒有可指定日期的歷史查詢。要回測就得自己每個交易日固定抓、存起來,從開始抓的那天才有資料。
  • 非交易日會回到上一個交易日:週末或假日呼叫,拿到的是最近一次收盤,資料本身不會標示「今天沒開盤」,需要自己用日期判斷,否則容易把同一天的資料重複寫入。
  • 民國年與字串型別:日期需轉西元,價格與量值需自行轉型,部分欄位含空白字元。
  • 未還原權值:這是原始收盤價,除權息不做還原,跨越除權息日直接算報酬會失真,需要自己併入還原因子。
  • 與上市分開:上市的日收盤行情在 TWSE 的網域、欄位命名為中文,要做全市場需自行合併對映。

需要歷史、跨市場或還原價時的做法

如果你要的是「從某年到現在的上櫃日線」,官方端點幫不上忙——那需要長期累積。TW Market Data 的上櫃日線資料自 1994 年起,與上市日線同一套 schema、可指定股票與區間查詢,並保留已知缺口不以推測值補洞。上市部分自 2004 年起、涵蓋 1,687 檔,含 311 檔已停止交易股票的完整價史。

curl "https://api.twmarketdata.com/v2/datasets/tpex-daily-price?symbol=6488&limit=10" \
-H "X-API-Key: $TWMD_API_KEY"

常見問題

1tpex_mainboard_daily_close_quotes 要錢嗎?
不用。這是 TPEx 的開放資料端點,免費、免金鑰,直接 HTTP GET 即可取得 JSON。
2可以指定日期查上櫃的歷史收盤價嗎?
這個端點不行——它回傳的是最新一個交易日的快照。要取得歷史,需自行每個交易日抓取保存,或使用已累積歷史的資料來源。
3非交易日呼叫會回什麼?
會回到最近一個交易日的資料。端點本身不會告訴你今天沒有開盤,需要用回傳的 Date 欄位自行判斷,避免重複寫入同一天。
4這個端點的收盤價有還原權值嗎?
沒有。回傳的是原始收盤價,除權息不做還原。跨越除權息日計算報酬時,需要自行併入還原因子,否則會出現假跳空。
5上市(TWSE)的每日收盤行情在哪裡?
在 TWSE 的開放資料網域,與 TPEx 分屬兩套 API,欄位命名慣例也不同(上市多為中文欄名)。要做全市場分析需自行合併。
6欄位 NextLimitUp / NextLimitDown 是什麼?
是隔一個交易日的漲停價與跌停價參考值,由當日收盤參考價依現行漲跌幅限制計算。台股漲跌幅限制在歷史上曾調整過,跨長期間分析時須留意制度沿革。

想自己查這些資料?免費註冊

相關文章