SET1,491.01-1.07% · 2026-11-03VIX19.42026-10-30SOURCECACHENOT REAL-TIME
DATED SNAPSHOTS

Labs

Choose an experiment. Each entry states whether it is working, a prototype, or still an idea.

What the status labels mean

Shipped: works end to end. Prototype: implemented with limited scope. Idea: described but not built. These are experiments, not investment advice.

The Confusion Matrix

SHIPPEDOpen →
Details
What it does
Honest backtest of the signal system. For every confluence event in our history, did the next 30 days actually deliver the direction the signal implied? True positives, false positives, win rate, and a confusion matrix. The system stands or falls by the numbers — no marketing.
Data
anomaly.confluence + prices.json — same as the PARLOR but with an outcomes overlay.
Difference
Most signal services never publish their track record. We do. If the numbers are embarrassing, the numbers stay.

When the signal system said STRONG BUY, how often was it right? Most tools never tell you.

The Consensus

SHIPPEDOpen →
Details
What it does
Every forward-looking signal on the desk — Forward View, Kronos, Mr. Market Mood, Market States, and (when on) Polymarket — votes BULL, BEAR, or abstains. Votes are bucketed by horizon (now / 20d / 60d / 90d / event) so a 20-day forecast cannot cancel a 90-day baseline. Each horizon gets a verdict, a confidence, and a roll call of who voted what.
Data
forward-view.json (90d) + kronos-signals.json (20d) + market-mood.json (now) + market-states.json (now) + /api/belief (event). One function, one output, no fetching.
Difference
Most dashboards either show every signal on the same chart (the user has to weight them) or they pick one. This gathers them, weights them, and surfaces the disagreement honestly — the cautionary note names any high-weight dissenter. A unanimous 2-vote verdict and a unanimous 5-vote verdict look the same on a chart; here they don't.

Seven signals say seven different things. What does the desk actually think?

Personal Finance Copilot

PROTOTYPEOpen →
Details
What it does
A guided single-page companion for someone who has never invested. Takes income, monthly surplus, target retirement age. Returns: a one-paragraph recommendation, a bucket split (cash / feeders / dream-trades), and the next concrete action this week.
Data
Plan wizard logic + savings rate + goal ladder (we already compute it on /plan).
Difference
Not a screener, not a backtest. A 'where do I start' companion. No jargon unless you turn it on.

I have ฿X a month. Help me start — without the spreadsheet.

Graham's Net-Net

PROTOTYPEOpen →
Details
What it does
Graham's 1934 'cigar butt' screen: a stock is interesting when the price is below net current asset value per share (cash + receivables, minus all liabilities). Live filter for SET names currently meeting the bar, with the discount % shown honestly.
Data
ncavPerShare, ncavDiscountPct (already in MOCK_STOCKS, see src/lib/graham.ts).
Difference
Most Graham screens start with P/E or P/B. This one starts deeper: with the working capital itself.

Stocks trading below the cash on their books — Graham's most extreme test.

Confluence Tracer

PROTOTYPEOpen →
Details
What it does
Replays every historical moment a SET ticker triggered a 3+ family confluence. Shows the next 30 trading days of price action, side by side with the SET baseline. Honest about the win rate, the average move, and the worst drawdown.
Data
anomaly.confluence + prices.json. We already build this graph for /signals; this lab shows the post-event window.
Difference
Most 'signals' tools show the trigger and stop. This one shows the outcome — even when the outcome is uncomfortable.

What happened the 30 days after the bell rang? Replay the moment 3+ signals aligned.

Pairs Trade Finder

PROTOTYPEOpen →
Details
What it does
Finds pairs of SET names with high historical correlation that recently decoupled. The 'break' is the moment a relationship snapped — sometimes mean-reverting, sometimes a regime change. Outputs a ranked watchlist with the current correlation vs the 90-day baseline.
Data
rolling correlation on prices.json (we compute it for the signal web).
Difference
Most correlation tools show 'current correlation.' We show the BREAK — the moment a relationship snapped, and which way it went.

Two names that always moved together — until they didn't.

The Magic Formula (Thai Edition)

PROTOTYPEOpen →
Details
What it does
Ranks SET50 by Joel Greenblatt's 2006 'Magic Formula' — first by earnings yield (cheap), then by return on capital (good business). The top 5-7 names are the candidates. Pure orthogonal to the Graham shelf.
Data
pe, roe, marketCap — already aggregated by magicFormulaRanks() in graham.ts. We just need the UI.
Difference
Not a Graham value screen (we already have that). Greenblatt's complement: cheap AND good, ranked, not picked.

Greenblatt's two ranks on SET50 — earnings yield × return on capital. Not Graham. A complement.

The Sushi Conveyor

PROTOTYPEOpen →
Details
What it does
A live tape of SET names whose defensive score (Graham's 7-criteria binary test) is currently 7/7. As prices move, names enter and leave. The conveyor is the watchlist the defensive investor never has to think about.
Data
defensiveScore (0–7), already in MOCK_STOCKS via defensiveScore() in graham.ts.
Difference
Not a screener snapshot. A LIVE list — names enter and leave as their defensive tests change day to day.

Real-time list of names currently meeting all 7 of Graham's defensive tests.

Mr. Market's Diary

PROTOTYPE
Proposal
What it does
A deterministic template that turns today's mood score, the active confluence list, and the top signal into a 200-word first-person paragraph from Mr. Market's perspective. Not a chatbot — a voice grounded in real numbers, refreshed at the same cadence as the data.
Data
market-mood.json + signal web state + the top confluence subject. The voice never invents — every claim is grounded in one of those three sources.
Difference
Not a chatbot. A voice that only knows what the data knows — and a click on any sentence shows you which number it's grounded in.

A daily first-person voice for the market — built from the actual mood + signal data.

The Counterfactual Engine

IDEA
Proposal
What it does
The structural breaks in SET's price history are dated. Roll back to the day before a chosen break, replay the model forward, and the chart shows ACTUAL vs COUNTERFACTUAL paths. Honest about the limits: structural breaks are detected, not caused, so the counterfactual is a 'what if no shock' world, not a 'what if no cause' world.
Data
structural breaks timestamps + prices.json + the drift model. We have the breaks; we have the model; we don't have the engine yet.
Difference
Most 'what if' tools are made up. This one would use the real breaks we already detect. The honest version says what it can't do.

What would SET be doing today if [event] hadn't happened?

Backtest & source diagnostics
LIVE DATA FEED

Three macro readings refreshed by the labs ingestion script — API where one exists, scrape where it does not. Missing is labeled missing.

2/3 live · refreshed 2026-07-20

US SHILLER CAPE
41.5 x
+144% vs ~17 median
LIVE · Jul 17, 2026
multpl.com/shiller-pe (scraped table)
SET INDEX
1,639 pts+0.23%
LIVE · 2026-07-17
yfinance ^SET.BK
CNN FEAR & GREED
— MISSING
MISSING
feargreedchart.com → CNN dataviz — HTTPSConnectionPool(host='api.feargreedchart.com', port=443): Max retries exceeded with url: /v1/fgi (Caused by NameResolutionError("HTTPSConnection(host='api.feargreedchart.com', port=443): Failed to resolve 'api.feargreedchart.com' ([Errno 8] nodename nor servname provided, or not known)")); CNN: 418 Client Error: Unknown Error for url: https://production.dataviz.cnn.io/index/fearandgreed/graphdata
MR. MARKET'S DIARY · PROTOTYPE

Bangkok closed up 0.23% — I am pricing Thailand at 1639. Long-run US earnings are priced at 41.5× their decade average (+144% vs the ~17 median).

  • SET close: 1,639
  • Shiller CAPE: 41.5
SHIPPED · HONEST

THE HONEST BACKTEST

0 events · Z ≥ 2.5σ · 30D
WIN RATE0.0%
PRECISION0.0%
RECALL0.0%
CONFUSION MATRIX
ACTUAL · UP
ACTUAL · DOWN
SIGNAL
0
TP
0
FP
0
FN
0
TN

FN/TN not modeled in this single-class version — precision/recall computed on the signal set only.

30-DAY RETURN DISTRIBUTION
0
<-20%
0
-20%..-10%
0
-10%..0%
0
0..+10%
0
+10%..+20%
0
>+20%
EVERY EVENT · THE OUTCOME
SUBJECTDATEZFAM30DHIT
WHAT THESE NUMBERS SAY — AND DON'T
  • Z-threshold: 2.5σ · 30-day window · move threshold: 2.0%
  • 0 confluence events met the bar across the backtest window
  • TN/FN not modeled — single-class precision/recall on the signal set
  • Live data sources may yield different results
  • If the numbers embarrass the thesis, the numbers stay.
Research catalogue
THE ARMORY · THE FAMOUS REPOS, TRIAGED

The internet keeps a viral list of tools that promise an edge. We studied it. 4 run on this desk today, 10 were refused with reasons, 1 waits on the shelf. Stars measure fame, not skill — the model with 32,000 of them last went 59 for 95 on its Thai exam.

KronosON THIS DESK
shiyu-coder/Kronos · Foundation model for candlesticks — 45 exchanges, AAAI 2026

Runs on this desk zero-shot over SET names — and gets graded in public. Its latest exam came back 59 for 95 on direction. We keep running it because the grading is the product, not the forecast.

WHERE IT RUNS → /forecast
vectorbtON THIS DESK
polakowo/vectorbt · Vectorized backtesting — thousands of variants in seconds

Powers the Strategy Lab's parameter sweeps — the full EMA/RSI/Bollinger grid, Sharpe heatmaps included. Speed is honest work; any claim it produces still has to face the 26-year ledger.

WHERE IT RUNS → /labs
BacktraderON THIS DESK
mementum/backtrader · Event-driven backtesting with realistic order mechanics

Its fill engine — slippage, volume caps, stop and bracket orders — is what makes our simulator's fills realistic instead of flattering. A paper trade that fills perfectly teaches a lie.

WHERE IT RUNS → /simulate
Polymarket APION THIS DESK
Polymarket/gamma-api · Read-only odds from the largest real-money prediction market

Real-money odds on the Fed and the recession — the price of belief, read every 15 minutes with source and age attached. We display prices; we never trade them.

WHERE IT RUNS → /events
TradingAgentsREFUSED
TauricResearch/TradingAgents · Multi-agent LLM framework — AI personas debate trades

Five AI personas debating produce confident prose, not a measurable edge. An opinion you cannot grade is not a signal — our web traces measured correlations instead, and our one language surface (Ask Non) answers questions, not markets.

FinRLREFUSED
AI4Finance-Foundation/FinRL · Deep reinforcement learning for trading

Reinforcement learning on a few thousand noisy bars memorizes the past and calls it policy. Ruled out once in our modeling roadmap; the grade Kronos just earned is a reminder of why the bar is high.

FreqtradeREFUSED
freqtrade/freqtrade · Crypto trading bot — build, backtest, deploy

An execution engine for a game this desk teaches you not to play. A live exchange key in a beginner's hands is risk without evidence — the simulator teaches the same lessons with zero blast radius.

HummingbotREFUSED
hummingbot/hummingbot · Automated market making and arbitrage

Market-making spread is rent collected for carrying inventory risk against faster players. A saver's edge is patience, not latency — this is someone else's business, professionally.

CCXTSHELVED
ccxt/ccxt · One API for 100+ crypto exchanges

Good engineering with no current job here: we read crypto prices from Yahoo and trade on no exchange. The day this desk needs deeper crypto OHLCV, it is a data dependency — not before.

NautilusTraderREFUSED
nautechsystems/nautilus_trader · Institutional-grade algorithmic trading platform

Sub-millisecond latency solves a problem nobody on this desk has. Institutional plumbing without an institutional edge is cosplay — the costume is expensive and the market does not care.

OpenAliceREFUSED
openalice (AGPL) · "Your one-person Wall Street" — an AI agent that trades for you

The sales pitch is the tell: an agent that reliably made money would not need a viral reel promising it. Full-spectrum autonomous execution across five asset classes is five ways to lose money unattended — and the accountability stays yours.

FinceptTerminalREFUSED
Fincept-Corporation/FinceptTerminal · Open-source Bloomberg — 100+ sources, 37 investor-framework agents

Its one good idea — the great investors' frameworks as lenses on a stock — already lives here as the Theory Atlas and the consensus verdict, with tests. The other 36 agents are decoration, and a desktop terminal is the wrong body for a phone-first desk.

AutoHedgeREFUSED
The-Swarm-Corporation/AutoHedge · "Build your autonomous hedge fund in minutes" — agent swarm on Solana

Two contributors, zero human involvement, real execution. "Zero human involvement" is the bug being sold as the feature — a hedge fund is a liability structure and a risk desk, not a prompt.

Vibe TradingREFUSED
vibe-trading · 29 AI agent teams debate a plain-English strategy, export to TradingView

"Build and sell quantitative strategies without a quant team" — the product is selling unvalidated strategies, not trading them. Twenty-nine debaters converge on confident consensus, and consensus without a graded track record is the exact thing this desk was built to refuse.

LumibotREFUSED
Lumiwealth/lumibot · Build, backtest and deploy strategies to brokers

A thinner backtesting engine with a live broker attached. We already carry the better half of that sentence — and the desk does not attach brokers to beginners.

triage 2026-08-03 · a tool earns its place by being measurable here, not famous elsewhere

DAY2