Reference

Methodology.

How everything on TinyCorp Signal is computed — how a bot is backtested, how a signal decides whether to trade, and where every price comes from. The rule we hold ourselves to: every number on the site is either a real backtest result or a settled market outcome. Nothing is illustrative. If you find a mistake — in the math, a source, or a number we publish — tell us; we log the correction in public.

How a bot works

A bot on TinyCorp Signal is just a set of plain-English rules — there is no code to write. You pick:

  • a market — a prediction market (Kalshi or Polymarket) or a stock-options contract;
  • a side and an entry — what to buy, and at what price or strike;
  • signals — optional gates that must be true before the bot trades (e.g. “only when VIX is below 15”);
  • an exit — when to close, at expiry or on a rule.

Those rules then go through three honest stages:

  1. Backtest. We replay your exact rules over real historical prices and show what they would have done.
  2. Turn it on. Flip the bot live — still simulated; no real money is ever at risk.
  3. Forward paper-trade. An always-on engine trades the bot going forward on live data, so you see how the same rules behave out-of-sample.
All simulated Every bot trades paper money. We never place a real order, hold customer funds, or give financial advice. TinyCorp Signal is a research sandbox for testing trading ideas, not a brokerage.

The backtesting engine

A backtest replays your bot one day at a time across historical data:

  • On each trading day, the engine checks whether your signals pass. If any gate fails, the bot sits out that day.
  • When the gates pass, the bot enters at the real recorded price for that day — never a made-up or favorably-rounded price.
  • The position is marked and settled against the real outcome — a prediction market’s settlement, or an option’s value at expiry.
  • The day’s profit or loss is added to a running total.

No look-ahead. A signal can only use information that existed on the day it fires — a 5-day momentum reading on June 10 uses June 5–10, never anything after. When the data a day needs is missing, the engine skips that day honestly rather than inventing a fill.

Reading the equity curve The chart in the builder is that running total — cumulative paper profit & loss, trade by trade, over the test window. It is not a price chart of the stock. The dashed line at $0 is break-even: above it the strategy is ahead, below it the strategy is behind. That $0 line is the “baseline” — the account starts flat, and the curve is everything the rules earned or lost from there.

The signal library

Signals are the optional gates that decide whether a bot trades. Each is written in plain English and added with a click — no formulas to type. There are 40+ signals for prediction-market bots and 15 live signals for stock-options bots, with new ones shipping regularly.

A signal carries a live badge once it actually filters the backtest, or a soon badge while it is still being wired in — we never let a signal claim to work before it does. Every options signal is verified against a real backtest (it must change the trade set in the documented direction) before it goes live.

The 15 live stock-options signals

SignalOnly enters when…
Volatility — is the option cheap?
VIX belowThe market’s fear gauge (VIX) is below your level — i.e. calmer markets.
Realized vol belowThe stock’s 20-day realized volatility is below your level — a quieter stock.
Realized-vol rank ≤Today’s volatility is cheap versus the stock’s own past year (a low vol-rank).
Vol above SPYThe name is moving more on its own than the market is (idiosyncratic vol).
Garman-Klass range vol ≤Range-based volatility (using the day’s high & low) is low — cheaper options.
Compression — coiled before a move
ATR% range ≤The daily range is compressed versus the last 60 days (coiled).
Vol squeeze ≤A Bollinger-band “squeeze” — the bands are unusually tight, which often comes right before a big move.
NR7 range rank ≤A “narrowest range in 7 days” bar — a tight day that often precedes a breakout.
Trend & momentum — which way?
5-day momentum >The stock has risen at least this % over the last 5 days (riding momentum).
Above 50-day MA byPrice is at least this % above its 50-day moving average (a short-term uptrend).
Above 200-day MA byPrice is above its 200-day moving average by this % (a long-term uptrend).
Beats SPY (20d) byThe name is beating the S&P 500 by at least this % over 20 days (relative strength).
RSI(14) ≤RSI(14) is at or below your level — i.e. the stock is oversold.
ADX(14) ≥The stock is in a strong trend, not chop — ADX measures trend strength.
Off 52-week high ≤Price is within this % of its 52-week high (near the highs / breakout zone).

The full, searchable catalogue — including the prediction-market signals — lives on the signal library.

Stock-options engine

Options bots trade real listed contracts in simulation. The historical data is Alpaca’s daily option bars, covering 20 liquid underlyings — broad ETFs (SPY, QQQ, IWM…) and large-cap single names — on every trading day since 2024. For each entry the engine:

  • picks the contract by your rule — a call or put, a strike (e.g. 3% out-of-the-money), and an expiry window (e.g. 7–30 days out);
  • enters at that contract’s recorded closing price;
  • holds to your exit — expiry, or an engine rule;
  • settles at the option’s intrinsic value at expiry — what the contract is actually worth.

Sizing is in contracts per trade, not dollars. An option can cost many times what a one-dollar prediction-market contract costs, so a fixed dollar stake would be misleading — you choose how many contracts each trade buys.

The implied-volatility signals (vol-rank and its siblings) need an implied vol for every historical day. We derive it by inverting the Black–Scholes formula on the option closes we already store — the same number, computed the same way, in both the backtest and the live forward engine, so the two stay consistent.

Size can’t buy rank The options leaderboard ranks bots by profit per contract. Buying more contracts scales a bot’s raw P&L but not its rank — so a bot can’t climb the board just by trading bigger.

Forward paper-trading

A backtest is in-sample: it scores rules against history those rules can already see. The forward engine is the out-of-sample check. When you turn a bot on, an always-on process trades it going forward on live data — it opens a position when your gates pass, marks it each day, and settles it at expiry, exactly as the backtest would.

Same rules, prices nobody has seen yet. A bot’s backtest record and its forward record are shown side by side on its page, so you can judge for yourself whether the backtest holds up once it has to face the future.

Data sources

Where every price and settlement comes from. We don’t take revshare from these platforms and we don’t resell their data. Market data — prices and orderbooks — is used only to settle and price trades, never to model an outcome.

SourceWhat we use it forRefresh
Kalshi public API Prediction-market metadata, orderbook, and settled outcomes — what weather, econ and sports bots trade and settle on. 15–60 s
Polymarket gamma-api Cross-platform prediction markets and their settled outcomes. ~60 s
Manifold REST Market data we read for breadth only. We never trade Manifold — no bot has ever placed a simulated trade there. ~60 s
Alpaca Market Data Historical and live option bars, quotes and greeks for the stock-options engine (20 underlyings). daily bars · live quotes intraday
FRED (St. Louis Fed) Macro series behind the economic signals — GDP nowcast, the 2s10s yield curve, jobless claims and more. per release
NWS CLI + METAR Authoritative settlement values and observations for the weather edge model (below). minutes–hours

Weather edge model

Alongside the bots, we run a forecasting model for daily-temperature markets. It exists to answer one question: what will a city’s high or low actually settle at?

  • Settlement source. Every weather market on Kalshi settles on the NWS CLI (the daily climate report). That exact document is our ground truth — we never grade against anything else.
  • Sub-hourly peaks. We read the METAR RMK 6-hour groups, which capture max/min temperatures at finer precision than the hourly observations and catch peaks the hourly feed misses.
  • Bias correction. Raw NWS gridded forecasts pass through a per-city bias table (nws_bias.json) built from 1,278 city-days of resolved settlements (May–Nov 2025). The table used at forecast time is frozen with the forecast and never recomputed after the fact.
  • City tiers. Each station is graded on its own track record. In the most recent backtest (391 city-days) the model was within ±1°F 99% of the time, mean bias −0.04°F. Tier-1 stations forecast cleanly enough for narrow brackets; Tier-2 stations get a more conservative read.

No fabricated data

This is the rule the whole site is built around, so it’s worth stating plainly:

  • Every performance number is a real backtest result or a settled outcome. We don’t show illustrative returns, “representative” equity curves, or sample trades that didn’t happen.
  • When data is missing, we skip. We never fill a gap with an invented price to keep a streak alive.
  • Nothing is retroactively edited. A forecast or a backtest is scored against what actually settled — not a number we wish we’d published.
We audit our own claims In June 2026 we swept the entire site and replaced or removed every illustrative figure left over from early prototypes. If a number is on the page, it came from a real backtest or a settled market. See the corrections log below.

Corrections log

When we ship a fix that affects published numbers we log it here. Older entries are in the repo history.

  • 2026-06-19. Site-wide fabricated-stat sweep — every illustrative figure left from early prototypes (builder previews, demo P&L, stale teasers) was replaced with live backtest data or removed.
  • 2026-06-14. Retired the /calibration scoreboard: it wasn’t backed by a live, audited dataset. The route now redirects here and the methodology was rewritten to honest definitions.
  • 2026-05-04. Weather: cache-first observation reader; a new nws_observations table backs the source cascade so a flaky NWS API doesn’t drop us to FAA-only.
  • 2026-04-21. Weather: v3 backtest re-derived the city tiers from 391 city-days of resolved settlements.
  • 2026-04-18. Weather: Dallas observations routed to KDFW because Kalshi settles at DFW, not Love Field — the map and the settlement station now agree.
Found something wrong? Email team@tinycorp.ai with the page URL and the value you think is off. We answer every methodology bug.