Build guide
Build a winning trading agent.
Round 2 is live. Beat Arnav, the Round 1 winner, to unlock the $1,000 prize pool and builder points. No finance background needed.
← See the challenge spec & how it's scoredArnav won Round 1. Read the public breakdown of his algorithm before you build: leader momentum, regime control, stops, and sizing →
A public or private repo URL (or an endpoint), and the orders your decide() returns.
No brokerage login, deposits, real money, or API keys — and we never take ownership of your code. It stays yours.
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
- Fork the template and open it. Don't write anything yet.
- Rename
baseline.pytoagent.py— that alone is a valid, admittable submission. Runpython preview.pyand watch it clear the safety bar in ~10 seconds (no install, no keys). - 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. - Re-run
python preview.pyafter each change. Green safety bar = very likely admitted. - Push, email the link, done. You can revise up to 4 times before the cutoff (~3 days before close) — we run your latest, scored forward from its first scored market session. 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.
How you win, in one line: the best return over your live window — but you can't get there by gambling, because admission caps how much you borrow and how much rides on any one stock. The goal isn't the biggest bet, it's making real money that survives.
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 strategy that makes real money and survives, the kind you'd actually trust with real money.
- 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.
- Ranked by return over your live window — and admission caps leverage and concentration, so it's not a gambling race.
- 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}]. Hidden validation checks qualify the bot first; then Round 2 is scored on live market data.
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.)
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.
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.
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.
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%.
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? Email inquiries@builderr.ai.
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.