Every signal, in plain English
A bot on TinyCorp is a plain-English rule plus one or more signals — the pieces of live data it's allowed to form an opinion from. You add them by clicking, with no code. This is the dictionary for all 29 of them: what each one actually is, exactly where its data comes from — the endpoint, the cron job, the table — what it does for your bot, and the catch. Every signal has a catch.
Signals a live bot actually uses
Nine of twenty-nine. These trade today, so they're documented first.
| Signal | Live bots | Refresh | Profile |
|---|---|---|---|
| wx_anchor NWS api.weather.gov | 4 | every 2 min | READ → |
| arb_anchor Kalshi + Polymarket APIs | 3 | live | READ → |
| resolution_anchor our own resolved history | 3 | daily 05:50 | READ → |
| eco_anchor a hardcoded 2026 calendar · both bots out-of-sample | 2 | never | READ → |
| energy_anchor US EIA weekly inventories · the report lands a day after the window its one out-of-sample bot trades in | 1 | daily 16:00 | READ → |
| finance_anchor Yahoo Finance + FRED · the Stooq feed we documented is 404 · bot is out-of-sample | 1 | every 5 min | READ → |
| launch_anchor Launch Library 2 · thespacedevs · its one out-of-sample bot spends 91% of its fills on crypto token launches, not rockets | 1 | every 3 h | READ → |
| sentiment_anchor alternative.me Fear & Greed · the one armed bot is out-of-sample and its gate has never opened | 1 | every 12 h | READ → |
| tropical_anchor NOAA / National Hurricane Center · its one out-of-sample bot filters on a category that does not exist, so it has never traded | 1 | every 3 h | READ → |
Signals we poll but no bot reads
Nineteen. The data is arriving on schedule; nothing consumes it. If you build the first bot on one of these, you're not competing with anything of ours.
| Signal | Live bots | Refresh | Profile |
|---|---|---|---|
| aqi_anchor Open-Meteo — the US Air Quality Index across the same 16 metros as heat_index, from a 45 km weather-chemistry model rather than a monitor (the registry calls the source “undocumented” and is wrong) · the best-calibrated setting we ship — open 27% of hours over four years — and still a coin flip when it fires: checked against 231 EPA monitors it runs 26 AQI points high in exactly the band where it decides, and it slept through two Phoenix dust storms that pegged every monitor in the metro at the top of the scale | 0 | every 3 h | READ → |
| btc_dominance_anchor CoinGecko · Bitcoin’s share of the total crypto market cap · every setting we ship is a constant, and the builder’s default has been unable to open since June 2024 | 0 | every 5 min | READ → |
| crypto_momentum_anchor CoinGecko total market cap · all three thresholds this site recommends were shut 100% of the week we keep — and we delete the data after 7 days | 0 | every 5 min | READ → |
| degree_days_anchor Open-Meteo — a 7-day national heating/cooling-demand forecast across 16 metros (the registry calls this “US EIA” and is wrong) · the premise checks out at r = −0.97 against the EIA’s own gas-storage numbers, but 96% of what the gate reads is the calendar, and Kalshi’s natural-gas markets are invisible to it because our category rule looks for a series called KXNATGAS that does not exist | 0 | every 3 h | READ → |
| ensemble_anchor Open-Meteo — how far apart the 30 GFS ensemble members are on today’s high across 20 cities (the registry calls the source “undocumented” and is wrong) · 70% of what the gate reads is the time of day rather than the weather, because two of the eight daily polls ask the models to forecast a high that has already happened | 0 | every 3 h | READ → |
| funding_anchor OKX perpetual funding rate · the one bot that ever used it traded 12 times in June and lost $12.92 — and the feed has been dead for 52 hours, killed by our own backtest index | 0 | every 30 min | READ → |
| gdp_surprise_anchor Atlanta Fed GDPNow minus the last official GDP print · the only signal here that needs two pollers · most of its movement comes from the number being subtracted, not the nowcast — it opens when LAST quarter was weak | 0 | daily 05:30 + every 5 min | READ → |
| gdpnow_anchor Atlanta Fed GDPNow, via FRED · the running estimate of this quarter’s GDP growth · the thresholds we ship are sensible, but the backtester never applies the gate and the history we store is the end-of-quarter answer, not what anyone could see at the time | 0 | daily 05:30 | READ → |
| heat_index_anchor Open-Meteo — the “feels-like” high over the next 3 days across the same 16 metros as degree_days (the registry calls the source “undocumented” and is wrong: Open-Meteo is missing from its lookup table entirely) · the best-built signal here — 459 of 459 poller runs, zero lock failures, 79% of it is genuinely the weather — but there is no heat market to trade: 0 of 538,368 Kalshi rows mention heat, and every heat-advisory contract in existence is one $80 Polymarket | 0 | every 3 h | READ → |
| injury_anchor ESPN public injury reports, MLB + NBA (the registry calls this “MLB feeds” and is wrong) · the table is never pruned, so 64% of its rows are players who have already recovered — and every baseball market the default setting admits today is admitted on one of them | 0 | every 6 h | READ → |
| lineup_anchor MLB’s own free Stats API — the healthiest pipeline in this dictionary, 302 polls since May with zero lock failures and all 30 team ids correct · but the gate answers per GAME, not per team, so it returns the identical verdict for “will the Phillies win” and “will the Cardinals win” — and the recipe we ship backs the opposing team’s ace exactly half the time | 0 | every 6 h | READ → |
| mlb_conditions_anchor MLB’s own Stats API for two-day reliever pitch counts, plus Open-Meteo for the ballpark — the registry only knows about the first · the fatigue number mostly records whether the team played on both of the previous two days, and on the day the league came back from the All-Star break rested, the gate was shut on every game, because a rested bullpen is stored as NULL | 0 | every 6 h | READ → |
| onchain_fees_anchor mempool.space · Bitcoin’s next-block fee rate · every setting we ship is 10 sat/vB, a level the chain has not reached since December 2024 — and half our samples are currently being lost to our own backtest index | 0 | every 5 min | READ → |
| qpf_anchor Open-Meteo — the rain expected over the next 3 days across the same 16 metros as heat_index (the registry calls the source “undocumented” and is wrong) · Kalshi runs a liquid daily rain market this signal was built for — $5.47M settled in four weeks — and we hold none of it, 0 of 539,344 rows · the per-city number the poller computes and then throws away scores AUC 0.77 against those contracts; the national maximum it keeps scores 0.53 | 0 | every 3 h | READ → |
| sst_anchor Open-Meteo marine — sea-surface temperature at 16 fixed Atlantic points, the ocean heat that fuels hurricanes (the registry calls the source “undocumented” and is wrong) · the only signal in this dictionary to pass an independent check: it agrees with 13 NOAA buoy thermometers to 0.21°C · but the 26.5°C level we ship has been open on 100% of days in August, September and October for four straight years, so it cannot be false during hurricane season — and all 49 hurricane contracts we ingest are about the Pacific | 0 | every 3 h | READ → |
| sports_anchor MLB’s free Stats API + Kalshi’s price + our own 1,789 finished games · the only signal here that gates on a forecast we build ourselves, and the only one that keeps a locked, never-overwritten record of every prediction it has made · marked against that record over 818 games, its probabilities cannot be told apart from a constant that says “home, 53.4%” every time — because the starting pitcher’s ERA carries 3.7× the weight of team strength and is missing from 88.5% of our predictions, since 90% of them are locked at midnight UTC when MLB has published the fewest probable starters | 0 | every 30 min | READ → |
| stablecoin_share_anchor CoinGecko · stablecoins’ share of the total crypto market cap · sold as a “dry powder” gauge, but it tracks the crypto price upside-down at r² 0.99 — and we count 2 of the 416 stablecoins that exist | 0 | every 5 min | READ → |
| wind_anchor Open-Meteo — the strongest wind gust forecast for the next 2 days across the same 16 metros as heat_index (the registry calls the source “undocumented” and is wrong) · Kalshi has no wind market at all, 0 of 12,940 series, and the only three that ever existed were about one mountain in New Hampshire · checked against the gusts that actually blew, a 45 mph gust happened somewhere on 51.9% of the polls when the gate was open and 63.1% of the polls when it was shut | 0 | every 3 h | READ → |
| wiki_attention_anchor Wikimedia’s free Pageviews API — how many people read a topic’s English Wikipedia article today vs its own 30-day norm (the registry says there is no poller and no table; it has both, on cron 11 */3) · the same 1.5× dial demands 0.4 standard deviations from the Supreme Court and 5.6 from Israel, so what fires is the noisiest topic rather than the newsiest — and on the Supreme Court, the topic that trips it most, 48,390 of the 50,315 views in its biggest spike were traffic Wikipedia classifies as automated, while human readers that day were below average | 0 | every 3 h | READ → |
Signals with no scheduled poller
One. The gate code exists; the registry resolves no cron job feeding it. Treat this list with real
suspicion — it has now been wrong three times running, and this is what is left after the
corrections. funding_anchor was on it until its profile was written, and turned out to have a poller
running every 30 minutes all along; the registry had mis-read a regex. sports_anchor came off it on
identical grounds — also a */30 job, also a regex that matched the words "predictive.db" in a
docstring and reported a poller called db. And wiki_attention_anchor has now come off it
too: a poller on 11 */3, a 32-row table, and 397 successful runs on record. Every one of these
was found by reading the crontab instead of the registry. What remains, consensus_anchor, is the one
case where "no poller" was literally true — it computes its number live from two market feeds we already
run, which turns out to be the least of its problems.
| Signal | Live bots | Refresh | Profile |
|---|---|---|---|
| consensus_anchor Kalshi + Polymarket APIs · the blended “fair value” both books imply for the same event — the only signal here with no poller and no table of its own, computed in memory from two feeds we already run · right now 18 of its 18 Fed pairs match one year’s meeting against another year’s, because the matcher keys on the month name and throws the year away — on the flagship “will the Fed hold in September” market that flips the verdict one day in five · and tested two ways, against 107 settled games and 53 meeting-days, the blend is not measurably better than either book on its own | 0 | — | READ → |
New here? What is a signal? ·
Glossary ·
How a bot works
This table is transcribed from quants/signal_registry.py, which derives each row from the anchor
module's own source and the production crontab rather than from anything written by hand — so it can't quietly
drift from what the bots really do. "Refresh" is the cron cadence the registry resolved; "—" means it resolved
none. Verified 2026-08-13. Profiles land one at a time; a signal with no page yet says so rather than
getting a placeholder. All TinyCorp bots trade simulated money.