Taiwan Equity Research Coverage

by reason-machines2384a003145aNo licenseListed Oct 8, 2026Updated Oct 8, 2026

Structured equity research database for 1,735 Taiwan-listed companies with wikilink knowledge graph, supply chain mapping, and financial data tools.

AI-generated overview

Maintains a structured Taiwan equity research database of 1,735 listed companies with wikilink knowledge graph and supply chain mapping.

What it does
Provides instructions and Python script commands for a Taiwan-listed equity research database covering 1,735 companies across 99 sectors. It supports adding ticker reports, refreshing financial and valuation data via yfinance, tagging companies by theme or buzzword, auditing report quality, and rebuilding a wikilink index, thematic screens, and a D3.js network graph. Deliverables are markdown ticker reports, a wikilink index, theme pages, and an interactive network visualization.
When to use it
Use it when researching Taiwan-listed equities, mapping supply chains or technology ecosystems, screening companies by theme, or maintaining and auditing a ticker report database. It suits bulk data refreshes and knowledge-graph exploration of Taiwan stocks.
Requirements
Requires cloning the My-TW-Coverage repository and installing yfinance, pandas, and tabulate; network access is needed for financial data retrieval. The skill itself is instructions only and ships no scripts, though it documents scripts in the repository.

Taiwan Equity Research Coverage (My-TW-Coverage)

Skill by ara.so — Daily 2026 Skills collection.

A structured equity research database covering 1,735 Taiwan-listed companies (TWSE + OTC) across 99 industry sectors. Each report contains a business overview, supply chain mapping, customer/supplier relationships, and financial data — all cross-referenced through 4,900+ wikilinks forming a searchable knowledge graph.

Installation

bash
git clone https://github.com/Timeverse/My-TW-Coveragecd My-TW-Coveragepip install yfinance pandas tabulate

Project Structure

My-TW-Coverage/├── Pilot_Reports/             # 1,735 ticker reports across 99 sectors│   ├── Semiconductors/        # 155 tickers│   ├── Electronic Components/ # 267 tickers│   ├── Computer Hardware/     # 114 tickers│   └── ... (99 sector folders)├── scripts/│   ├── utils.py               # Shared utilities│   ├── add_ticker.py          # Generate new ticker reports│   ├── update_financials.py   # Refresh financial tables + valuation│   ├── update_valuation.py    # Refresh valuation multiples only (fast)│   ├── update_enrichment.py   # Update business descriptions from JSON│   ├── audit_batch.py         # Quality auditing│   ├── discover.py            # Buzzword → related companies search│   ├── build_wikilink_index.py# Rebuild WIKILINKS.md index│   ├── build_themes.py        # Generate thematic investment screens│   └── build_network.py       # Generate D3.js network graph├── WIKILINKS.md               # Auto-generated browsable wikilink index├── network/index.html         # Interactive D3.js wikilink network├── themes/                    # Thematic investment screens (auto-generated)└── task.md                    # Batch definitions and progress tracking

Report Format

Each ticker report is a markdown file at Pilot_Reports/<Sector>/<TICKER>_<Name>.md:

markdown
# 2330 - [[台積電]]
## 業務簡介**板塊:** Technology**產業:** Semiconductors**市值:** 47,326,857 百萬台幣**企業價值:** 44,978,990 百萬台幣
台積電為全球最大晶圓代工廠,專注於 [[CoWoS]]、[[3奈米]] 先進製程...
## 供應鏈位置**上游:** [[ASML]], [[Applied Materials]], [[SUMCO]]**中游:** **台積電** (晶圓代工)**下游:** [[Apple]], [[NVIDIA]], [[AMD]], [[Broadcom]]
## 主要客戶及供應商### 主要客戶- [[Apple]], [[NVIDIA]], [[AMD]], [[Qualcomm]]
### 主要供應商- [[ASML]], [[Tokyo Electron]], [[Shin-Etsu]]
## 財務概況### 估值指標| P/E (TTM) | Forward P/E | P/S (TTM) | P/B | EV/EBITDA ||-----------|-------------|-----------|-----|-----------|| 28.5      | 22.1        | 9.3       | 7.2 | 16.4      |
### 年度財務數據[Annual 3-year financial table with 14 metrics]
### 季度財務數據[Quarterly 4-quarter financial table]

Key Commands

Add a New Ticker

bash
# Basic (auto-detect sector)python scripts/add_ticker.py 2330 台積電
# With explicit sectorpython scripts/add_ticker.py 2330 台積電 --sector Semiconductors

Update Financial Data

bash
# Single tickerpython scripts/update_financials.py 2330
# Multiple tickerspython scripts/update_financials.py 2330 2454 3034
# By batch number (see task.md for batch definitions)python scripts/update_financials.py --batch 101
# By sectorpython scripts/update_financials.py --sector Semiconductors
# All 1,735 tickers (slow)python scripts/update_financials.py

Update Valuation Only (~3x Faster)

Refreshes only P/E, Forward P/E, P/S, P/B, EV/EBITDA, and stock price — skips full financial statement re-fetch.

bash
python scripts/update_valuation.py 2330python scripts/update_valuation.py --batch 101python scripts/update_valuation.py --sector Semiconductorspython scripts/update_valuation.py                          # All tickers

Discover Companies by Buzzword

Find every Taiwan-listed company related to a theme or technology:

bash
# Basic searchpython scripts/discover.py "液冷散熱"
# Auto-detect relevant sectors (skips banks/insurance/real estate for tech terms)python scripts/discover.py "液冷散熱" --smart
# Tag matching companies with [[wikilinks]] in their reportspython scripts/discover.py "液冷散熱" --apply
# Apply + rebuild themes + rebuild network graphpython scripts/discover.py "液冷散熱" --apply --rebuild
# Limit to a specific sectorpython scripts/discover.py "液冷散熱" --sector Semiconductors

Common buzzword examples:

  • "CoWoS" — TSMC advanced packaging supply chain
  • "HBM" — High Bandwidth Memory ecosystem
  • "電動車" — EV component suppliers
  • "AI 伺服器" — AI server supply chain (148 companies)
  • "光阻液" — Photoresist suppliers and consumers
  • "碳化矽" — Silicon carbide (SiC) companies

Update Enrichment Content (Bulk AI Research)

Prepare a JSON file, then apply to specific tickers, batches, or sectors:

bash
python scripts/update_enrichment.py --data enrichment.json 2330python scripts/update_enrichment.py --data enrichment.json --batch 101python scripts/update_enrichment.py --data enrichment.json --sector Semiconductors

Enrichment JSON format:

json
{  "2330": {    "desc": "台積電為全球最大晶圓代工廠,專注於 [[CoWoS]]、[[3奈米]] 先進製程,為 [[Apple]]、[[NVIDIA]] 等科技巨頭提供晶片製造服務。",    "supply_chain": "**上游:**\n- [[ASML]] (EUV 微影設備)\n- [[Applied Materials]] (薄膜沉積)\n**中游:**\n- **台積電** (晶圓代工)\n**下游:**\n- [[Apple]]\n- [[NVIDIA]]",    "cust": "### 主要客戶\n- [[Apple]] (約25%營收)\n- [[NVIDIA]]\n- [[AMD]]\n\n### 主要供應商\n- [[ASML]]\n- [[Tokyo Electron]]"  },  "2454": {    "desc": "...",    "supply_chain": "...",    "cust": "..."  }}

Audit Report Quality

bash
# Single batchpython scripts/audit_batch.py 101 -v
# All batchespython scripts/audit_batch.py --all -v

Audit checks:

  • Minimum 8 wikilinks per report
  • No generic terms in brackets (e.g. [[公司]], [[產品]])
  • No placeholder text remaining
  • No English text in Chinese-language sections
  • Metadata completeness (板塊, 產業, 市值, 企業價值)
  • Section depth (業務簡介, 供應鏈位置, 主要客戶及供應商, 財務概況 all present)

Rebuild Wikilink Index

bash
python scripts/build_wikilink_index.py

Regenerates WIKILINKS.md — a browsable index of all 4,900+ wikilinks categorized as Technologies, Materials, Applications, and Companies. Run after any enrichment update.

Generate Thematic Investment Screens

bash
# Build all 20 themespython scripts/build_themes.py
# Single themepython scripts/build_themes.py "CoWoS"
# List available themespython scripts/build_themes.py --list

Output in themes/ — each page shows companies grouped by upstream/midstream/downstream role.

Generate Interactive Network Graph

bash
# Default: min 5 co-occurrencespython scripts/build_network.py
# Fewer edges for cleaner viewpython scripts/build_network.py --min-weight 10
# Only top 200 nodespython scripts/build_network.py --top 200

Opens network/index.html in browser — D3.js force-directed graph. Node colors:

  • 🔴 Red = Taiwan company
  • 🔵 Blue = International company
  • 🟢 Green = Technology
  • 🟠 Orange = Material
  • 🟣 Purple = Application

Wikilink Graph — Core Feature

The wikilink graph is what makes this database powerful. Every [[entity]] in every report creates edges in a knowledge graph.

Search by entity to find related companies:

SearchResultsInsight
[[Apple]]207 companiesApple's full Taiwan supplier network
[[NVIDIA]]277 companiesNVIDIA's Taiwan supply chain
[[台積電]]469 companiesTaiwan semiconductor ecosystem
[[CoWoS]]39 companiesTSMC advanced packaging players
[[AI 伺服器]]148 companiesAI server supply chain
[[PCB]]263 companiesPrinted circuit board ecosystem
[[電動車]]223 companiesEV component suppliers

Browse: Open WIKILINKS.md for the full categorized index.

Code Examples

Read and Parse a Report

python
import refrom pathlib import Path
def get_report(ticker: str, reports_dir: str = "Pilot_Reports") -> dict:    """Find and parse a ticker report."""    base = Path(reports_dir)    # Find the file across all sector subdirectories    matches = list(base.rglob(f"{ticker}_*.md"))    if not matches:        return {}        content = matches[0].read_text(encoding="utf-8")        # Extract all wikilinks    wikilinks = re.findall(r'\[\[([^\]]+)\]\]', content)        # Extract sector metadata    sector_match = re.search(r'\*\*產業:\*\*\s*(.+)', content)    board_match = re.search(r'\*\*板塊:\*\*\s*(.+)', content)        return {        "ticker": ticker,        "file": str(matches[0]),        "sector": sector_match.group(1).strip() if sector_match else None,        "board": board_match.group(1).strip() if board_match else None,        "wikilinks": list(set(wikilinks)),        "wikilink_count": len(set(wikilinks)),        "content": content    }
# Usagereport = get_report("2330")print(f"Sector: {report['sector']}")print(f"Wikilinks ({report['wikilink_count']}): {report['wikilinks'][:10]}")

Build a Custom Wikilink Index

python
import refrom pathlib import Pathfrom collections import defaultdict
def build_wikilink_index(reports_dir: str = "Pilot_Reports") -> dict:    """    Returns: {entity: [list of tickers that mention it]}    """    index = defaultdict(list)        for md_file in Path(reports_dir).rglob("*.md"):        # Extract ticker from filename (e.g. "2330_台積電.md" -> "2330")        ticker = md_file.stem.split("_")[0]        content = md_file.read_text(encoding="utf-8")        wikilinks = set(re.findall(r'\[\[([^\]]+)\]\]', content))                for link in wikilinks:            index[link].append(ticker)        # Sort by mention count    return dict(sorted(index.items(), key=lambda x: len(x[1]), reverse=True))
# Find all companies in Apple's supply chainindex = build_wikilink_index()apple_suppliers = index.get("Apple", [])print(f"Apple supply chain: {len(apple_suppliers)} companies")print(apple_suppliers[:20])
# Find companies involved in CoWoScowos_companies = index.get("CoWoS", [])print(f"\nCoWoS ecosystem: {len(cowos_companies)} companies: {cowos_companies}")

Find Supply Chain Overlaps Between Two Entities

python
def supply_chain_overlap(entity_a: str, entity_b: str, reports_dir: str = "Pilot_Reports"):    """Find tickers that appear in both entities' supply chains."""    index = build_wikilink_index(reports_dir)        set_a = set(index.get(entity_a, []))    set_b = set(index.get(entity_b, []))    overlap = set_a & set_b        print(f"{entity_a}: {len(set_a)} companies")    print(f"{entity_b}: {len(set_b)} companies")    print(f"Overlap: {len(overlap)} companies — {sorted(overlap)}")    return overlap
# Companies in both NVIDIA and Apple supply chainssupply_chain_overlap("NVIDIA", "Apple")
# Companies in both AI server and EV supply chainssupply_chain_overlap("AI 伺服器", "電動車")

Batch Financial Update with Error Handling

python
import subprocessimport sys
def update_sector_financials(sector: str, valuation_only: bool = False):    """Update financials for all tickers in a sector."""    script = "update_valuation.py" if valuation_only else "update_financials.py"    cmd = [sys.executable, f"scripts/{script}", "--sector", sector]        result = subprocess.run(cmd, capture_output=True, text=True)        if result.returncode != 0:        print(f"Error: {result.stderr}")    else:        print(result.stdout)        return result.returncode
# Update valuation multiples for semiconductors (fast)update_sector_financials("Semiconductors", valuation_only=True)
# Full financial update for a sectorupdate_sector_financials("Electronic Components", valuation_only=False)

Prepare Enrichment JSON

python
import json
def build_enrichment_entry(ticker: str, company_name: str,                           description: str, upstream: list[str],                           midstream: str, downstream: list[str],                           customers: list[str], suppliers: list[str]) -> dict:    """    Build a properly formatted enrichment entry.    All entity names in lists will be wrapped in [[wikilinks]].    """    def wikify(items):        return "\n".join(f"- [[{item}]]" for item in items)        supply_chain = (        f"**上游:**\n{wikify(upstream)}\n"        f"**中游:**\n- **{company_name}** ({midstream})\n"        f"**下游:**\n{wikify(downstream)}"    )        cust_section = (        f"### 主要客戶\n{wikify(customers)}\n\n"        f"### 主要供應商\n{wikify(suppliers)}"    )        return {        "desc": description,        "supply_chain": supply_chain,        "cust": cust_section    }
# Build enrichment for multiple tickersenrichment = {    "2330": build_enrichment_entry(        ticker="2330",        company_name="台積電",        description="台積電為全球最大晶圓代工廠,專注於 [[CoWoS]]、[[3奈米]] 先進製程,為全球領先科技公司提供晶片製造服務。",        upstream=["ASML", "Applied Materials", "SUMCO", "Tokyo Electron"],        midstream="晶圓代工",        downstream=["Apple", "NVIDIA", "AMD", "Broadcom", "Qualcomm"],        customers=["Apple", "NVIDIA", "AMD", "Qualcomm", "MediaTek"],        suppliers=["ASML", "Tokyo Electron", "Shin-Etsu", "Applied Materials"]    )}
# Save to filewith open("enrichment.json", "w", encoding="utf-8") as f:    json.dump(enrichment, f, ensure_ascii=False, indent=2)
print("enrichment.json ready. Apply with:")print("python scripts/update_enrichment.py --data enrichment.json 2330")

Audit a Batch Programmatically

python
import subprocessimport json
def audit_and_report(batch_id: int) -> dict:    """Run audit and parse results."""    result = subprocess.run(        ["python", "scripts/audit_batch.py", str(batch_id), "-v"],        capture_output=True, text=True    )        output = result.stdout        # Parse pass/fail counts from output    passed = output.count("✓")     failed = output.count("✗")        return {        "batch": batch_id,        "passed": passed,        "failed": failed,        "pass_rate": passed / (passed + failed) if (passed + failed) > 0 else 0,        "output": output    }
results = audit_and_report(101)print(f"Batch 101: {results['passed']} passed, {results['failed']} failed")print(f"Pass rate: {results['pass_rate']:.1%}")

Common Workflows

Workflow 1: Research a New Investment Theme

bash
# 1. Search for related companiespython scripts/discover.py "液冷散熱" --smart
# 2. Apply wikilinks to matching reportspython scripts/discover.py "液冷散熱" --apply
# 3. Rebuild themes to include new themepython scripts/build_themes.py "液冷散熱"
# 4. Rebuild wikilink index and networkpython scripts/build_wikilink_index.pypython scripts/build_network.py
# 5. Browse resultsopen themes/液冷散熱.mdopen network/index.html

Workflow 2: Onboard a New Ticker

bash
# 1. Add the report (Python script, free)python scripts/add_ticker.py 6669 緯穎 --sector Computer Hardware
# 2. Update financial datapython scripts/update_financials.py 6669
# 3. Prepare enrichment JSON (use AI research or manual)# Edit enrichment.json with business description, supply chain, customers
# 4. Apply enrichmentpython scripts/update_enrichment.py --data enrichment.json 6669
# 5. Audit qualitypython scripts/audit_batch.py --all -v
# 6. Rebuild indexpython scripts/build_wikilink_index.py

Workflow 3: Refresh Valuation for Earnings Season

bash
# Fast valuation refresh only (no full financial re-fetch)python scripts/update_valuation.py --sector Semiconductorspython scripts/update_valuation.py --sector Electronic Componentspython scripts/update_valuation.py --sector Computer Hardware
# Or refresh everything (slow, run overnight)python scripts/update_valuation.py

Workflow 4: Map a Supply Chain

python
# Find all Taiwan companies connected to a specific technologyfrom collections import defaultdictimport refrom pathlib import Path
def map_supply_chain(technology: str, reports_dir: str = "Pilot_Reports"):    results = {"upstream": [], "midstream": [], "downstream": []}        for md_file in Path(reports_dir).rglob("*.md"):        content = md_file.read_text(encoding="utf-8")                if f"[[{technology}]]" not in content:            continue                ticker = md_file.stem.split("_")[0]        company = md_file.stem.split("_", 1)[1] if "_" in md_file.stem else ""                # Detect position in supply chain        if f"**上游:**" in content and f"[[{technology}]]" in content.split("**上游:**")[1].split("**中游:**")[0]:            results["upstream"].append(f"{ticker} {company}")        elif f"[[{technology}]]" in content and "**中游:**" in content:            mid_section = content.split("**中游:**")[1].split("**下游:**")[0] if "**下游:**" in content else ""            if f"[[{technology}]]" in mid_section:                results["midstream"].append(f"{ticker} {company}")        else:            results["downstream"].append(f"{ticker} {company}")        return results
chain = map_supply_chain("CoWoS")print(f"Upstream: {chain['upstream']}")print(f"Midstream: {chain['midstream']}")print(f"Downstream: {chain['downstream']}")

Token Cost Reference

OperationTokens UsedCommand
Update financialsFree (yfinance)python scripts/update_financials.py
Update valuationFree (yfinance)python scripts/update_valuation.py
Discover (with results)Freepython scripts/discover.py "term"
AuditFreepython scripts/audit_batch.py
Build themes/network/indexFreepython scripts/build_*.py
/add-ticker (Claude Code)MediumAI research per ticker
/update-enrichment (Claude Code)Medium3–5 web searches per ticker
/discover (no results found)Low–HighAI researches online

Rule of thumb: Use Python scripts for bulk data operations. Use Claude Code slash commands only when AI research is needed for a specific ticker.

Troubleshooting

yfinance returns no data for a Taiwan ticker:

python
import yfinance as yf# Taiwan tickers need .TW suffix for TWSE, .TWO for OTCtsmc = yf.Ticker("2330.TW")print(tsmc.info.get("marketCap"))

Report not found by scripts:

  • Filename must match pattern: {TICKER}_{CompanyName}.md
  • Must be inside a subfolder of Pilot_Reports/
  • Use python scripts/utils.py to test file discovery

Audit fails "too few wikilinks":

  • Minimum 8 unique [[wikilinks]] required per report
  • Use update_enrichment.py to add richer content
  • Run discover.py --apply to auto-tag relevant wikilinks

build_network.py produces empty graph:

bash
# Ensure reports exist and have wikilinks firstpython scripts/build_wikilink_index.py  # Check WIKILINKS.md has entriespython scripts/build_network.py --min-weight 2  # Lower threshold

Enrichment JSON rejected:

  • Ensure file is valid UTF-8 with ensure_ascii=False
  • Keys must be ticker strings ("2330", not 2330)
  • Required keys per entry: desc, supply_chain, cust
  • Content must be in Traditional Chinese; English only for proper nouns

Finding batch numbers:

  • See task.md for batch definitions and which tickers are in each batch
  • Batches are used for incremental processing of the 1,735 tickers

Source and attribution

Source:reason-machines/trending-skillsinskills/taiwan-equity-research-coverageat commit2384a00

License: No license

Content belongs to its original authors. SourceWeft indexes it from a public repository.

Report or request removal