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.

8 min readUpdated 3 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 extension 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

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

  2. Open Admin → System → Extensions — the screen lives at /admin/system/extension.

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

  4. Confirm the surfaces appearTrading Bot shows 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

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