Bot Lab/Overview

Your bot earns a leaderboard row

Paper trading API, risk-graph signals, and 23 open-source reference bots. Sub-accounts are real trader identities — fork the code, attach your key, experiment without capital at risk.

Reference bots
23
Open source
MIT
API routes
19
Zero risk
Paper

New here?

You need a Marketry account first. Request access → Then follow the four steps below.

Architecture

Sub-account

Leaderboard identity

API key

mkt_live_…

@marketry/sdk

Typed client

Signals

Risk graph context

Order

Paper match

Onboarding

Four steps to your first trade

  1. 01

    Create a sub-account

    In Founder Portfolio, add a named bot trader. Each sub-account gets its own leaderboard row — not your master invite.

    Open Portfolio →
  2. 02

    Copy your API key

    Keys start with mkt_live_ and are shown once at creation. Grant view + trade for most bots.

    Create key →
  3. 03

    Install & configure

    Clone the monorepo, npm install, and set MARKETRY_URL + MARKETRY_API_KEY in your shell or .env.

    SDK setup →
  4. 04

    Run hello-trade

    Place your first paper order, then verify cash and positions in Portfolio.

    Run tutorial →

Why Bot Lab

Your bot is a trader identity

Sub-accounts appear on the leaderboard with their own P&L — not a hidden script.

Signals encode the risk graph

snapshotDelta, neighborSignal, and clusterRiskScore — context you can't get from raw order books alone.

Fork Atlas, not example #7

23 named reference bots in packages/bot-lab (MIT). Copy momentum.ts, swap your key, ship.

Paper first, always

Limit orders, matching engine, settlements — full loop with zero capital at risk.

Minimal working client

Picks the top active market — same pattern as hello-trade. Uses createClientFromEnv() and typed errors.

Full quickstart →
typescript
1import { createClientFromEnv, isMarketryError } from "@marketry/sdk";2 3const client = createClientFromEnv();4 5// Pick the top active market — same pattern as hello-trade6const [market] = await client.markets.list({ status: "active", limit: 1 });7if (!market) throw new Error("No active markets");8 9const price = Math.min(0.65, market.probability + 0.02);10 11try {12  const order = await client.orders.create({13    marketId: market.id,14    outcome: "yes",15    price,16    quantity: 5,17  });18  console.log("Filled on:", market.title, order);19} catch (e) {20  if (isMarketryError(e)) {21    console.error(e.status, e.message);22  }23  throw e;24}

Reference fleet

Start with Atlas

All examples →

Atlas

Core
momentum

Snapshot velocity

Trades YES when probability is rising across snapshots; NO when falling.

Signal inputs

snapshotDeltaprobability

strategies/momentum.ts

Nova

Core
graph

Graph neighbor consensus

Fades local price vs graph neighbor consensus.

Signal inputs

neighborSignalgraphCentrality

strategies/graph-alpha.ts

Cipher

Core
book

Order-book imbalance

Quotes when book imbalance favors one side.

Signal inputs

bestYesBidspreadopenInterest

strategies/book-imbalance.ts

Orbit

Core
horizon

Event-horizon urgency

Increases urgency as resolution approaches.

Signal inputs

daysToEndprobability

strategies/horizon.ts

Forge

Core
sector

Sector rotation

Rotates into sectors trading below sector average.

Signal inputs

sectorAvgProbprobability

strategies/sector-rotation.ts

Pulse

Core
flow

Volume acceleration

Chases volume acceleration.

Signal inputs

volumeDeltavolume

strategies/flow-chase.ts

Each bot maps to signal fields — see Signals reference.