Documentation

Everything you need to know, in few words. It is simulated trading for educational purposes: no real money is used and none of this is investment advice.

We are in the alpha phase. Some parts of the site may contain errors. If you find one, let us know: Leave a comment

Getting started

1

Create your account

Enter your email and accept the terms. We send you a link to sign in (no password).

2

You get the account

5,000 simulated USDC, with real prices. You get 1 trading account.

3

Trade

Once signed in, open your user-icon menu and choose “Trade”: live chart and order ticket. The same menu has “My profile”, “My account” and the Laboratory.

How trading works

  • Buy = you bet the price goes up. Sell = you bet it goes down. Every order opens its own trade, with its own Stop Loss and Take Profit: you can hold several at once (even a buy and a sell of the same asset) and close each one separately, by hand or when its SL/TP is hit.
  • Market orders: they run at the current price. Limit orders: you set the price at which you want to buy or sell; they run when the market reaches it (at once if it is already there).
  • Stop Loss and Take Profit: are two optional prices attached to your position. If the price reaches the Stop Loss against you, the position is closed to limit the loss; if it reaches the Take Profit in your favour, it is closed to lock in the gain. You can set them when you open or change them later from the open positions table.
  • We do not yet simulate market depth or matching between buyers and sellers: a limit order fills in full when the price reaches yours. We will study this for a future version.
  • Nor do we yet simulate the funding rate of real perpetual futures, which longs and shorts pay or receive from each other every few hours. Holding an open position has no such cost or income on TapeArena; see the Roadmap.
  • Costs: fee 0.035 % per trade plus a small price slippage.
  • Leverage: it is how many times your capital you can move. Maximum 3×. To start, better stay under 0.5×.
0× no leverage0,5×recommendedeasy to break the limits3× maximum allowed
Example

You buy BTC for 1,000 USDC (0.2× leverage on 5,000). You pay 0.35 USDC in fees. If BTC rises 2 %, your account gains about 20 simulated USDC; if it falls 2 %, your account loses about 20 simulated USDC.

You can also trade with your own program through the API. Manual and API share the same limits and ranking.

Risk limits

There are two loss caps: 5 % in a day (against the previous day's close) and 10 % from your peak (the “monthly limit”: against the best daily close you have had). They are checked once a day, at the close (00:00 UTC): 01:00 in Madrid in winter and 02:00 in summer. Your equity counts open positions.

5,000 · equity at yesterday's closeSafe zone: you can keep trading4,750 · −5 % in the dayIf you close the day below → account blocked4,500 · −10 % from your peakIf you close the day below → account blocked(the peak is your best daily close; here, the starting capital)
  • If you go over, your positions are closed and the account is blocked. You can rehabilitate it (free in the alpha) up to twice within 90 days; at the third you lose that account and can open another next month.
  • To qualify you need at least 10 valid trades on at least 10 different days in the season (the exact values are in “Technical data”). High-frequency trading is prohibited (max. 20 orders per hour).

What is included and what it costs

  • It is free: we only ask for your email.
  • A 5,000 simulated USDC account with everything included: charts, statistics, API and leaderboard.
  • There are no cash prizes: what you get is an honest measurement of your strategy.
  • We are in the alpha phase and access is 100 % free. In the future some elements may require a paid subscription.

Your profile and data

Once signed in, the user icon in the header opens your menu: My profile, My account, Laboratory, My strategies and Trade. Next to “My strategies” you see how many are running, and if your account is blocked by risk a red notice appears.

  • My profile: your personal details. You can change your country, your language and whether you want to receive TapeArena news and the standings results by e-mail (on by default; if you turn it off we send you none of those e-mails). The nick is your public name on the leaderboard: it can be changed once every 30 days so nobody can impersonate others. You can add a description of your strategy (optional, up to 400 characters and no links) that is shown on your public profile, next to your name. The e-mail is your identity and is not changed here.
  • My account: your trading account: equity, rank, return and your equity curve. Here you also generate your API key (shown only once, and you can replace or revoke it) and, if your account is blocked for breaking a risk limit, you see the notice and the button to rehabilitate it, with how many rehabilitations you have had in 90 days (on the third one the account is lost).
  • Bot learning: in “My profile” you can allow (optional, off by default) the results of “Surprise me” to be kept: the mix or rule found and how it did in each stretch of the history, without your name or e-mail, so that the learning bots can use it in a future season. If you untick it, what was kept is deleted, and it is deleted with your account too. Your saved strategies are used only if you tick the permission on each one.
  • Profile picture: in “My profile” you can upload a picture (PNG, JPEG or WebP up to 5 MB) that replaces the user-menu icon. Your browser crops it square and reduces it to 128×128 pixels, and the server only accepts that format, with no metadata: location or camera data in photos is not kept. Only you can see it. You can remove it whenever you like and it is deleted with your account.
  • Time zone, date format and clock: in “My profile” you choose the time zone in which the site shows dates and times (trades, orders, charts), the date order (31/12/2026, 12/31/2026 or 2026-12-31) and a 24- or 12-hour clock. By default your browser's is used. This only changes how they are shown: exports (CSV, Excel and JSON), the API and the risk limits are always in UTC; the daily close is at 00:00 UTC.
  • E-mail alerts: in “My profile” you can ask us to e-mail you if your account is blocked at the daily close. It is off by default.
  • Contact: a question, a bug or something about your data? Write to us from Contact: we keep your message and reply to the e-mail you give.
  • Delete my account and data: at the bottom of “My profile”. You type your e-mail to confirm and your user, session and Laboratory strategies are deleted; your orders are cancelled and your positions closed. Your trading account stays in the leaderboard history without your name, your country or any data that identifies you. It cannot be undone, but afterwards you can register again with the same e-mail.

Conditional orders: guide and examples

A conditional order lets you prepare a trade on a level you draw on the chart and forget about it: the server watches it and executes it when the price crosses that level. Crossing means going from one side to the other: if the price is already beyond it when you create the order, it waits for the price to come back and cross again.

How to create one

  1. In “Trade”, open the drawing tools (✎) and draw a horizontal line, a trend line, a box, a channel… Select it with the cursor.
  2. Press the lightning ⚡ in the drawing bar. A window opens that you can move. While you fill it in, the chart shows with dashed lines how it would look: trigger (orange), limit (blue), SL (red) and TP (green).
  3. Choose: whether the price rises or falls through, how far from the level (points or %), what to do (buy or sell, market or limit), the size, SL/TP, the expiration and whether it is OCO.
  4. Press “Create”. The order appears in the “Conditional” tab and on the chart, in faint grey.
1 · Drawa level on the chart(line, box, trend…)2 · Set uppress ⚡ and choosecross, action, SL/TP3 · Server watcheseven with the pageclosed4 · Crosses → runsonly once(market or limit)
You prepare the trade once; the server executes it when the price crosses your level.

Example 1 · Two limit orders around a resistance (OCO)

Order 1 trigger · 75,225Resistance ≈ limit · 75,000Order 2 trigger · 74,775121rises through 75,225 → buy limit at 75,000 and Order 2 is cancelled2the price returns to 75,000 → the purchase fillsIf instead it fell through 74,775: sell limit at 75,000 and Order 1 is cancelled.
Each order watches one side of the resistance; the first to fire leaves its limit order and cancels the other.

BTC rises towards a resistance at 75,000 and you do not know what it will do on arrival: break it and carry on, or bounce and turn back? You want to act on whatever it does, without ending up with both trades, and you prefer to enter with limit orders at the resistance price itself, not at any price.

  1. Draw the horizontal resistance at 75,000. Select it and press ⚡.
  2. Order 1 (breakout): if the price rises through · point 0.3 % above the level (75,225) · Buy · Limit at 0.3 % below the trigger point (≈75,000) · SL 1 % · TP 1:2. The idea: if it breaks, you wait for the price to touch the level again, which now acts as support, and buy there. Create it (say it is no. 1).
  3. Press ⚡ again with the line selected. Order 2 (rejection): if the price falls through · point 0.3 % below the level (74,775) · Sell · Limit at 0.3 % above the trigger point (≈75,000) · SL 1 % · TP 1:2. The idea: if the resistance holds and the price turns back, you sell when it brushes the level again.
  4. In the OCO section of the 2nd order, choose “OCO” and, in “Cancels order no.”, no. 1.

What happens:

  • If the price rises through 75,225, Order 1 fires: it leaves a buy limit order at ≈75,000 in “Pending orders” and Order 2 is cancelled. When the price comes back to 75,000, the purchase executes, with its SL and TP.
  • If the price gets close to the resistance (goes above 74,775) but does not reach 75,225 and falls back through 74,775, Order 2 fires: it leaves a sell limit order at ≈75,000 and Order 1 is cancelled.
  • As long as the price crosses neither level, nothing happens. If the price is already below 74,775 when you create them, Order 2 waits for it to first rise above and then cross it downwards.

What OCO does and what it does not. OCO cancels the other conditional order when the first one fires (when it leaves its limit order), not when that limit order fills. If the price does not come back to 75,000, the limit order stays pending in “Pending orders”: you can cancel it by hand or give the conditional an expiration. And you cannot leave two limit orders on the book at the same time so that one cancels the other when it fills: two conditional orders with the same trigger would leave only one.

Example 2 · Waiting for a bounce at support with a limit order

Support = trigger 70,000Limit 0.3 % lower · 69,790121the price falls through the support → a limit order is placed a little lower2the price reaches the limit → the order fillsIf the price bounced before reaching 69,790, the limit order would stay pending (you can cancel it).
The cross does not buy at any price: it leaves a limit order a little lower.

Support at 70,000. If the price falls there, you want to buy a little lower, not at any price.

  • If the price falls through · at the level · Buy · Limit at 0.3 % below the trigger point (69,790).
  • On crossing, a limit order is placed in “Pending orders”. If the price never reaches that level it is not executed (you can cancel it there).

Example 3 · A trend line with a margin

1the trend line you drewtrigger: 0.5 % above the line (rises with it)Take Profit, parallel to the trendStop Loss, parallel to the trend1the price falls through thetrigger point → market buy
Since the line rises, the trigger, Stop Loss and Take Profit are parallel to it and rise with time.

You draw a rising trend line and want to buy if the price touches it from above, but with a 0.5 % margin.

  • If the price falls through · point 0.5 % above the level · Buy · Market · SL 1 % · TP 1:2.
  • Since the line is sloped, the trigger, SL and TP are drawn as lines parallel to the trend and rise with it. The order uses their values at the moment of the trigger.
  • Tick “Keep following the drawing past its right edge” if you want the order to stay valid beyond the end of the line; otherwise it expires when it gets there.

Example 4 · OCO: breakout up or down

range 72,000 – 74,000Top → Order 1 (buy)Bottom → Order 2 (sell)1Order 2 cancels itself21the price leaves upwards: Order 1 executes (buy)2when one executes the other is cancelled (OCO): you never end up with bothIf the price left downwards, the opposite would happen: Order 2 executes and Order 1 is cancelled.
Two linked orders on the sides of a box: whichever executes first cancels the other.

The price moves in a range between 72,000 and 74,000 and you do not know which way it will leave. You want to follow the exit, whichever it is, but not open both.

  1. Draw a box over the range. Select it and press ⚡. Choose the Top level.
  2. Order 1: if it rises through · Buy · Market · SL 1 % · TP 1:2. Create it (say it is no. 1).
  3. Press ⚡ again with the box selected and choose the Bottom level. Order 2: if it falls through · Sell · Market · SL 1 % · TP 1:2.
  4. In the OCO section of the 2nd order, choose “OCO” and, in “Cancels order no.”, no. 1. (With a single active order that field is disabled: you can only link from the second one on.)

When one of the two is executed, the other is cancelled automatically. You will see it in the “Conditional” tab: “Cancelled · OCO: order #1 was executed”. Today only orders on the same asset can be linked.

How does this differ from example 1? The OCO mechanics are the same, but the approach is not:

  • Example 1: there is a single level (the resistance) and you react in opposite ways depending on what the price does: if it breaks, you buy; if it bounces, you sell. You enter with limit orders at the level itself, waiting for the pullback.
  • Example 4: there are two levels (the top and bottom of a range) and you follow the exit, whichever it is: if it leaves upwards, you buy; if it leaves downwards, you sell. You enter at market, as soon as the level is crossed, without waiting for any pullback.

In other words: in 1 you bet on what the price will do on reaching a level; in 4, on the fact that it will eventually leave a range, whichever way.

Example 5 · Expiration: only valid while the move lasts

0 h1 h2 h3 h4 h5 hthe order is alive (expiry: 4 hours)Expiredcreatedif it crosses within this time → it executesIf it has not triggered by the 4-hour mark it cancels itself and stays as “Expired”. It is checked on the server.
A breakout that does not come within a few hours usually loses its meaning: the expiration removes it for you.

A breakout that does not happen within a few hours usually loses its meaning. In “Expiration” choose 4 hours (or use the shortcuts 30 min, 1 h, 4 h, 24 h, 7 days). If it has not triggered in that time, the order cancels itself and stays as “Expired”. In the OCO example, set the same expiration on both so they disappear together.

Example 6 · Modify and duplicate

Conditional order(active)Details → change→ “Save changes”the expiry restarts from that momentDuplicate → a copywith the same dataNew order(other size, SL, side…)👁 the eye shows or hides each order's lines on the chart · the level is fixed when the order is created
Duplicating also works with executed, cancelled or expired orders, to set them up again.
  • Details (in the “Conditional” tab): shows all the entry, exit, SL, TP, size, expiration and OCO conditions. On an active order you can change them and press “Save changes”. The expiration restarts from that moment. The asset cannot be changed. While the order is active it follows its drawing: if you move it on the chart, the trigger, entry, SL and TP are read again (size, expiration and OCO do not change). If you delete the drawing, the order stays at its last level.
  • Duplicate: opens a copy with the same data so you can change whatever you want (another size, another SL, the other side of the box…) and create it as a new order. It also works with executed, cancelled or expired orders, to arm them again.
  • Cancel stops an active order but leaves it in the list as “Cancelled”. Delete removes it from the list for good (if it was active it is cancelled first and cannot fire).
  • The eye shows or hides each order's lines on the chart.

Limits and details worth knowing

  • At most 3 active conditional orders at a time (for now). Cancel one, or wait for it to execute or expire, to create another.
  • If you move a drawing, its active orders take the new level but do not fire by themselves: a real cross is needed, from the side the price is on at that moment.
  • Each order runs only once. If the server restarts, a cross that happened while it was down is lost.
  • Size, SL and TP are computed with the price and equity at the moment of the trigger; the real entry price may differ by a few basis points because of slippage.
  • If it cannot be executed when it fires (maximum leverage, blocked account, an SL on the wrong side…), the order is left as “Rejected” with the reason, and its OCO partner is not cancelled.
  • To size “by risk” or to set a TP as R:R you need a Stop Loss.

Glossary

The (i) icons across the site open each term here. In the alpha version, help (the mortarboard button in the header) is always on.

Drawdown (maximum fall)

It is the largest fall your equity has suffered from its highest point, in %, even if you recovered afterwards. Example: your account reaches 6,000 USDC, drops to 4,800 and then rises to 6,500. You end up winning, but your drawdown is 20 % ((6,000 − 4,800) ÷ 6,000).

What it is for: the score is the return divided by the drawdown (winning without scares scores higher), and a fall that is too large disqualifies.

Which limits apply (today)

  • Season cap: 50 %. If your drawdown, measured on the equity snapshots, exceeds it, you are disqualified from the official leaderboard.
  • Daily loss 5 % and monthly loss 10 % (from your all-time high). They are checked once a day, at the 00:00 UTC close, with open positions valued at market price. If you go over, your positions are closed and the account is blocked.
  • Liquidation: if your equity falls below 0.5 % of the amount you hold in positions, the system closes everything at once.

When you can have a larger drawdown than allowed without being disqualified

  1. Falls that are recovered between two closes. The 5 % and 10 % rules only look at equity at 00:00 UTC. If you fall 18 % during the day and have recovered it by the close, that fall does not count for them.
  2. The reference peak only counts closes. The monthly 10 % is measured against the best daily close, not the peak you touched mid-afternoon, and it starts counting from the first close after the rule is switched on: earlier peaks and falls are not judged again.
  3. Falls shorter than an equity snapshot. Equity is photographed every few minutes. A fall that starts and ends between two snapshots does not show up in the leaderboard drawdown.
  4. The season cap (50 %) is wider than the risk rules. You may see an 18 % drawdown in the table and still be ranked if it does not reach the cap and you did not break the rules at the close.
  5. Table delay. The leaderboard refreshes every few seconds: right after a fall it may take a moment to show it.

The “Max. drawdown” column measures the whole season with the equity snapshots; the 5 % and 10 % rules measure only at the daily close. That is why they may not match.

Trades: positions, menus and sorting

The participant's Trades table lists every execution of the account: the 600 most recent (the total is shown above; the export does include all of them, up to 50,000). Trades of user accounts are published with a 1-hour delay so nobody can copy a live strategy; bots' trades are immediate.

The columns

  • Date: when it was executed.
  • No.: number of the position it belongs to (#12). All rows with the same number make up one position.
  • Symbol: the asset (BTC, ETH, SOL).
  • Side: buy or sell, and what it did to the position: opening (opens it), increase (adds in the same direction), reduction (closes a part) or closing (leaves it at zero). A margin liquidation is marked “(liquidation)”.
  • Quantity: units of the asset, or their amount in USDC (see below).
  • Price: execution price, slippage already included.
  • Fee (USDC): what that execution cost.
  • Realized P&L (USDC): the profit or loss closed by that row, before fees. Openings and increases have nothing to realize and show “-”.

Positions and colours

A position runs from opening an asset until it is back to zero. If a trade flips the sign (long to short), it is split into two rows with the same time: the one that closes the previous position and the one that opens the new one (the fee is shared by the quantity of each part). A position's result is the sum of its realized P&L minus all its fees. Colours: light green if it closed with a net profit, light red if it closed with a loss, no colour if it is still open (no result yet).

Menu options

  • Amounts in · Asset / USDC: in Asset the quantity shows in units of the asset and the price in USDC. In USDC the quantity becomes the amount of the trade (quantity × price) and the price is replaced by “-”. Fee and P&L are always in USDC.
  • Group by position: gathers the rows of each position under a header with its number, asset, direction (long/short), when it opened and closed (or “still open”), how many trades it has and its net result. Inside each group rows run from oldest to newest.
  • Export · CSV / Excel / JSON: downloads what you are looking at (same units, order and grouping) with every available row. The dates in the file (date_utc) are always in UTC, even if the site shows them in your time zone (chosen in “My profile”). File columns: date_utc, position, symbol, position_side, side, action, quantity, quantity_unit, price, fee_usdc, realized_pnl_usdc, position_result_usdc. In USDC the price is empty; on openings and increases the P&L is empty.

Sorting

Click a column header to sort by it; click again to reverse (▲ ascending, ▼ descending). Default: date, newest first. With the table ungrouped, rows are sorted; when grouped, whole positions are sorted, and each column means:

  • Date → last modification of the position. No. → position number.
  • Symbol → asset. Side → direction of the position (long/short).
  • Quantity and Fee → sum over the position. P&L → net result of the position (open ones count as the worst).
  • Price cannot be sorted when grouped, because a position has several prices.

The table header stays fixed at the top while you scroll, and your choices (units, column, direction, grouping) are remembered in your browser.

Return

How much your account has gained or lost since the season started, in %, with open positions valued at market price. To be on the official leaderboard it must be above 0 %.

Score

The score (0 to 100) is the mean of two ranks: that of your Calmar and that of your Sharpe ratio (profit divided by variability) among the ranked accounts. Calmar is the return ÷ maximum drawdown (with a 1 % floor on the drawdown so that an almost flat curve does not inflate the score): the same profit with smaller falls scores higher. Ties go to whoever has more trades.

Valid trades

A trade is valid if it moves at least 1 % of the starting capital. Smaller orders run, but do not count towards the minimum required for the leaderboard.

Active days

Different UTC days with at least one valid trade. They stop it being enough to do everything in one minute.

Status

It appears when there are disqualified accounts. It gives the reason: the season maximum-drawdown cap, daily or monthly loss at the close, or liquidation by margin. Ranked accounts carry no reason.

Position

A position runs from opening an asset until it is back to zero. Each has a number (#). If a trade flips the sign (long to short) it is split in two: the part that closes the previous one and the part that opens the new one. Green: closed with a profit net of fees; red: with a loss.

Stop Loss / Take Profit

The Stop Loss closes the trade if the price reaches that level against you, limiting the loss. The Take Profit closes it if it reaches it in your favour. You can set them by price, by % or by points, or as R:R (a multiple of what you risk).

Leverage

How many times your capital you can move. With 5,000 USDC and 2× you can hold 10,000 USDC in positions. Maximum 3×; the higher it is, the faster a loss grows and the closer liquidation gets.

Conditional order

An order that fires by itself when the price crosses a level you drew (support, resistance, trend line, box, channel, Fibonacci…), with an optional distance in points or %. It is watched on the server (it works with the page closed) and runs only once.

  • What it does when it fires: a market or limit order, with SL, TP and a size by quantity, amount, % of equity or % risked. Everything is computed with the price and equity of that moment.
  • Sloped lines: the trigger, entry, SL and TP are parallel to the line and move with time.
  • Advanced options: OCO (one cancels the other) and expiration.
  • On the chart: active orders are drawn in faint grey (real orders, in strong colours). Each has an eye to show or hide its lines.
  • Details and duplicate: the “Details” button shows everything and lets you modify an active order; “Duplicate” creates a copy to change.
  • Limit: 3 active conditional orders at a time (for now).

Guide with examples: Conditional orders.

OCO (One Cancels Other)

Two linked conditional orders: as soon as one is executed, the other is cancelled automatically. It lets you prepare two scenarios at once (for example, a breakout up or down) without ending up with both positions open.

  • How to create it: when creating the 2nd order (or later ones), choose “OCO” and, in “Cancels order no.”, the number of the other one. With a single active order there is nothing to link to, so the field is disabled.
  • Same asset: for now only orders on the same symbol can be linked.
  • It works both ways: if the new one fires, the chosen one is cancelled; if the chosen one fires, the new one is cancelled.
  • “Executed” = it fires: as soon as the order leaves its trade (at market) or its limit order, the other is cancelled; the limit order does not need to fill.
  • It only cancels the other if the order is really executed. If the server rejects it (for example for exceeding the leverage), the other stays alive.
  • If one of them expires or you cancel it by hand, the other is not affected.

Step-by-step examples in the conditional-orders guide.

Conditional order expiration

A duration (minutes, hours or days, up to 30 days) after which the order is cancelled automatically if it has not been executed; it stays as “Expired”. It counts from when you create it; if you modify and save it, it restarts from that moment. Without an expiration, the order lives until it is executed or you cancel it.

It is checked on the server even without price movement and even if you close the page. The “Conditional” tab shows how long is left (“in 3 h 20 min”).

Perpetual future

It is a contract that follows the price of a cryptocurrency (on TapeArena, BTC, ETH and SOL) and has no expiry: you can keep it open as long as you like. You do not buy or receive the coin: you win or lose the price difference between opening and closing the trade.

  • You can be long (you buy, you win if it rises) or short (you sell, you win if it falls).
  • It is traded with leverage: you move more money than you have, and gains and losses are multiplied.

Real perpetuals pay or charge a funding rate between longs and shorts every few hours; TapeArena does not simulate it yet.

Balance and equity (capital)

Your account has two figures, and they are not the same:

  • Balance: the money in your account with the trades already closed: your starting capital plus realised profits and losses, minus fees. It does not move while a trade is still open.
  • Equity (capital): the balance plus what open positions are winning or losing right now (unrealised profit or loss). It is what your account would be worth if you closed everything now. In this documentation, “capital” means equity.

Example: you have 5,000 USDC and buy BTC for 1,000 USDC. If BTC rises 2 %, your balance stays around 5,000 (minus the fee) but your equity is about 5,020. When you close the trade, the balance catches up and matches the equity.

The leaderboard, the maximum drawdown and the daily and monthly risk limits measure the equity, not the balance. If they measured the balance, a loss could be hidden by leaving a losing trade open. That is why the «My account» chart draws the equity as the main line and lets you see the balance as a reference.

Bot generation

Every time a new month starts, a group of new bots arrives: a generation. The bots of earlier generations keep trading, so every month there are more bots, of different ages.

Within a month no bot changes: each follows its rule to the end. Changes only arrive with the next generation.

The new bots are of two kinds: those that learn from parents and those born from scratch. And at the start of each month the worst of the older generations are retired.

Learning bot (parents and children)

A learning child bot does not start from scratch nor copy a single parent: it reads many bots of the previous month (between 2 and 8 “parents”) and, for each trait, decides whom to inherit it from.

  • Read: parents are chosen among the bots that met the leaderboard requirements, more likely the better they did, taking care to keep a variety of strategies.
  • Decide what to inherit from each: the traits are the type of rule, the asset, the leverage, the decision pace, the brake… For each one we look at which values worked best across the whole population and inherit it from whoever carries that value, more likely the better it worked. So a child may take one parent's asset, another's leverage and a third's brake.
  • Mutate: then it is changed slightly at random (a faster or slower parameter, a slightly different brake) so it is not a copy.
  • Parents do not disappear: they keep trading; the child is one more bot.

The purpose is always to improve: combining what has worked best, whoever has it. It is no guarantee: a trait that worked last month may not work next month.

Today children only learn from other bots. Learning from users' trading as well is on our Roadmap and we will try to implement it in the future.

Bot born from scratch

The other half of each new generation inherits nothing: it gets a randomly drawn strategy, without looking at any parent. It acts as a control: if the learning children do no better than these, inheriting is useless.

Bot retirement

When a month starts, the worst 20 % of each generation that is already two months old or more is retired. “Worst” is measured by the smoothed score of their months (those that never meet the requirements go first). The remaining 80 % keep trading, and its members can be parents of the next generation.

R:R

Reward / risk: with an R:R of 2 the Take Profit is twice as far as the Stop Loss, so you win 2 USDC for each 1 USDC you risk.

Leaderboard

The winner earns the most profit for each unit of risk taken, not the one who risks most. To enter: finish the month positive, meet the minimum activity and not break the limits. The score is the average of two measures (Calmar and Sharpe); in a tie the one with more trades wins. See the leaderboard

Who you compete against

You compete against bots and other traders on the same leaderboard. Bots carry the BOT label and are of two kinds: random (a benchmark) and systematic, with simple rules (trend, moving-average filter, breakout, buy and hold).

Bots have human names (for example “Irene Alonso”) so they are easier to remember than “Bot 1”, “Bot 2”…, but they always carry the BOT tag next to the name: none pretends to be a person. No bot has a proven edge: they are there for you to measure yourself, not as a signal to copy. The charts also show the buy and hold line for each asset. Bots only change when a new month starts: see how under “Generation”.

If a single trade contributes more than 50 % of the period's profit, the leaderboard flags it (⚠): it does not disqualify, but it signals the result may come from one lucky trade.

Measuring yourself honestly

Winning one month does not prove you have a working strategy: it may be luck or a rising market. These are the rules we use so that the result means something.

  • Compare with buy and hold: if you do not beat sitting still with the asset, your strategy adds nothing.
  • Risk counts: the score is the average of Calmar (profit over maximum drawdown) and Sharpe (profit over variability). Risking more does not win by itself.
  • Costs are included: 0.035 % fee and slippage on every trade; many strategies that look good without costs stop being good with them.
  • One trade is not enough: at least 10 valid trades on at least 10 different days are required, and if a single trade contributes more than 50 % of the profit the leaderboard flags it (it does not disqualify, but it signals the result may be luck).
  • A few months are not proof: repeat the test over several seasons before trusting a streak.

Conduct

If fraud is detected (copying others, using inverse versions of other strategies, coordinated accounts) the user is cancelled. You may claim by providing evidence; having placed the orders by hand is not accepted as proof.

Technical data

  • You trade perpetual futures of BTC, ETH and SOL (contracts that follow the price of the cryptocurrency, with no expiry), with real market prices updated every second.
  • A trade is valid if it moves at least 1 % of the starting capital (50 USDC).

Season parameters

ParameterValue
Minimum valid trades10
Minimum active days10
Minimum size of a valid trade50 USDC (1 %)
Maximum monthly drawdown50 %

Assets

You trade crypto perpetual futures, quoted in USDC with simulated money. Today there are 3 assets; any other symbol is rejected.

API symbolContractHistory (download)Price now
BTCPerpetual future BTC/USDCBTCUSDT…
ETHPerpetual future ETH/USDCETHUSDT…
SOLPerpetual future SOL/USDCSOLUSDT…

Click a symbol to see its chart. You can be long (buy) or short (sell) on each, with a net position per symbol and up to 10x leverage on your total equity. Several assets can be combined in one account.

API documentation · Terms and conditions · Cookies

Roadmap

What we want to add. These are plans, not promises: they may change. Each item carries a label showing how close we see it:

  • Coming soon It will be implemented in the coming days or weeks.
  • Later It will be implemented in the coming weeks or months.
  • Under study We are studying its feasibility.
  • Funding rate Coming soon: Simulate the funding rate of perpetual futures, paid or received for holding an open position, to bring the cost of holding a trade closer to the real market.
  • Spot cryptocurrencies Under study: Trade spot cryptocurrencies too (buying the coin itself), not only perpetual futures and not only BTC, ETH and SOL.
  • S&P 500 stocks Under study: Trade stocks of the index as well as crypto. It is the biggest change: it needs a suitable data source, market hours, holidays and other costs.
  • ETFs Under study: Trade exchange-traded funds. They would arrive together with stocks.
  • Indices Under study: Trade stock indices, probably through ETFs.
  • More quantitative strategies Under study: Bots and Laboratory templates based on the quantitative research lines we have tested internally: models that rank assets by their likelihood of rising, periodic portfolio rotation and short-term strategies of a few days.
  • Learning from users' strategies Under study: Let the learning bots also read the strategies of the users who allow it. You can already give the permission, with no commitment and withdrawable, when you save a strategy in the Laboratory; today bots only learn from other bots.
  • Inferring the strategy behind manual trading Under study: Find the code that could stand in for a manual trading strategy. It is open research: we do not know yet whether it can be done well.
  • Alerts by type of event Under study: Get notified when a conditional order fires or expires, a strategy stops, or you get close to a risk limit.
  • Partial close of a trade Under study: Close only part of a trade from the interface, for example “close half”.
  • More realistic execution Under study: Simulate market depth and the matching of buyers and sellers, so a large order does not fill entirely at a single price.
  • Own or licensed data Under study: Make the history the Laboratory uses come from our own or licensed data, so it can be offered with every guarantee.
  • Blog and news Under study: A place to publish the results of our research and the platform's changes.

What would you like us to add? Tell us: the more people ask for something, the sooner it comes. Suggest an idea