CODE. TRADE. LEARN.
Build a bot.
Trade with
virtual money.
Your Python code decides when to buy and sell. We run it in a simulated market. Your goal: finish each round with the most profit after costs.
- 1Start with working code
Download the starter kit. You can upload the example before changing anything.
- 2Upload one Python file
We run your bot on our server. You do not need to set up a server or keep this page open.
- 3Watch, learn, improve
See your trades and profit. Update your code during a round or in the review break.
YOUR TEAM'S DASHBOARD
Get ready for your first round
Your organizer controls when each round starts.
YOUR PROFIT / LOSS
—Estimated value after trading costsCASH AVAILABLE
—Cash alone is not your scoreCOMPLETED TRADES
—Trading fees —YOUR BOT
Not startedUpload a Python file firstNEXT ROUND PREVIEW
Your next round
What's new?
What should I do?
Optional features & costs
Starting money, trading fees and limits
These are the published rules for this round. Trade prices, signals and your account arrive through the SDK; they are not forecasts shown on this card.
YOUR CODE → OUR SERVER
Upload your trading bot
- Download the starter kit (Code → Download ZIP).
- Open
competitor_strategy.py. The example works as-is; edit theStrategyclass when you are ready. - Choose your
.pyfile below and upload it. Check the confirmation message.
What happens after I upload?
Before a round, the file is saved and your bot starts when the organizer starts trading. During a round, your old bot keeps running while we start the new one. If the new one cannot start, the old one stays active.
Your cash, holdings and waiting orders carry over to a successful update. Python variables restart, so use the SDK's current account data instead of assuming you have an empty account.
Only this file is uploaded. The server includes the SDK, NumPy and pandas, and your bot has no internet access. Your laptop can disconnect after uploading.
Coordinate with teammates: the latest successful upload becomes your team's selected version.
Prefer a terminal? Upload with the API
Set UWTC_API_KEY to the key from your team email, then run this from the folder containing your strategy. Keep the key out of Git and AI prompts.
curl --fail-with-body \ -H "X-API-Key: $UWTC_API_KEY" \ -F "file=@competitor_strategy.py" \ https://competition.atcuw.org/team/strategy
This saves or replaces the bot exactly like the upload button. See API details and alternative ways to run your bot ↗
HOW YOUR BOT IS DOING
Your profit over time
Positive means a profit; negative means a loss. The estimate accounts for what your holdings are worth and deducts fees and paid upgrades. The final result is confirmed when the round ends. This chart records samples while the page is open.
What you hold
Only your team can see thisThese are your positions. A positive quantity means you own shares. A negative quantity means you sold borrowed shares (a short position) and benefit if the price falls.
| Asset | Quantity held | Estimated price |
|---|
Orders waiting to trade
0 waitingAn order is a request to buy or sell. It becomes a completed trade only when someone matches it. Your bot can cancel an order that is still waiting.
| Asset | Buy / sell | Your price | Still waiting |
|---|
BEFORE YOU ASK AN ORGANIZER
Quick answers
Do I need a new strategy for every round?
No. Your latest saved file is used again. New products and paid features are optional; a focused stock strategy can still participate. Read the round preview and decide what, if anything, to change.
What carries over between rounds?
Your selected Python file and overall score carry over. Each round starts with fresh cash, no holdings and no waiting orders. If you replace a bot during a round, its exchange account stays intact but its Python variables restart.
Where do I click to unlock futures, bid, or buy research?
These are decisions your Python bot makes through the SDK, not dashboard buttons. Use ctx.unlock_futures(), ctx.submit_auction_bid(amount), or ctx.allocate_research(amount) only when that feature is enabled. Amounts are integer cents. The round briefs link to the rules and examples.
Can teammates use the dashboard at the same time?
Yes, with the same team key. Reading the dashboard does not interrupt the bot. Coordinate uploads: the latest successful upload becomes your team's selected file. Do not also run a separate trading bot on a laptop unless the organizer registered your team for that mode.
Why is profit different from cash, or different after the round closes?
Profit includes what your holdings are worth and deducts fees and paid upgrades. Cash alone does not include those holdings. Live prices provide an estimate; the official closing values determine the final result. Overall rankings use completed rounds.
Can I close the page, and what if an upload fails?
Your hosted bot keeps running when you close the page or disconnect your laptop. A rejected update leaves the previous version selected. Check the error, fix the file and retry. Refreshing this page signs you out; paste your key again to return.
WHEN SOMETHING GOES WRONG
Bot output and errors
Your bot's printed messages and Python errors appear here. If it stops, look at the last error, fix your file and upload it again. If it still will not start, ask an organizer. Only your team's output is shown.
Upload a bot first. Its output appears when a round starts.