Reference · How the interpreter works

Your strategy is just a config file.

No code runs on your behalf. A strategy is a small JSON object; our engine reads it every 5 minutes and decides whether to simulate a trade. Here's the whole pipeline.

JSON config your strategy Fetch markets every 5 min Apply entry rules signals → match? Simulated fill at the YES ask Settle at expiry real outcome repeats 24/7
The engine runs this loop every 5 minutes, around the clock — against live markets, with simulated money.
01 / THE CONFIG

Five keys define a strategy.

Whether you use the visual builder or write it by hand, every strategy compiles to the same shape. Five top-level keys: where to look, what to look for, when to exit, how much to stake, and which side to take.

strategy.jsonCopy
{
  "platforms": ["kalshi", "poly"],
  "categories": ["weather"],
  "entry": { /* signal fields — see /signals */ },
  "exit": { "at": "expiry" },
  "sizing": { "type": "flat", "amount_cents": 500, "max_concurrent": 5 },
  "side": "YES"
}
platformsWhich exchanges to scan — kalshi, poly, or both.
categoriesThe market families to consider — e.g. weather, crypto, macro. This scopes which anchors are even relevant.
entryThe signal fields that must all be true to trade. This is where everything from the signal catalog goes.
exitWhen to close. In v1 this is "at": "expiry" — hold until the market resolves.
sizingStake and risk caps. Flat $5/trade (500 cents) in v1, with max_concurrent open positions.
sideWhich contract to buy when the rule fires — YES or NO.
Everything is flat $5/trade in v1. So when you see "+$6" on a strategy, that's profit on a $5 stake — not $50. Position sizing beyond flat stakes is on the roadmap; for now, returns are honest about the small base.
02 / THE LOOP

What happens every 5 minutes.

The engine wakes up, pulls the current state of every market on your chosen platforms & categories, and checks each one against your entry rules. A market that passes every signal becomes a candidate.

For each candidate, the engine simulates a buy at the current YES ask — the real, live price, including the spread you'd actually pay. It logs the hypothetical fill, then waits. When the market resolves, it settles the position at the real outcome ($1 or $0) and books the paper P&L.

Fills are simulated at the YES ask, not the midpoint — so the paper P&L reflects the price you'd really have crossed the spread to get. No optimistic mid-fills.
03 / TWO WAYS TO RUN IT

Backtest is research. The leaderboard is proof.

The same config can run two ways, and the difference is everything:

RESEARCH

Backtest

Replays your config against historical data. Instant, repeatable — but hindsight. Easy to overfit.

never on leaderboard
PROOF · 14 DAYS

Out-of-sample

Runs forward against live data that didn't exist when you wrote the rule. Needs 14 days & ≥30 trades.

earning eligibility
PUBLISHED

Live on leaderboard

Once it clears out-of-sample, it's public — browsers can see the stats and unlock the rules.

live & ranked

Backtesting is for iterating fast on an idea; the forward window is what earns trust. We keep them strictly separate — a backtest never appears on the leaderboard, because hindsight isn't evidence.

04 / ALWAYS ON

Your strategy runs 24/7 — you don't have to.

Once published, the engine keeps running your config every 5 minutes against live markets, whether you're watching or asleep. It logs every simulated trade to your dashboard. After 14 days and at least 30 trades, the strategy becomes leaderboard-eligible and can start earning unlock revenue.

Want the exhaustive field-by-field reference — every operator, every default, every edge case? That lives in /docs. This page is the friendly tour; /docs is the spec.

Now write one.

Pick a topic, stack some signals, and the builder generates this config for you.