5 個のエンドポイント
https://api.blave.orgapi-key と secret-key ヘッダーを付けるAPI plan or Blave Agent plan市場全体の日次系列です(stock_id はありません)。start/end は任意の YYYY-MM-DD で、省略すると全履歴を返します。銘柄別エンドポイントの合計で代用しないでください。カバー範囲も単位も異なります。
/studio/market/twmarket/index/<index_id> | 名称 | 説明 | 許容値 | デフォルト |
|---|---|---|---|
index_idstring · path必須 | TAIEX のみ対応 | TAIEX(大文字・小文字を区別しません) | |
startstring · query | 開始日 | YYYY-MM-DD | 1999-01-05 |
endstring · query | 終了日 | YYYY-MM-DD | 今日 |
body = requests.get(f"{BASE_URL}/studio/market/twmarket/index/TAIEX" , headers=headers, params={"start": "2024-01-01", "end": "2024-12-31"}, timeout=60).json()# {"index_id": "TAIEX", "data": [{"date": "2024-01-02", "open": 17939.79, "high": 17956.74, "low": 17784.97, "close": 17853.76}, ...]}{"index_id": "TAIEX", "data": [{"date", "open", "high", "low", "close"}]}。価格の単位は指数ポイントです。出来高はありません。/twmarket/turnover を使ってください。
| ステータス | レスポンスボディ | 条件 |
|---|---|---|
| 400 | {"error": "Unsupported index"} | TAIEX ではない |
| 404 | エラーメッセージ | データなし |
| 503 | {"error": "Market data is not ready on this server. Please retry later."}/アップストリームのレート制限 | ストアが未準備/アップストリームが停止中 |
/studio/market/twmarket/turnover | 名称 | 説明 | 許容値 | デフォルト |
|---|---|---|---|
startstring · query | 開始日 | YYYY-MM-DD | 1990-01-04 |
endstring · query | 終了日 | YYYY-MM-DD | 今日 |
data = requests.get(f"{BASE_URL}/studio/market/twmarket/turnover" , headers=headers, params={"start": "2024-01-01"}, timeout=60).json()["data"]# [{"date": "2024-01-02", "volume": 6411778806.0, "value": 301290668897.0, "trades": 2267660.0}, ...]{"data": [...]}.
| フィールド | 単位 | 説明 |
|---|---|---|
date | — | 取引日 |
volume | 株 | 出来高(成交股數) |
value | 台湾ドル | 売買代金(成交金額) |
trades | 件 | 約定件数(成交筆數) |
404 データなし、503 ストアが未準備またはアップストリームのレート制限。
/studio/market/twmarket/institutional | 名称 | 説明 | 許容値 | デフォルト |
|---|---|---|---|
startstring · query | 開始日 | YYYY-MM-DD | 2004-04-07 |
endstring · query | 終了日 | YYYY-MM-DD | 今日 |
data = requests.get(f"{BASE_URL}/studio/market/twmarket/institutional" , headers=headers, params={"start": "2024-01-01"}, timeout=60).json()["data"]# [{"date": "2024-01-02", "foreign": 1047078183.0, "investment_trust": 189637635.0,# "dealer": -4448119903.0, "total": -3211404085.0}, ...]{"data": [{"date", "foreign", "investment_trust", "dealer", "total"}]}。値はすべて差額(買い − 売り)で、単位は台湾ドルです。
404 データなし、503 アップストリームのレート制限。
foreign は外資及陸資で、外国人自己売買部門の自己勘定取引(外資自營商)を除きます。dealer は自營商(自行買賣 + 避險)で、TWSE はここに外資自營商をすでに含めています。銘柄別のエンドポイント(GET /studio/market/twstock/institutional/<stock_id>)は別の階層のデータで、区分ごとの元の列を返し、集約は一切しません。この二つを混ぜないでください。foreign + investment_trust + dealer は、どの日も total(取引所が公表する三大法人合計)と一致します。外資自營商は独立した列ではありません。これはワラント/ETN にのみ現れますが、Blave はこれらを提供しておらず、2024-08-16 より後は毎日 0 です。/studio/market/twmarket/margin | 名称 | 説明 | 許容値 | デフォルト |
|---|---|---|---|
startstring · query | 開始日 | YYYY-MM-DD | 2001-01-03 |
endstring · query | 終了日 | YYYY-MM-DD | 今日 |
data = requests.get(f"{BASE_URL}/studio/market/twmarket/margin" , headers=headers, params={"start": "2024-01-01"}, timeout=60).json()["data"]# [{"date": "2024-01-02", "margin_balance": 8012561, "margin_balance_prev": 7999081,# "margin_balance_value": 248424271000, "short_balance": 369678, "short_balance_prev": 359738}, ...]{"data": [...]}.
| フィールド | 単位 | 説明 |
|---|---|---|
date | — | 取引日 |
margin_balance / margin_balance_prev | ロット(張) | 信用買い残(融資餘額)の当日/前日 |
margin_balance_value | 台湾ドル | 信用買い残の金額(融資餘額金額) |
short_balance / short_balance_prev | ロット(張) | 信用売り残(融券餘額)の当日/前日 |
404 データなし、503 アップストリームのレート制限。
/studio/market/twmarket/dividend_points | 名称 | 説明 | 許容値 | デフォルト |
|---|---|---|---|
startstring · query | 開始日 | 厳密な YYYY-MM-DD | 2003-01-02 |
endstring · query | 終了日。通知なしで今日 + 120 日に切り詰められます | 厳密な YYYY-MM-DD | 今日 + 120 日 |
import pandas as pdpayload = requests.get(f"{BASE_URL}/studio/market/twmarket/dividend_points" , headers=headers, params={"start": "2026-08-01"}, timeout=60).json()# {"data": [{"date": "2026-08-03", "points": 2.853, "estimated": false}, ...,# {"date": "2026-08-28", "points": 3.846, "estimated": true}, ...],# "meta": {"estimated_coverage": 0.9999, "degraded": false}}df = pd.DataFrame(payload["data"])future_div = df[df["estimated"]].set_index("date")["points"]# fair basis at t for settlement T: futures_price - (spot_index - future_div.loc[t_plus_1:T].sum()){"data": [{"date", "points", "estimated"}], "meta": {"estimated_coverage", "degraded"}}.
| フィールド | 型 | 説明 |
|---|---|---|
data[].date | string | 日付 |
data[].points | float | その日の配当落ちによって指数から差し引かれるポイント |
data[].estimated | bool | false = 実績(トータルリターン指数(TR)と価格指数の差から算出。配当落ちのない日は ≈ 0)、true = 予測(将来の平日。イベントのない日は 0 で埋めます) |
meta.estimated_coverage | float | null | 予測の入力データを読み取れた構成銘柄が TAIEX のウェイトに占める割合。予測の行がない場合は null |
meta.degraded | bool | true = 予測のカバー率が大きく不足しています。下限として扱ってください |
| ステータス | レスポンスボディ | 条件 |
|---|---|---|
| 400 | {"error": "Invalid start date, expected YYYY-MM-DD"}(または end) | 日付の形式が不正 |
| 404 | {"error": "No TAIEX index data available"} | ストアが空で、アップストリームにもデータなし |
| 503 | エラーメッセージ | 予測のカバー率が 90% 未満、ストアが未準備、またはアップストリームのレート制限 |
start が明日より後であっても、常に明日から end まで返ります。クライアント側で絞り込んでください。