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
ecosystemextension is activated at/admin/system/extension - 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 — settings cache and cron scheduling
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 disable
trading_bot.
Activation
-
Buy and download the addon — note the CodeCanyon username and licence code that come with the purchase. Keep the code private; it is tied to your account.
-
Open Admin → System → Extensions — the screen lives at
/admin/system/extension. -
Activate — click the Algo Trading Bots entry, enter your username and licence code, and confirm. The platform verifies the purchase with CodeCanyon before enabling anything.
-
Confirm the surfaces appear —
Trading Botshows up in the admin navigation, and the user area answers at/trading-bot.
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 activated. 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.
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.
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.
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 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.
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 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.
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.