# Taiwan Warrants Daily Quotes — 權證行情 API (`chamarix/taiwan-warrants-daily`) Actor

Every listed and OTC warrant in Taiwan, priced daily: ~40,000 warrants a session with OHLC, volume, the underlying's own close, and the strike, exercise ratio and expiry joined on — plus moneyness, intrinsic value, premium and leverage computed from them. TWSE sessions reach back to 2004-02-11.

- **URL**: https://apify.com/chamarix/taiwan-warrants-daily.md
- **Developed by:** [chris](https://apify.com/chamarix) (community)
- **Categories:** AI, Developer tools, Other
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.50 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## Taiwan Warrants Daily Quotes (權證行情) API

Get structured JSON access to **every warrant listed in Taiwan, priced daily** — around **31,000 on the TWSE and 9,500 on the TPEX** in a single session, each with its OHLC, volume and turnover, the underlying's own closing price alongside it, and the strike, exercise ratio and expiry joined on from the exchange's issue register. TWSE sessions go back to **2004-02-11**.

Taiwan runs one of the largest listed warrant markets in the world by instrument count. On 2026-08-18 there were **40,665 live warrants across both boards** — more than thirty for every listed company — written by fourteen brokers over 1,300 underlyings. **14,593 of them actually traded that day.** The exchanges publish this as six separate category reports plus a 40 MB issue register, all in Chinese, with no way to ask for one underlying's chain. This Actor assembles it into one record shape, cross-checks it against feeds the exchange compiles independently, and lets you ask the question everyone actually has: *what warrants are there on 2330, and what are they worth?*

### Why this data matters

- **`underlyingCodes` turns a 31,000-row session into an option chain.** Ask for `["2330"]` and you get the 462 TSMC warrants that traded on 2026-08-18, each with its strike, expiry and moneyness — the view no exchange page offers.
- **The analytics are computed, not scraped, so they are internally consistent.** `moneyness_pct`, `intrinsic_value`, `time_value`, `premium_pct` and `leverage_ratio` all come from the same three published numbers: underlying close, exercise price and exercise ratio. Nothing is modelled or fitted, and a missing input yields `null` rather than an assumption.
- **The exercise ratio is the trap this dataset defuses.** TWSE publishes it as shares per *thousand* warrant units and TPEX as shares per unit. Get it wrong and 3,209 of the 14,593 warrants that traded on 2026-08-18 appear to close below their own intrinsic value. Both are normalised to per-unit here, and the check that proves it runs on every session.
- **`trades_below_intrinsic` finds the genuine anomalies.** After correct scaling, exactly **2** warrants closed below intrinsic value on 2026-08-18 — both at or one day from their last trading day. That is a real, and rare, market artefact rather than a parsing error, so it is flagged instead of smoothed away.
- **Warrants expire, and this dataset says exactly when.** `days_to_expiry` and `last_trading_date` come from the issue register, not from the code. The name's own expiry hint (`5A` = October 2025) is kept in `expiry_code` for reference and is not what the dates are computed from.
- **`issue_notes` is an audit trail nobody else publishes.** For TWSE warrants it is the issuer's own running log of every strike adjustment and every cancellation: *"◎2026/07/09標的證券除息，調整後履約價格1,475.41元"*. It explains why `exercise_price` differs from `original_exercise_price`.
- **Nobody serves this in English.** Search for a Taiwan warrant API and you find nothing free and nothing structured. The source is six Chinese category reports behind a host that resets the connection if you ask too quickly.

### Output

One record per warrant per trading session. A TSMC call, deep in the money with two days left:

```json
{
  "date": "2026-08-18",
  "market": "TWSE",
  "warrant_code": "032840",
  "warrant_name": "台積電中信58購02",
  "warrant_type": "CALL",
  "warrant_type_zh": "認購權證",
  "issuer": "中信",
  "expiry_code": "58",
  "suspended": false,
  "knock_out_price": null,
  "open": 7.25,
  "high": 7.25,
  "low": 7.25,
  "close": 7.25,
  "price_change": null,
  "volume_units": 5000,
  "transactions": 1,
  "turnover": 36250,
  "best_bid": 7.15,
  "best_bid_size": 20,
  "best_ask": null,
  "best_ask_size": 0,
  "underlying_code": "2330",
  "underlying_name": "台積電",
  "underlying_close": 2380,
  "exercise_price": 1480.27,
  "original_exercise_price": 1500,
  "exercise_ratio": 0.008,
  "expiry_date": "2026-08-20",
  "last_trading_date": "2026-08-18",
  "exercise_start_date": "2026-08-20",
  "days_to_expiry": 2,
  "exercise_style": null,
  "category": "一般型",
  "cap_price": null,
  "floor_price": null,
  "issued_units": 10000000,
  "market_maker_quoting": "主動報價",
  "settlement_style_code": "2",
  "terms_as_of": "2026-08-18",
  "terms_matched": true,
  "moneyness_pct": 60.7815,
  "intrinsic_value": 7.19784,
  "time_value": 0.05216,
  "premium_pct": 0.2739,
  "leverage_ratio": 2.6262,
  "trades_below_intrinsic": false
}
```

`price_change` is `null` here because the exchange marked the session `X` — not comparable with the previous close, which happens after a strike adjustment or a resumption. An unknown change is reported as unknown rather than as zero.

A far out-of-the-money put on the same underlying, where the leverage is the whole point:

```json
{
  "warrant_code": "03002T",
  "warrant_name": "台積電群益5A售12",
  "warrant_type": "PUT",
  "issuer": "群益",
  "close": 0.34,
  "underlying_close": 2380,
  "exercise_price": 1855.05,
  "exercise_ratio": 0.019,
  "days_to_expiry": 59,
  "moneyness_pct": -28.2984,
  "intrinsic_value": 0.0,
  "time_value": 0.34,
  "premium_pct": 22.8086,
  "leverage_ratio": 133.0
}
```

Set `includeTerms: false` for a quotes-only run: everything from `date` through `underlying_close`, without the 40 MB issue-register download.

### Input

| Field | Type | Notes |
|---|---|---|
| `markets` | array | `TWSE`, `TPEX`. Default both. |
| `startDate` / `endDate` | string | `YYYY-MM-DD`. Both empty means the latest session. TWSE reaches back to 2004-02-11; 90 calendar days per run. |
| `warrantTypes` | array | `CALL`, `PUT`, `BULL`, `BEAR`, `EXTENDABLE_BULL`, `EXTENDABLE_BEAR`. Each is a separate request, so narrowing saves time. |
| `underlyingCodes` | array | e.g. `["2330", "2317"]`. The filter most callers want. |
| `warrantCodes` | array | e.g. `["03812T"]`. Matched as text — codes are not all numeric. |
| `issuers` | array | The abbreviation in the warrant's name: `元大`, `凱基`, `群益`, `統一`, `永豐`, `國票`, `富邦`, `台新`, `國泰`, `中信`, `元富`, `兆豐`, `第一`, `康和`. |
| `onlyTraded` | boolean | Drop zero-volume warrants. Roughly halves the output. |
| `includeTerms` | boolean | Join strike/expiry and compute analytics. Default `true`. |
| `crossCheck` | boolean | Verify against independently compiled feeds; results in the log. Default `true`. |

### How the numbers are verified

Every run checks itself against sources the exchange builds separately, and says so in the log:

- **Turnover against `t187ap42_L`.** A second TWSE feed publishing the same session. All **31,116 warrants agree on volume and turnover, exactly**, on the day this was written. Its column is labelled 成交張數 ("lots") but holds units — the agreement is what proves it.
- **Underlying closes against `STOCK_DAY_ALL`.** The equity closing feed, compiled independently of the warrant reports. All **30,179 share-linked warrants match to the cent**. The remaining 937 are written on indices (IX0001 臺股指數 and friends), which no equity feed carries.
- **TPEX against its own mirror.** `tpex_warrant_quts` republishes `tpex_warrant_daily_quts` under a second endpoint. All **9,549 rows agree**.
- **OHLC and turnover consistency, per row.** `low ≤ open, close ≤ high`, and turnover is non-zero exactly when volume is. Every row, every session.
- **Column signatures, per report.** The six TWSE reports use **two different twenty-column layouts** — calls and puts open with 暫停交易, while bull/bear certificates drop it and carry 牛熊證觸及限制價格 instead. Both are pinned; anything else fails the run loudly rather than silently mis-assigning columns.

### Coverage and limits

- **TWSE history reaches 2004-02-11** and no further — the exchange answers `查詢日期小於93年2月11日` before that. The column layout has been stable across every session tested from 2004 to today.
- **TPEX publishes only the latest session.** There is no dated TPEX warrant endpoint; the OTC feeds are today-only snapshots. Ask for a historical range and the run logs that TPEX was skipped rather than quietly returning nothing.
- **Issue terms are a live snapshot, for both boards.** `terms_as_of` records when. For a historical session the strike shown is today's — after every dividend adjustment since — and warrants that have expired since will have `terms_matched: false` because they have left the register. For the latest session the match rate is **31,116 / 31,116**.
- **`issuer` is read off the warrant's name**, which the exchange builds to a fixed rule. Fourteen abbreviations cover every warrant on both boards; anything else is left `null` rather than guessed.
- **`leverage_ratio` is plain financial gearing** — spot × ratio / warrant price. It is not delta-adjusted effective gearing, which would require a pricing model this Actor deliberately does not run.
- **A full TWSE session takes several minutes.** The call report alone is 4.8 MB served uncompressed, and requests are paced to avoid the connection resets TWSE throws at fast callers.

### Taiwan Market Data Suite

This Actor is part of a suite of 23 Taiwan market data APIs by [chamarix](https://apify.com/chamarix) — official sources only, cross-validated against independent official endpoints, clean JSON out. Code samples for the whole suite: [GitHub](https://github.com/cc77556/taiwan-market-data-actors).

**Market data:**

- [twse-institutional-trades](https://apify.com/chamarix/twse-institutional-trades) — Daily institutional buy/sell (foreign, investment trust, dealer) per stock — TWSE listed
- [tpex-institutional-trades](https://apify.com/chamarix/tpex-institutional-trades) — Daily institutional buy/sell per stock — TPEx OTC market
- [taiwan-monthly-revenue](https://apify.com/chamarix/taiwan-monthly-revenue) — Monthly revenue of 1,900+ listed & OTC companies, MoM/YoY
- [taiwan-financial-statements](https://apify.com/chamarix/taiwan-financial-statements) — Quarterly income statement, balance sheet & cash flow back to 2013
- [taiwan-dividend-calendar](https://apify.com/chamarix/taiwan-dividend-calendar) — Ex-dividend / ex-rights dates, reference prices & payouts back to 2003
- [taiwan-margin-trading](https://apify.com/chamarix/taiwan-margin-trading) — Daily margin trading & short sale balances per stock
- [taiwan-sbl-short-sale-balance](https://apify.com/chamarix/taiwan-sbl-short-sale-balance) — Securities-lending short sale balances per stock
- [taiwan-day-trading-stats](https://apify.com/chamarix/taiwan-day-trading-stats) — Day-trading volume, value & ratio per stock since 2014
- [tdcc-shareholding-dispersion](https://apify.com/chamarix/tdcc-shareholding-dispersion) — Weekly TDCC shareholding dispersion (retail vs whale structure)
- [taiwan-foreign-shareholding](https://apify.com/chamarix/taiwan-foreign-shareholding) — Foreign ownership percentage & remaining quota per stock
- [taifex-institutional-derivatives](https://apify.com/chamarix/taifex-institutional-derivatives) — Institutional futures & options positions (TAIFEX), incl. put/call ratio
- [taiwan-warrants-daily](https://apify.com/chamarix/taiwan-warrants-daily) — Daily quotes, strike, expiry & moneyness for every listed/OTC warrant since 2004
- [taiwan-stock-alerts](https://apify.com/chamarix/taiwan-stock-alerts) — Watch-list, disposition & short-sale suspension alerts
- [taiwan-insider-share-transfers](https://apify.com/chamarix/taiwan-insider-share-transfers) — Insider share-transfer filings (directors, officers, 10% holders) since 2002
- [taiwan-director-shareholdings](https://apify.com/chamarix/taiwan-director-shareholdings) — Monthly director/officer shareholdings & share-pledge ratio since 1999
- [taiwan-block-trades](https://apify.com/chamarix/taiwan-block-trades) — Every block trade (鉅額交易) with price, size & basket constituents since 2005
- [taiwan-shareholder-meetings](https://apify.com/chamarix/taiwan-shareholder-meetings) — Shareholder meeting dates, book closure periods & e-voting since 2005
- [taiwan-emerging-stock-quotes](https://apify.com/chamarix/taiwan-emerging-stock-quotes) — Emerging (興櫃) board quotes, pre-IPO register & history since 2003
- [taiwan-etf-regular-investment](https://apify.com/chamarix/taiwan-etf-regular-investment) — Monthly regular savings plan (定期定額) rankings for stocks & ETFs since 2020
- [taiwan-treasury-stock-buybacks](https://apify.com/chamarix/taiwan-treasury-stock-buybacks) — Every treasury-stock buyback (庫藏股) filing, plan vs execution, since 2000

**Property market:**

- [taiwan-real-estate-transactions](https://apify.com/chamarix/taiwan-real-estate-transactions) — Actual registered sale, presale & lease prices (實價登錄) for all 22 cities since 2012

**Government & civic data:**

- [taiwan-legislator-monitor](https://apify.com/chamarix/taiwan-legislator-monitor) — Legislative Yuan bills, legislators & meetings
- [taiwan-tender-monitor](https://apify.com/chamarix/taiwan-tender-monitor) — Government e-procurement tenders (open calls, awards, failures)

### Data source

Taiwan Stock Exchange 每日收盤行情 (MI\_INDEX, warrant categories) and 權證發行相關資料 (t187ap37\_L); Taipei Exchange 上櫃權證收盤行情日報表 and 上櫃權證發行基本資料. Public data, no login required.

# Actor input Schema

## `markets` (type: `array`):

TWSE carries ~31,000 warrants and answers for any session back to 2004-02-11. TPEX carries ~9,500 and publishes only the latest session — it has no dated warrant endpoint at all, so a historical range returns TWSE rows only.

## `startDate` (type: `string`):

First trading day to fetch. Leave both dates empty for the latest session, which is what most runs want. The oldest session the exchange will answer for is 2004-02-11; earlier dates are rejected rather than silently emptied.

## `endDate` (type: `string`):

Last trading day to fetch, inclusive. One TWSE session is around 31,000 records, so a long range gets large quickly; 90 calendar days is the per-run ceiling. Non-trading days cost one request and are skipped.

## `warrantTypes` (type: `array`):

The exchange files each type as a separate report, so narrowing this genuinely saves requests. Calls are the overwhelming majority — 28,772 of the 31,116 TWSE warrants live on 2026-08-18, against 2,280 puts and 64 bull/bear certificates.

## `underlyingCodes` (type: `array`):

Keep only warrants over these underlyings, e.g. \['2330', '2317']. This is the filter most callers want: it turns a 31,000-row session into the option chain on one stock. Index-linked warrants use the exchange's index codes (IX0001 for 臺股指數).

## `warrantCodes` (type: `array`):

Optional list of warrant codes to keep, e.g. \['03812T']. Codes are not always numeric, so they are matched as text.

## `issuers` (type: `array`):

Keep only warrants from these issuing brokers, given as the abbreviation the exchange puts in the warrant's name: 元大, 凱基, 群益, 統一, 永豐, 國票, 富邦, 台新, 國泰, 中信, 元富, 兆豐, 第一, 康和. Those fourteen are the whole market.

## `onlyTraded` (type: `boolean`):

Drop warrants with zero volume for the session. Roughly half the board does not trade on a given day — 14,593 of 31,116 on 2026-08-18 — so this halves the output while losing nothing a price series needs.

## `includeTerms` (type: `boolean`):

Join each warrant to its exercise price, exercise ratio, expiry and cap/floor, and compute moneyness, intrinsic value, premium and leverage from them. This is most of what makes the dataset useful, but the TWSE terms document is ~40 MB, so turning it off makes a quotes-only run substantially faster.

## `crossCheck` (type: `boolean`):

Verify the parsed session against feeds the exchange compiles separately — t187ap42\_L for turnover, STOCK\_DAY\_ALL for underlying closes, and the TPEX mirror endpoint. Results go to the log. The checks only run for the session those snapshot feeds were built on, so they are automatically skipped for historical days.

## Actor input object example

```json
{
  "markets": [
    "TWSE",
    "TPEX"
  ],
  "startDate": "",
  "endDate": "",
  "warrantTypes": [],
  "underlyingCodes": [],
  "warrantCodes": [],
  "issuers": [],
  "onlyTraded": false,
  "includeTerms": true,
  "crossCheck": true
}
```

# Actor output Schema

## `datasetItems` (type: `string`):

One record per warrant per trading session — price, volume, the underlying's close, the issue terms behind it, and the moneyness, premium and leverage those imply.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "markets": [
        "TWSE",
        "TPEX"
    ],
    "startDate": "",
    "endDate": "",
    "warrantTypes": [],
    "underlyingCodes": [],
    "warrantCodes": [],
    "issuers": []
};

// Run the Actor and wait for it to finish
const run = await client.actor("chamarix/taiwan-warrants-daily").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "markets": [
        "TWSE",
        "TPEX",
    ],
    "startDate": "",
    "endDate": "",
    "warrantTypes": [],
    "underlyingCodes": [],
    "warrantCodes": [],
    "issuers": [],
}

# Run the Actor and wait for it to finish
run = client.actor("chamarix/taiwan-warrants-daily").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "markets": [
    "TWSE",
    "TPEX"
  ],
  "startDate": "",
  "endDate": "",
  "warrantTypes": [],
  "underlyingCodes": [],
  "warrantCodes": [],
  "issuers": []
}' |
apify call chamarix/taiwan-warrants-daily --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,chamarix/taiwan-warrants-daily"
        }
    }
}

```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/FTUuOed5YaT4H9h5z/builds/TltoWpDftKywi6eIS/openapi.json
