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 scoredA 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 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.
- 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 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.)
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? 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.
Stuck? Join the Discord → or email inquiries@builderr.ai. We want you to succeed.