How to use this dashboard
- Add a watchlist entry with the green "+ Add" button. Required: ticker, market, target buy price. All else optional but recommended.
- Update prices four ways:
- ⚡ Refresh All (recommended) — single button, top of the table. Uses Finnhub for US/ETF (live, requires free key — paste it in the yellow banner) and Stooq for SG/JP/HK/UK (close prices). One click does everything.
- Per-row ⚡ or ⇣ — click the lightning bolt for live US refresh via Finnhub, or ⇣ for Stooq close on non-US.
- Manual — click ✏︎, edit the current price, save. Reinforces deliberate review.
- Bulk CSV import — paste your broker's price export. See the sample file
10_Watchlist_Sample.csv.
- Data source setup:
- US tickers use Finnhub (free, 60 calls/min). Get a key at finnhub.io/register and paste into the yellow banner.
- Non-US tickers (SG/JP/HK/UK) use a Yahoo Finance proxy you deploy on Cloudflare Workers (free, 100K req/day). One-time 10-min setup — see
15_Yahoo_Worker_Setup.md. Paste your Worker URL into the green banner. - All keys/URLs live in this browser's localStorage only — they never leave your machine except in API calls to the respective providers.
- If neither is set up, the dashboard falls back to Stooq (close prices only).
- Status colors: AT TARGET price ≤ target buy · NEAR within 10% above target · WAIT more than 10% above · NO TARGET not set.
- Stale data warning: if last update is older than 7 days, the row dims and shows stale. Refresh the price.
- Persistence: the dashboard auto-saves to your browser's local storage. For portability across machines, use Save/Load JSON to keep a master copy in your Finance Trading folder.
- Charts: click 📈 to open TradingView for that ticker in a new tab.
📖 Column reference (formulas, sources, signals)
| Column | Source | Formula / meaning | Color signal |
|---|---|---|---|
| Identity & classification | |||
| Ticker | Manual | Stock symbol as you'd enter it on Yahoo / Finnhub | — |
| Company | Manual / auto | Long name. Hover the cell to see your free-text notes for that row. | — |
| Mkt | Manual | Listing market — drives symbol mapping and routing: US / SG (.SI) / JP (.T) / HK (.HK) / UK (.L) / ETF | — |
| Sector | Manual / auto | GICS-style sector. Auto-filled from Finnhub profile if blank. | — |
| Themes | Manual | Comma-separated mini-tags for cross-cutting themes (AI-Power, Defense, Inflation-Hedge, etc.) | — |
| Tier | Manual | 1 = highest conviction, 2 = strong, 3 = starter / cyclical. Drives MOS and drawdown thresholds. | — |
| Signal columns | |||
| Act | Computed | Composite buy strength. Counts how many of {Method A, B, C, 52w-low proximity within 10%} flag buy. Hover the badge for breakdown like A✓ B✓ C✗ 52w✓. | ★ STRONG 3+ · BUY 2 · WATCH 1 · wait 0 |
| Current | Live | Current price. Finnhub for US/ETF, Yahoo Worker for non-US, Stooq close as fallback. | — |
| Three target methods | |||
| Tgt A | Computed | Multiple-anchored: forward_EPS × peMedian × (1 − MOS_by_tier). Self-adjusts as analyst forward EPS revises. Needs forwardPE from Worker v2 + manual peMedian. | Cell color = distance from current to this target |
| Tgt B | Computed | 52-week drawdown: 52w_high × (1 − drawdown_by_tier). "Buy on a 25–40% pullback from peak" rule. | Cell color = distance from current |
| Tgt C | Manual | Manual: your targetBuy set in the edit modal or imported from CSV. Highest-conviction override. | Cell color = distance from current |
| 52-week range (price + % from current) | |||
| 52w Lo | Live | Shows the 52-week low price + percentage current sits above it: (current − 52w_low) / 52w_low × 100 | Green at low (within 3% → bright green) — buy zone |
| 52w Hi | Live | Shows the 52-week high price + percentage current sits below it: (current − 52w_high) / 52w_high × 100 (negative) | Red near high (within 2% → bright red) — take-profit zone |
| Fundamentals | |||
| Div Yld | Live | Indicated annual dividend yield % (Finnhub dividendYieldIndicatedAnnual) | — |
| P/E | Live | Trailing twelve-month P/E (Finnhub peTTM) | — |
| P/E Fwd | Live (Worker v2) | Forward 12-month P/E from Yahoo summaryDetail.forwardPE. Needs the v2 Worker code. | — |
| Gross Mgn | Live | Trailing gross margin %. Empty for utilities / banks / REITs (no clean COGS line). | — |
| Mkt Cap | Live | Market capitalization in compact form ($1.5T / $345B / $12.3B) | — |
| Debt/Cash | Live (Worker v2) | totalDebt / totalCash from Yahoo financialData. Lower is safer. | — |
| Curr R | Live | Current ratio = current assets / current liabilities. Empty for banks / insurance. | — |
| BS R | Manual | Balance Sheet Ratio — define per your own preference (e.g., assets/liabilities, equity/debt) | — |
| Risk-reward indicators | |||
| Reward | Computed | (52w_high − current) / current × 100 — % upside if price returns to its 52-week high | — |
| R/R | Computed | Reward ÷ |Risk|, where Risk = (current − 52w_low) / current × 100. Higher = more upside per unit of downside. | — |
| Calendar & metadata | |||
| Earn | Live (Finnhub) | Next earnings report date. Auto-fetched per ticker on Refresh All (smart-cached 7 days). | Yellow within 14 days · red within 3 days |
| Updated | Computed | Last refresh timestamp. | Row dims if > 7 days old (stale) |
MOS / drawdown thresholds by Tier (Methods A and B)
| Tier | Method A — MOS off implied fair value | Method B — drawdown off 52w high |
|---|---|---|
| 1 — highest conviction | 20% | 25% |
| 2 — strong conviction | 28% | 30% |
| 3 — starter / cyclical | 40% | 40% |
| No tier set | 30% | 30% |
All thresholds are encoded in the dashboard JS (mosByTier, drawdownByTier) — change them there if you want different defaults. Manual peMedian values come from the imported CSV; refine them in the edit modal as you do deeper research.
| Ticker | Company | Mkt | Sector | Themes | Tier | Act | Current | Tgt A | Tgt B | Tgt C | 52w Lo | 52w Hi | Div Yld | P/E | P/E Fwd | Gross Mgn | Mkt Cap | Debt/Cash | Curr R | BS R | Reward | R/R | Earn | Updated | Actions |
|---|