解答

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,682 檔,含 311 檔已停止交易股票的完整價史。

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

相關連結