解答
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"相關連結