Install and enable
Activating Algo Trading Bots — the Ecosystem prerequisite, the nine tables it creates, the permission keys, the five cron jobs, where the engine actually runs, and a smoke test that proves it.
Activation is quick. The prerequisites are not, and getting one of them wrong produces an install that looks perfectly healthy and trades nothing. Work through this page in order.
Before you activate
Confirm the Ecosystem addon is live and trading before you activate Algo Trading Bots. Without it this addon installs cleanly, creates its tables, shows its menus — and then does nothing at all, forever.
Bots trade ecosystem markets, price off ecosystem candles and hold funds from the ECO wallet. The engine only runs in the process holding the ecosystem matching lease, and if no such process exists there is no engine anywhere.
Prove all four of these on your install:
- Bicrypto core installed and running — see Installing Bicrypto
- The Ecosystem addon is licensed and switched on — its card in Admin → System → Extension Manager reads Verified with the switch on
- At least one market is active at
/admin/ecosystem/market - That market has candle history — open its trade page and confirm the chart draws
- A test order can be placed and matched on it
- ScyllaDB is reachable — ecosystem candles live there
- Redis is reachable — cron scheduling depends on it
If Ecosystem is not enabled, the cron manager raises a standing warning:
no trading bot is running anywhere in this deployment: live bots place no orders, paper bots do not tick, and no stale-tick detection runs
That is not a misconfiguration you can work around. Enable Ecosystem, or switch Algo Trading Bots off.
Activation
-
Open the Extension Manager — Admin → System → Extension Manager (
/admin/system/extension); the page heading is Add-ons & Integrations. On the Extensions tab (or by searching for Algo) find the Algo Trading Bots card — product ID61500000— and click it. Until its licence is activated the card's chip reads Activate and its switch is disabled, with a tooltip that says Activate license first.- The Algo Trading Bots card — click it to open the product page
- Its switch stays disabled until the licence is activated
-
Activate the licence — on the product page press Activate License. Paste the purchase code from your MashDiv dashboard, optionally an email address for update notifications, and press Activate License. The screen confirms License Activated! and returns you to the product page a couple of seconds later. If the server has no outbound access, the License File tab on the same screen takes the licence certificate downloaded from your MashDiv dashboard instead.
- Paste the purchase code here
- Activate License — then wait for the redirect back to the product page
- The offline route, for a server with no outbound HTTPS
-
Install the release — back on the product page, now licensed, the Overview tab has a release panel. If it offers Install v…, press it; if it says Up to date on a product you have only just licensed, press Check for Updates once, then install whatever it offers. The Releases tab holds the notes for the version you are being offered — read them first.
Install downloads the release, verifies it and extracts it over the project root. It runs no migrations, builds nothing and restarts nothing, so finish it from a shell on the server:
pnpm updatorThat is the finalise chain — stop, dependencies, schema, seed data, frontend build, start — and it is what makes the nine tables, the routes and the screens below exist. If the panel still says Up to date after the check there is nothing to download; go straight to the next step.
- Check for Updates, then Install v… when it is offered
- Releases — the notes for the version you are about to install
- The Enabled switch — step 4, not yet
-
Switch it on — turn the Enabled switch on, in the product page heading or on the card in the Extension Manager, usable now that the licence is verified. This is what makes
Trading Botshow up in the admin navigation and the user area answer at/trading-bot— and, provided Ecosystem is already live, the engine starts ticking with it. No restart is needed. Turning it off later is the same switch; it leaves the licence in place, so switching back on needs no reactivation.
What activation creates
Nine tables are created automatically:
| Table | Holds |
|---|---|
trading_bot |
The bots: configuration, risk envelope, allocation and running totals |
trading_bot_trade |
Every position opened and closed, with realised P&L |
trading_bot_order |
Orders placed on the book, including working grid rungs |
trading_bot_stats |
One row per bot per day — trades, profit, volume, equity |
trading_bot_paper_account |
Per-user, per-currency virtual balance |
trading_bot_strategy |
Marketplace listings |
trading_bot_purchase |
Sales, with the fee breakdown and a config snapshot |
trading_bot_strategy_review |
Reviews awaiting or past moderation |
trading_bot_audit_log |
The complete audit trail |
If you build from source, run pnpm types:generate once the tables exist. The
predev and prebuild hooks do this for you.
Permissions
The seeder ships ten keys. Assign them to the roles that should manage the addon
at /admin/crm/role.
| Key | Grants |
|---|---|
access.trading_bot |
The admin dashboard at /admin/trading-bot |
view.trading_bot.bot |
The fleet console and individual bot detail |
manage.trading_bot.bot |
Force-stopping one bot, and the fleet-wide emergency stop |
view.trading_bot.marketplace |
Listings, the pending queue, purchases and marketplace stats |
edit.trading_bot.marketplace |
Approve, reject, suspend and reinstate a listing |
view.trading_bot.review |
The review moderation queue |
edit.trading_bot.review |
Approve and reject reviews |
view.trading_bot.log |
The audit trail |
view.trading_bot.settings |
Reading the settings screen |
edit.trading_bot.settings |
Saving the settings screen |
Nothing under /trading-bot carries a permission. Every endpoint there is scoped
to the caller's own bots, so a permission would add nothing. Who may use the
addon is controlled by KYC feature gates instead — see below.
KYC gates
Four verification features ship with this addon and are configured per KYC level under Admin → CRM → KYC.
| Feature | Refuses |
|---|---|
view_trading_bot |
Listing bots, the dashboard, the market list and browsing the marketplace |
trade_bot_live |
Creating, starting or resuming a live bot, and deploying one from a strategy |
buy_bot_strategy |
Purchasing a marketplace strategy |
become_bot_seller |
Submitting a strategy for review |
Paper trading is deliberately open to anyone who passes view_trading_bot — it is
the funnel. Only live mode, which moves real balances, needs trade_bot_live.
An earlier build had one on the settings screen. It gated nothing, and wiring it
up literally would have removed a check rather than added one, because it
shipped OFF while trade_bot_live was already enforced. It has been deleted. The
KYC feature is the only control.
The five cron jobs
Check them at /admin/system/cron under the trading_bot category.
| Job | Every | Does |
|---|---|---|
processTradingBotEngine |
5s | Starts the engine when enabled, suspends it in maintenance, and resyncs resident bots against the database every 30s |
checkTradingBotStaleBots |
1m | Marks RUNNING bots silent for 5 minutes as ERROR and notifies their owners |
updateTradingBotStrategyRatings |
1h | Recomputes marketplace ratings from approved reviews only |
aggregateTradingBotDailyStats |
24h | Writes per-bot daily stats and resets the daily counters the loss limit depends on |
cleanupTradingBotOldData |
7d | Prunes audit logs and cancelled/failed/expired orders past a 90-day retention window |
aggregateTradingBotDailyStats is what clears dailyProfit at midnight UTC. If
it fails silently, yesterday's loss carries forward and every bot trips its
daily-loss limit on the first tick of the new day. If you see a fleet going to
LIMIT_REACHED at the same time each morning, check that job's lastRunError
before touching anything else.
Where the engine runs
The engine is a per-process singleton. It refuses to start on any process that is not the one holding the ecosystem matching lease, because a live order is enqueued on the matcher's in-memory queue and an order enqueued anywhere else is refused with a 503.
Three arrangements, three drivers:
CRON_MODE |
What drives the engine |
|---|---|
| unset (single process) | The cron jobs — the scheduler and the matcher are the same process |
only (dedicated cron process) |
Nothing. Both handlers run and immediately no-op; that process's matcher is a read-only follower |
off (web process) |
A self-tick armed once this process's matcher takes the matching lease, and disarmed the moment it stands down |
Those three are selected by mutually exclusive facts about the process, so no arrangement can double the tick rate — which on a real-money engine would mean double the order flow.
An admin request is served by whichever worker picks it up, which is almost never
the engine host, so that worker's engine reports STOPPED on a healthy install.
The dashboard shows the fleet health split instead — RUNNING bots that are
ticking versus RUNNING bots that have gone silent — computed from the database
and therefore correct on any process.
On the worker-thread backend entry there is one more caveat: the WebSocket client registry is per-thread, so a tick raised by the engine on the main thread may not reach a socket held by a worker. The Bot Terminal also polls every 15 seconds, which is what keeps it correct on those deployments.
Smoke test
-
Open a tradable ecosystem market's trade page — for example
/trade?symbol=BTC-USDT&type=spot-eco. -
Switch the order form to the Algo tab — this is the only bot-creation form in the product.
/trading-bot/createis a resolver: it picks a market and forwards you here, preserving?type=and?strategyId=. -
Build a paper grid bot — pick Grid, leave the price-seeded defaults, set mode to Paper, allocate 500.
-
Create it, then start it — a new bot lands in
DRAFTand must be started deliberately. Start it from the Bots tab in the orders panel. -
Open the Terminal — confirm the ladder is drawn on the chart and the tick heartbeat updates.
-
Check the admin side — rows should appear at
/admin/trading-bot/botand/admin/trading-bot/logs.
A healthy backend log shows:
[TRADING_BOT_ENGINE] Bot Engine started with N active botsThe engine ships enabled
There is no start step and no call to make after installing. A fresh install begins ticking as soon as the addon is switched on. If nothing ticks on a fresh install, the cause is one of the prerequisites above — not a switch you forgot.
To turn the engine off deliberately, use Enable Trading Bot or Maintenance Mode on the settings screen.
Upgrading an existing install
Run pnpm updator as usual, then read this section — several behaviours changed
in ways that affect money.
Every settings field now takes effect
Two dozen fields on the Trading Bot settings screen were previously accepted, saved, and read by nothing: the per-user bot limits, minimum allocation, trade-size floor and ceiling, order-type toggles, the default stop-loss / take-profit / daily-loss / drawdown / cooldown / concurrent-trade values applied at creation, marketplace availability, strategy auto-approval, strategy price bounds, the paper balance and maintenance mode.
Open that screen once after upgrading. Any value you saved months ago and assumed was inert starts enforcing itself the moment you upgrade.
The marketplace fee is now a real setting, defaulting to 10%
10% is the rate the purchase path has always actually charged, even though the old screen displayed 20%. The number on the screen was never the number taken. Set it to whatever you intend before you promote the marketplace, because sellers will notice.
The rate in force at the time of a sale is now written onto that sale, so changing it later never rewrites what a past buyer or seller was charged.
Paid marketplace purchases start working
Until this release every purchase of a priced strategy failed and rolled back — nobody was ever charged, and nobody ever received anything. A marketplace full of paid listings earned exactly nothing. Paid sales now complete end to end. Tell whoever reconciles your books: your marketplace revenue goes from zero to live on upgrade.
Bots inherit the configured risk defaults
Bots were previously created with dailyLossLimitPercent and maxDrawdownPercent
left empty, and an empty limit can never trigger — so those bots could never reach
LIMIT_REACHED whatever their owner believed. New bots now pick up the defaults
from the settings screen. An explicit 0 is still honoured as a deliberate "no
limit".
Check any bot created before this release before assuming its limits work.
Two settings fields are gone
Require KYC is removed — live bots are always gated by the trade_bot_live
KYC feature, so the toggle only ever misled. Creator Payout is removed — the
seller's share is whatever the platform fee leaves behind, and a second editable
percentage could only mint money (if the two summed over 100) or strand it (under
100).
Allocation no longer moves money
Allocation used to debit the SPOT wallet, which was wrong twice over: the money left the wallet and was never held anywhere, and it was the wrong wallet, since bots hold from ECO. It is now a cap. Existing bots keep their allocation number but no longer hold any SPOT balance against it — review any bot whose allocation was funded under the old behaviour.
Your existing configuration carries over
There is now a single settings surface. Anything an earlier install configured by
hand through the retired trading_bot JSON blob is read once and folded into the
screen. If you had deliberately switched the engine off, it stays off; otherwise
the engine comes up enabled.
If you deploy with DB_SYNC=none, run the backend once with sync enabled so the
new columns and indexes land. If you build from source, run pnpm types:generate.