Methodology
Transparent methodology for every metric we calculate. Data sources, formulas, update frequencies, and known limitations — all documented.
Real Yield
Nominal yield adjusted for local inflation using the Fisher formula:
real_yield_local = (1 + nominal_yield) / (1 + inflation) − 1 real_yield_investor = (1 + real_yield_local) × (1 + fx_change_1y) − 1
- Nominal yield from
Ticker.info'sdividendYield(Yahoo Finance). Trailing 12-month. - Inflation: FRED monthly CPI YoY where available (JP, KR, ID, IN, US, GB, EU), otherwise World Bank annual CPI YoY. TH/MY/SG/PH use WB annual. Taiwan has neither and is excluded from real-yield rankings.
- FX change: point-to-point 1Y move of stock-country currency vs investor currency, from daily Yahoo Finance forex closes. Not volatility-adjusted.
- Refresh: dividend yields daily at 02:30 UTC; real-yield snapshots recomputed daily at 03:00 UTC.
REIT Tracker
- NAV per share from Yahoo Finance
bookValue. Price-to-NAV frompriceToBook. Updated daily. - NAV Premium/Discount = (price − NAV) / NAV × 100. We flag REITs with < −60% discount as likely stale-NAV artifacts and exclude them from the "Biggest Discounts" homepage list.
- Distribution Safety Score (0–100): four components, 25 points each if threshold passes — payout ratio < 90%, coverage ratio > 1.1×, occupancy > 90%, debt/assets < 40%. Components missing from yfinance (coverage, occupancy, WALE) stay null and cap the maximum achievable score.
- Aristocrat flag: 10+ consecutive years of distributions and no year-over-year cut in the last 5 years. Derived from
Ticker.dividendshistory. - Refresh: fundamentals 02:45 UTC daily, derived metrics 03:15 UTC daily.
Foreign Flows
Daily aggregate foreign-investor net buy/sell pulled directly from each exchange's public release. Phase-1 coverage:
| Market | Source | Cadence | Tier |
|---|---|---|---|
| Taiwan | TWSE BFI82U + TWT38U JSON | Daily | Aggregate + per-stock top-20 |
| India | NSE /api/fiidiiTradeReact | Daily | Aggregate FII + DII |
| Japan | JPX weekly XLS | Weekly (Thu) | TSE Prime section |
| Hong Kong | HKEX Highlightsearch ASMX | Daily | Turnover-only proxy |
| Malaysia | Bursa HTML (Playwright) | Daily | Aggregate by investor type |
| Philippines | PSE monthly PDF | Monthly (3rd) | Monthly net-foreign |
Beta notice: derived metrics (Pan-Asian Flow Index, Smart Money Score, divergence alerts) require 6–8 weeks of accumulated daily history before activation. Until then only raw daily aggregates are shown.
Data sources
- Yahoo Finance via the
yfinancePython library — daily OHLCV, dividend history, ticker info, forex pairs. - World Bank Open Data — annual CPI (indicator
FP.CPI.TOTL.ZG) and other macro series. Direct HTTP rather thanwbgapi, since the latter aborts on slow-connection partial-JSON responses from our DC IP. - FRED — US macro (Fed Funds, treasury spreads, WTI oil, gold, HY spread) weekly; OECD-sourced monthly CPI (CPALTT01xxM659N) for countries where FRED carries them.
- Exchange-direct scrapers — TWSE, NSE, JPX, HKEX (via ASMX), Bursa Malaysia (via Playwright — the only source that requires a real browser because Cloudflare blocks datacenter-IP HTTP requests), PSE (monthly PDF).
Update schedule
| Data | Source | Frequency | Cron (UTC) |
|---|---|---|---|
| Index levels | Yahoo Finance | Daily | 02:00 |
| Stock prices | Yahoo Finance | Daily | 02:10 |
| Forex rates | Yahoo Finance | Daily | 02:15 |
| Dividend yields | Yahoo Finance | Daily | 02:30 |
| REIT fundamentals | Yahoo Finance | Daily | 02:45 |
| FRED US macro | FRED | Weekly (Mon) | Mon 03:00 |
| Asian monthly CPI | FRED (OECD) | Weekly (Mon) | Mon 05:00 |
| World Bank annual | World Bank | Monthly | 1st 04:00 |
| Real-yield recompute | Derived | Daily | 03:00 |
| REIT metrics recompute | Derived | Daily | 03:15 |
| TWSE foreign flows | TWSE | Daily | 10:30 |
| HKEX highlights | HKEX | Daily | 08:30 |
| Bursa participation | Bursa | Daily | 12:00 |
| NSE FII/DII | NSE | Daily | 14:30 |
| JPX investor-type | JPX | Weekly (Thu) | Thu 08:00 |
| PSE monthly report | PSE | Monthly | 3rd 06:00 |
Quality commitment
- Every metric page documents known limitations in-line.
- Outliers — e.g., REITs with < −60% NAV discount — are flagged rather than shown at face value on summary pages.
- Collector runs are logged in the
data_source_runstable; failures trigger alerts in our internal dashboards. - User-reported errors should be sent via the Contact page with the affected URL and value.