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.

13 min readUpdated 26 August 2026install, ecosystem, cron, permissions

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

  1. Open the Extension ManagerAdmin → 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 ID 61500000 — 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.

    1. The Algo Trading Bots card — click it to open the product page
    2. Its switch stays disabled until the licence is activated
  2. 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.

    1. Paste the purchase code here
    2. Activate License — then wait for the redirect back to the product page
    3. The offline route, for a server with no outbound HTTPS
  3. 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 updator

    That 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.

    1. Check for Updates, then Install v… when it is offered
    2. Releases — the notes for the version you are about to install
    3. The Enabled switch — step 4, not yet
  4. 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 Bot show 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

  1. Open a tradable ecosystem market's trade page — for example /trade?symbol=BTC-USDT&type=spot-eco.

  2. Switch the order form to the Algo tab — this is the only bot-creation form in the product. /trading-bot/create is a resolver: it picks a market and forwards you here, preserving ?type= and ?strategyId=.

  3. Build a paper grid bot — pick Grid, leave the price-seeded defaults, set mode to Paper, allocate 500.

  4. Create it, then start it — a new bot lands in DRAFT and must be started deliberately. Start it from the Bots tab in the orders panel.

  5. Open the Terminal — confirm the ladder is drawn on the chart and the tick heartbeat updates.

  6. Check the admin side — rows should appear at /admin/trading-bot/bot and /admin/trading-bot/logs.

A healthy backend log shows:

[TRADING_BOT_ENGINE] Bot Engine started with N active bots

The 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.