解答

STOCK_DAY_ALL 是什麼?TWSE 全上市個股當日行情端點怎麼用

STOCK_DAY_ALL 是台灣證券交易所的開放資料端點,一次回傳「全部上市個股當日」的開高低收、成交量與成交筆數,免註冊、免金鑰,一個 GET 就拿到 JSON 陣列。2026-08-01 實測回 1,373 筆。使用前要知道三件事:所有欄位值都是字串(含數字)、日期是民國年字串、而且它只給「當日」——沒有查歷史區間的參數。

這個端點是什麼

如果你要的是「今天全市場的收盤價」,這支就是最短路徑:不必逐檔呼叫,一次請求就涵蓋整個上市市場。它屬於 TWSE 的 exchangeReport 系列,回傳一個 JSON 陣列,每個元素是一檔股票的當日行情。

curl "https://openapi.twse.com.tw/v1/exchangeReport/STOCK_DAY_ALL"

欄位對照(實際回傳的鍵名)

以下鍵名取自 2026-08-01 的實際回應,不是文件轉述。注意每一個值都是字串型別,包含數字欄位在內——直接拿去做算術會得到字串串接,不是加總。

  • Date — 交易日,民國年字串,例如 1150731 代表 2026-07-31(前三碼是民國年)
  • Code — 股票代號;實測長度有 4、5、6 碼三種,不要假設固定四碼
  • Name — 股票名稱
  • OpeningPrice / HighestPrice / LowestPrice / ClosingPrice — 開高低收,字串
  • TradeVolume — 成交股數(股,不是張)
  • TradeValue — 成交金額
  • Transaction — 成交筆數
  • Change — 漲跌,帶正負號的四位小數字串,例如 1.1100 或 -1.0500
import requests

rows = requests.get(
    "https://openapi.twse.com.tw/v1/exchangeReport/STOCK_DAY_ALL", timeout=30
).json()

def roc_to_iso(d):  # "1150731" -> "2026-07-31"
    return f"{int(d[:3]) + 1911:04d}-{d[3:5]}-{d[5:]}"

parsed = [
    {
        "date": roc_to_iso(r["Date"]),
        "symbol": r["Code"],
        "close": float(r["ClosingPrice"]),
        "volume_shares": int(r["TradeVolume"]),
        "change": float(r["Change"]),
    }
    for r in rows
]
print(len(parsed), parsed[0])

它的限制

  • 只有當日、沒有歷史區間:2026-08-01 實測 1,373 筆全部是同一個交易日。加上 ?date=20240102 之後回傳內容與不加參數完全相同(md5 一致),代表這個參數不被採用——要累積歷史就得自己每天抓、自己存。
  • 日期是民國年字串:1150731 這種格式要自己轉西元,直接當數字比較會出錯。
  • 數值全是字串:包含價格與成交量在內都是 JSON 字串,解析時要顯式轉型。
  • 不含已下市個股:回傳的是當日有掛牌的標的,停止交易的公司不會出現,因此無法用它重建「當時的市場」。
  • 只涵蓋上市(TWSE):上櫃要另外走 TPEx 的端點,而且欄位命名不同,跨市場要自己對齊。
  • 額度與格式以官方公告為準:TWSE 未在回應中標示速率限制,請依官方公告使用。

需要歷史、還原價或已下市標的時的做法

官方端點本身免費且權威,只抓當日的話它就夠用。會卡住的通常是三件事:要回溯多年、要含已下市標的、要上市上櫃同一套欄位。TW Market Data 的上市日線自 2004 年起、約 5.2 million 筆,保留 311 檔已停止交易個股的完整價史(其中 262 檔帶官方下市日),上市與上櫃共用同一組欄位,日期已轉成西元、數值已轉成數字型別。

curl "https://api.twmarketdata.com/v2/datasets/twse-daily-price?symbol=2330&limit=5"

相關連結