Build guide

Build a winning trading agent.

A starting set of strategies, open-source projects, and reading — not a recipe. Skim it, follow whatever clicks, and form your own view. No finance background needed.

← See the challenge spec & how it's scored
90 seconds: build a trading bot from a market thesis — just by talking to your AI.
What you give

A public or private repo URL (or an endpoint), and the orders your decide() returns.

What we never need

No brokerage login, deposits, real money, or API keys — and we never take ownership of your code. It stays yours.

What you get back

An admission result, a robustness profile, and your spot on the live leaderboard.

Your first 30 minutes (zero to an admitted bot)

The whole loop, copy-pasteable. No install, no keys, ~5 minutes to your first admitted bot:

git clone https://github.com/builderr-ai/builderr-trading-template
cd builderr-trading-template
cp baseline.py agent.py     # rename: a valid, admittable bot
python preview.py           # runs locally in ~10s, prints PASS/FAIL
  1. Fork the template and open it. Don't write anything yet.
  2. Rename baseline.py to agent.py — that alone is a valid, admittable submission. Run python preview.py and watch it clear the safety bar in ~10 seconds (no install, no keys).
  3. Now read example_sector_rotation.py— it's the heavily-commented version of exactly the bot most people build (momentum + risk-off). Copy its ideas into your agent.py.
  4. Re-run python preview.py after each change. Green safety bar = very likely admitted.
  5. Push, email the link, done. You can revise any time before the cutoff (~3 days before close) — we run your latest, scored forward from when you send it. Your first try isn't your last.

You do not need an LLM. All 4 reference bots are plain Python with zero API calls — and they all clear admission. Skip the LLM for your first bot; it only adds keys, latency, and ways to fail. You can always add one later.

What's “Calmar”, in one line: return ÷ your worst drop. +10% with a −2% drawdown beats +30% with a −25% drawdown. The goal isn't the biggest bet — it's making money without a deep hole.

What you're optimizing for — and what this is NOT

Forget the Wall-Street, blinking-terminals image. This isn't about speed or trading the most — it's about a calm, risk-adjusted strategy that survives, the kind you'd actually trust with real money.

This is NOT
  • High-frequency or latency-sensitive — decisions are daily, and a 60-second min hold + 50 trades/day cap mean your servers and reaction speed don't matter.
  • “Trade the most” or predict every tick — churning doesn't help you.
  • Max-leverage YOLO — the 1.5× cap auto-flattens you.
  • A spending race — a fixed compute box, no API budget to game.
It IS
  • Ranked by Calmar (return ÷ worst drawdown) — make money without a deep hole.
  • A real strategy: a risk-off switch, sane position sizing, survive the bad weeks.
  • The same data and fills for everyone — the idea wins, not the machine.
  • Robust enough to hold up live, forward, on days no one has seen.

The whole contract, in one function

You implement decide(market_state, portfolio_state, cash) and return a list of orders. You get ~220 trading days of daily bars per ticker; you return [{"ticker": "SMH", "side": "buy", "quantity": 40}]. We run it across hidden historical regimes (admission — a safety screen) then forward-only on live markets through July 2 (the ranking, and the real unseen test).

Fork the template → — it ships with 4 working reference bots you can read, run, and beat.

Building with an AI assistant? Paste the build brief into Claude / ChatGPT / Cursor and describe your idea — it has the contract, rules, and goal baked in.

Not sure what to build? Steal one of these

The blank page is the hard part. Pick a thesis you believe in, paste it into your AI along with the build brief, and you've got a working bot in minutes — then improve it. (Markets move; none of these is a sure thing.)

Ride the AI boom

Bet on the AI / chip names — hold the strongest, step aside if they roll over.

Holds: NVDA · AMD · MU · MRVL · AVGO · SMH

The one rule: Each day, hold the 3–4 strongest by 3-month return — but only while they're above their 50-day average. Otherwise, cash.

Paste into your AI ↓

Write a decide() that each day ranks NVDA, AMD, MU, MRVL, AVGO, SMH by 3-month return, holds the top 4 equally (max 20% each) — but only the ones above their 50-day average; rest in cash.
Buy the market, with a safety switch

Own the index when it's trending up; go to cash when it isn't. Simple — and it dodges the big drops.

Holds: QQQ (or SPY)

The one rule: Hold QQQ when it's above its 100-day average; move fully to cash when it drops below.

Paste into your AI ↓

Write a decide() that holds QQQ when its latest price is above its 100-day moving average, and holds 100% cash otherwise.
Rotate into what's working

Hold whichever sectors are hottest right now; skip the laggards.

Holds: XLK · XLF · XLE · XLV · XLI · XLY · XLP · XLU · SMH

The one rule: Each week, hold the top 3 sector ETFs by 3-month return (equal weight). If none are positive, go to cash.

Paste into your AI ↓

Write a decide() that every 5 trading days ranks XLK, XLF, XLE, XLV, XLI, XLY, XLP, XLU, SMH by 3-month return and holds the top 3 equally — only if positive, else cash.
Play defense when it gets scary

Ride the market in calm times; hide in safe stuff when it drops.

Holds: QQQ → XLP · XLU · XLE + cash

The one rule: Hold QQQ while it's calm and rising; switch to staples / utilities / energy + cash when QQQ falls more than ~5% in a week.

Paste into your AI ↓

Write a decide() that holds QQQ when it's above its 50-day average, but switches to an equal mix of XLP, XLU, XLE and cash whenever QQQ's 5-day return is below -5%.
Lever the calm — carefully

A little leverage only when markets are quiet; dump it the moment they're not.

Holds: TQQQ / QLD + QQQ

The one rule: Small TQQQ/QLD in calm uptrends; drop to plain QQQ/cash when volatility spikes. Keep total leverage under 1.5× and each name under 30%.

Paste into your AI ↓

Write a decide() that holds ~25% QLD + 25% QQQ in calm uptrends (QQQ above its 100-day average, low recent volatility) but sells the leverage into QQQ/cash when volatility spikes. Keep beta-adjusted gross under 1.4x and every position under 25%.

Still not sure which to pick? Drop your idea in the Discord → and someone will help you shape it.

A few things worth knowing

  • Change every parameter ±20%. If performance collapses, you overfit — it won't survive the forward live test.
  • A risk-off switch beats a clever entry. A 50/200-day SMA gate does more for your score than any fancy signal.
  • Size by volatility, not fixed dollars. Cut size as vol rises; lean in (within the 1.5× cap) when calm.
  • Leveraged ETFs decay in chop. TQQQ/SOXL reset daily — tactical only, never buy-and-hold.
  • The prettiest backtest is usually the most overfit. Distrust perfection.
Fork the template + start building →

Stuck? Join the Discord → or email inquiries@builderr.ai. We want you to succeed.