Building an AI agent? Start with /llms.txt for the full site index.
Market & Prices
One row per (symbol, trade_date, market) on days a stock made a large move — firing when |Δ%|≥5% OR its excess over TAIEX ≥4% (sign-independent). Bundles the move, magnitude bucket, an era-aware limit-move flag, same-day corporate/chip context (institutional net, margin delta, day-trade ratio), and any official event on that date. Derived from TWMD normalized prices + TAIEX + official event/dividend/chip tables. Not a forecast, not a recommendation.
GET /v2/datasets/price-move-contextThis dataset is in build and not yet queryable via the API. The coverage and honest limitations below are the real database state; it moves off "Building" once serving lands (targeted 8/1).
| Field | Type | Description |
|---|---|---|
pct_change | ratio | stock daily return |
market_pct_change | ratio | TAIEX return; NULL on TAIEX-gap days |
relative_to_market | ratio | stock−market excess (signed) |
magnitude_bucket | enum | <5 / >=5 / >=9.5 … |
hit_track | enum | absolute / relative / both |
limit_move_flag | bool | era-approx limit hit |
limit_move_flag_method | enum | 'approx' (v0) |
events | json | official events on date; [] if none |
inst_net | shares | institutional net |
margin_delta | lots | margin balance Δ |
day_trade_ratio | ratio | day-trade share |
266,097 rows, 2010-01-04..2026-07-21. coverage_start=2010 (NOT 2004 — pct_change unpopulated before ~2010). ~115 TAIEX-gap trading days (~18k rows, 6.8%) carry market_pct_change=NULL and are relative-blind (absolute track only). limit_move_flag is era-aware (±7% pre-2015-06-01 / ±10% after) with limit_move_flag_method='approx' pending the R-02 exact per-day limit. threshold_version=pmc_v1.
A real response from this endpoint. Rows are returned under "data", and provenance is carried in the shape shown below — it is not identical across datasets, so read this page's rather than assuming another's.
{ "dataset_id": "price-move-context", "row_count": 3, "data": [ { "symbol": "2383", "trade_date": "2024-03-08", "market": "TWSE", "pct_change": -0.06130268, "market_pct_change": 0.0047, "relative_to_market": -0.06600268, "magnitude_bucket": "5-7", "hit_track": "both", "limit_move_flag": false, "limit_move_flag_method": "approx", "inst_net": -1674540.0, "margin_delta": 149.0, "day_trade_ratio": 0.43539399, "threshold_version": "pmc_v1" }, { "symbol": "2383", "trade_date": "2024-03-12", "market": "TWSE", "pct_change": -0.09274194, "market_pct_change": 0.0096, "relative_to_market": -0.10234194, "magnitude_bucket": "7-9.5", "hit_track": "both", "limit_move_flag": false, "limit_move_flag_method": "approx", "inst_net": -3745311.0, "margin_delta": 211.0, "day_trade_ratio": 0.30444614, "threshold_version": "pmc_v1" }, { "symbol": "2383", "trade_date": "2024-03-13", "market": "TWSE", "pct_change": -0.1, "market_pct_change": 0.0007, "relative_to_market": -0.1007, "magnitude_bucket": ">=9.5", "hit_track": "both", "limit_move_flag": true, "limit_move_flag_method": "approx", "inst_net": -3728133.0, "margin_delta": 1090.0, "day_trade_ratio": 0.34246184, "threshold_version": "pmc_v1" } ]}Captured from the live API on 2026-07-20.
curl "https://api.twmarketdata.com/v2/datasets/price-move-context?symbol=2330" \ -H "X-API-Key: sk_live_..."| Parameter | Required | Type | Description |
|---|---|---|---|
symbol | Yes | string | Ticker, e.g. 2330. |
start_date | No | string (YYYY-MM-DD) | Start of the query range. |
end_date | No | string (YYYY-MM-DD) | End of the query range. |
limit | No | integer | Maximum rows to return. |
A first call:
import requests resp = requests.get( "https://api.twmarketdata.com/v2/datasets/price-move-context", params={"symbol": "2330"}, headers={"X-API-Key": "sk_live_..."},)resp.raise_for_status()print(resp.json()["data"])With a date-range filter:
import requests # The full verified example — the same call with every supported filter set.resp = requests.get( "https://api.twmarketdata.com/v2/datasets/price-move-context", params={"symbol": "2330"}, headers={"X-API-Key": "sk_live_..."},)resp.raise_for_status()for row in resp.json()["data"]: print(row)This endpoint is GET /v2/datasets/price-move-context. The full machine-readable schema (parameters, security, response envelope) lives in the OpenAPI spec.