Algo Trading Bots 6.0.2
3 August 2026
This release has upgrade notes. Read them before updating — they describe behaviour changes that need your attention.
Algo Trading Bots v6.0.2
Release Date: August 3, 2026 Tags: SETTINGS, ENGINE, MARKETPLACE, REVENUE, MONEY, RISK LIMITS, KILL SWITCH, PAPER TRADING, ADMIN, DASHBOARD, FLEET MONITORING, MODERATION, AUDIT LOGS, PERMISSIONS, TRANSLATIONS, SECURITY, BUG FIXES, BREAKING CHANGES
Overview
Two bodies of work, and they turned out to be the same story told twice: a control that looked like it was working, and was not.
Every setting on the trading-bot settings screen did nothing — all twenty-four of them, written to one store and read from another. That is also why the engine shipped switched off: on a fresh installation it read "disabled" and stopped, every five seconds, forever, while reporting each of those checks as a successful run. And the admin dashboard has never shown a true number — an installation with a thousand running bots opened that page and was told Total Bots 0.
Money moves differently after this update, controls that have never done anything will start doing something, and seven admin screens now need their permission granted per role. Read Upgrade Notes before updating.
Requires Core v6.6.1.
Update Instructions
pnpm updatorInstallations that configured the addon through the older admin API are migrated automatically; no manual settings step is required.
One thing does need doing. Seven trading-bot admin screens now enforce a permission per role and must be granted in Admin → Roles. Until you do, they are reachable by Super Admin only — and because Super Admin bypasses permission checks entirely, an upgrade tested from the owner account will look fine while every configured role has lost them. The list is in Upgrade Notes.
Highlights
Every setting on the settings screen did nothing
All twenty-four of them. The screen saved, reported success, and reloaded your values perfectly — and not one of them was read anywhere in the platform. Max bots per user, the fee split, paper trading, the marketplace switch, every risk default: decoration.
They were being written to one place and read from another. The addon had grown three separate settings stores, and the one the screen wrote to and the one the engine obeyed never met. The store the engine actually read had no screen at all — it could only be reached by hand, through an API endpoint no page in the product has ever called.
That is why the engine shipped switched off. On a fresh installation the record it looked for did not exist, so it read "disabled" and stopped, every five seconds, forever — while reporting each of those checks as a successful run. No error, no warning, nothing on any admin page. Users could still create bots and press Start, and their bots would sit at Running without ever placing an order. An operator following the documentation had no way to tell the difference between that and a working installation.
There is now one settings store. The screen writes it, the engine reads it, and everything on it takes effect. The engine is enabled by default, so a new installation trades without being told a secret.
Underneath that, the same audit found the marketplace had never completed a single paid sale. Both halves of the payment — the charge to the buyer and the credit to the seller — were being filed under the same reference number, which the ledger will not allow twice. Every paid purchase failed and rolled back. Free strategies worked, which is why it went unnoticed. Marketplace revenue on your installation is currently zero, and after this update it will not be.
Three more things had been quietly wrong for a long time: bots were created with no daily-loss limit and no maximum-drawdown limit at all, so the two controls that exist to cap a bad day could never fire on any bot ever created through the product. A live bot's exit placed no order at all — it assumed a sale at a quoted price and moved the wrong wallet. And My Purchases failed on every single call, for every user, because it sorted by a column that does not exist.
The admin dashboard has never shown a true number
Every headline on it — Total Bots, Active Strategies, Today's Trades, Month Revenue — asked the server for statistics and then looked for them under three names the server has never sent. Each card had a zero of its own to fall back on, so it did. An installation with a thousand running bots opened that page and was told Total Bots 0, Month Revenue $0.00, No bot data available and No recent activity. The same zero disabled the Emergency Stop All button, so the admin's fleet-wide stop could not be pressed at all.
The page is rebuilt, and pointed somewhere else. A leaderboard of the five most profitable bots is a marketing asset; nothing an operator does at two in the morning begins with it. The console now leads with the bots that are not being driven — running as far as their owner is concerned, but silent past the engine's own five-minute tick window — ranked by the live capital sitting inside them. Beside them sit the live bots losing their owners money, the capital committed and the capital stranded, the moderation backlog with the age of the oldest item in it, and trade activity over the last day, week or month.
Fleet health is read from the bot records rather than from the engine, deliberately. The engine only runs on one server process, so an admin request answered by any other one reports it as stopped on a perfectly healthy installation. Counting how many bots have actually reported a tick answers the same question truthfully from anywhere — and it is the only thing that still speaks during a real engine outage, because the job that marks silent bots as errored stands down exactly when the engine is down.
The kill switch works again, names the number of bots it is about to stop, and requires a written reason that is recorded against every bot it stops. And the whole screen stops being English-only: 47 phrases now come from the translation files instead of being written into the page.
Upgrade Notes
💵 Your marketplace will start earning
Paid strategy sales have never completed on any installation. After this update they do. If you have sellers, they will start being paid and your platform fee will start being collected — expect marketplace revenue to go from exactly zero to live on the first sale.
💵 The platform fee is now a real setting, and it is 10%
The purchase code has always charged 10% and given the seller 90%. The settings screen has always displayed 20%, and that number did nothing.
The fee now comes from the setting, and it ships as 10% so that nothing changes for your existing sellers. Had it shipped at the 20% the screen used to claim, every seller's payout would have been cut from 90% to 80% overnight, retroactively changing the deal they were offered.
If you want a different rate, set it on the Fees tab and it will apply from the next sale. The rate is now recorded on each sale, so a past purchase always keeps the rate it was actually charged.
Creator Payout has been removed from the screen. The seller's share is whatever is left after the platform fee, so two independently editable percentages could only ever disagree — summing over 100% would mint money and under 100% would strand it.
💵 The fee can no longer vanish
If the platform fee cannot be routed — no Super Admin wallet is configured, or the buyer is the Super Admin — the buyer had already been charged the full price and the fee simply disappeared. Now the seller receives the full price and the sale records no fee. The money is never destroyed.
💵 Closing a live position could take the asset and never pay the proceeds
Both halves of a live position's settlement were filed under the same reference, which the ledger rejects as a duplicate. The first half committed and the second failed — the user's asset was taken and the sale proceeds were never credited — the position stayed open, and every retry failed the same way, so it could never be closed again.
This is the path used by stop-loss, take-profit, manual close, stop all my bots, admin force-stop and the fleet Emergency Stop. It required the user to hold that asset in Spot, so it did not affect every installation — but where it did, it stranded both a position and real funds. If you run live bots, look for positions stuck open with no matching proceeds before updating.
💵 Live bots now exit on the market instead of an assumed price
A live bot's exit — every stop-loss, take-profit, manual close and kill-switch flatten — placed no order at all. It assumed the position sold at whatever price it was handed, then moved balances in the Spot wallet: a wallet the bot never traded from, against a buyer who did not exist. Entries went to the Ecosystem order book and exits came out of a different book entirely.
A live exit is now a real market sell on the same Ecosystem book the entry used, settled by the matching engine from the Ecosystem wallet, with the market's own fee and the trading fee both applied.
What changes for you: an exit is no longer instant. The position closes when the order fills — normally within seconds, but on a thin market it can take longer, and on a market with no buyers it will wait. Screens now say exit submitted or closing on the fill rather than reporting a close that has not happened. If a kill switch cannot place the exit immediately, the request is recorded and the platform completes it in the background, so a position can no longer be left behind by a stop that appeared to succeed.
💵 The trading fee is now a real setting
Trading Fee on the Fees tab charged nothing — no part of the platform read it. It now applies on top of each market's own maker/taker fee, on entries, exits and grid fills alike, taken from the user's Ecosystem wallet and recorded as platform profit.
It ships at 0%, so nothing changes until you set it. Two things to know first:
- Collection is best-effort. A bot's capital is held by the matching engine while its orders work, so a fully-allocated user may have nothing spare to pay the fee from. The trade always stands — refusing a fill that already happened would be worse — and the shortfall is logged as an error naming the bot, the amount and the currency. A steady stream of those means the fee is not being collected.
- Paper bots pay it in simulation, so a paper run predicts live costs honestly. No real money moves.
⚙️ Every setting on the screen now takes effect — review it once
Twenty-four inert controls become live in one update. Open Admin → Trading Bot → Settings after updating and read it top to bottom, because whatever is sitting in those fields is about to start being enforced. In particular:
- Max Bots per User and Max Active Bots per User are now enforced. Users above the shipped defaults (10 and 5) will be refused their next bot until they clean up or you raise the limits.
- Minimum / Maximum Trade Amount now gate real orders.
- Minimum Bot Allocation is enforced at creation.
- Enable Marketplace, Enable Paper Trading and Maintenance Mode are now real switches.
Two settings were removed. Require KYC was a trap: live bots are always gated by the Live Trading Bot Execution verification requirement, and the switch shipped off — so honouring it literally would have removed a protection rather than adding one. Verification is configured under Admin → CRM → KYC, where it always was.
🛡️ Bots that had no risk limits now inherit yours
Bots have been created with the daily-loss limit and the maximum-drawdown limit left empty — not defaulted, empty. Both controls are skipped entirely when unset, so no bot created through the product could ever reach Limit Reached, no matter how badly it performed.
New bots now inherit the defaults from the Risk tab. Existing bots are not modified — their limits stay as they are, so review any long-running bot you expected to be protected. An explicit 0 still means "no limit", deliberately.
🚨 Emergency Stop now closes positions, and becomes usable at all
The fleet-wide stop had two separate faults. It was disabled whenever the running-bot count read zero, and that count was always zero because of the dashboard fault below — so the only fleet-wide stop an operator has was unpressable from the day it shipped. And on the installations where it could be pressed, it set every bot to stopped and closed nothing: positions stayed open with no stop-loss enforcement, working orders stayed live on the exchange, and users' allocated capital stayed reserved. It reported success either way.
- Changed: it is enabled whenever bots are running or paused, the confirmation names the exact number it will stop, and it requires a written reason of at least 10 characters recorded against every bot it stopped. It writes the stop first, then closes what each bot is actually holding, on whichever server process handles the request, and reports how many it stopped, how many it flattened, how many exits are still to fill and how many failed.
The user-facing stop all my bots was rewritten the same way — it previously marked orders cancelled in the platform's own records while leaving the real order live on the book, still holding the user's funds.
📊 Every figure on the admin dashboard was wrong — do not compare it with anything you recorded
The dashboard read its statistics from three names the endpoint has never returned, and stored the reply one level away from where it read it besides. Every headline fell back to the zero in its own default, on every installation, for as long as the screen has existed.
- Changed: the figures are now server-side aggregates over the whole bot table, and the four tiles are different ones — bots running (split into ticking and silent), live capital committed, awaiting moderation, and live bots underwater.
🔐 Seven trading-bot admin screens now need their permission granted per role
None of the seven appeared in the route permission list, so they were reachable by anyone with generic admin access. Worse, the permission each screen declared was not one any endpoint behind it enforces — the screens named access.trading_bot.* while every endpoint behind them checks view.trading_bot.*.
- Changed: the seven screens now require the keys their own endpoints have always enforced —
view.trading_bot.bot,view.trading_bot.log,view.trading_bot.marketplace,view.trading_bot.reviewandview.trading_bot.settings. - What to do: grant them per role in Admin → Roles, the same step a new addon needs. Affected: the bot list and bot detail, the audit log, the marketplace and strategy detail, reviews, and settings.
- Test as a normal admin role, not as Super Admin. Super Admin bypasses permission checks by name, so the owner account will see no difference while every configured role has lost the screens.
🔢 A platform-wide settings bug is fixed
Any number typed as 0 or 1 into any settings screen was being stored as the words "false" or "true" and read back as the built-in default. A cap deliberately set to 1 behaved as 5; a cooldown deliberately set to 0 behaved as 60. Trading-bot settings already saved this way are recovered automatically on read; other extensions' settings will store correctly from now on.
Added
The trading-bot fleet console
At Admin → Trading Bot, in place of the dashboard.
- Added a fleet health meter across the masthead, splitting the bots the platform is supposed to be driving into ticking, not responding and errored. Drafts and deliberately stopped bots are excluded from it — a fleet of nine hundred stopped bots and four stalled ones would otherwise draw the stall as a hairline.
- Added Bots needing attention: every stalled or errored bot, ranked by the live capital allocated to it, with its owner, how long it has been silent and its last recorded error. A stalled bot holding nothing is a support ticket; a stalled bot holding a live allocation is an incident, which is why capital is the ordering.
- Added a stated cap. The table shows ten and says how many there are in total, because a cap that is not reported reads as "this is everything".
- Added Losing their owners money: the five live bots furthest down on realised profit and loss, with trades, win rate and the owner.
- Added the capital figures — how much live allocation is committed across running, paused and limit-reached bots, how much of it is inside open positions, and how much is stranded in a bot that is not responding.
- Added the two moderation queues an admin personally clears — strategy submissions and user reviews — each with the age of the oldest item waiting, and a headline count of both together.
- Added a trade activity chart over the last 24 hours, 7 days or 30 days, split into open, closed, cancelled and failed. The four bands are a partition of every trade created in the period, so the stack's total is a real figure rather than a double count, and empty days are drawn as empty rather than skipped.
- Added a fleet ledger: live and paper counts, paused, stopped by a risk limit, stopped, draft, the live win rate, and trades and failures within the selected period.
- Added a 30-second refresh that stands down while the tab is in the background, so an admin console left open overnight stops re-aggregating the bot table for nobody.
- Added a plain statement of the page's own terms in the masthead: when the figures were generated, and after how many minutes of silence a bot counts as not responding.
Settings that finally exist
- Added five engine settings that never had a screen: Tick Interval, Max Concurrent Bots, Max Concurrent Ticks, Enable Live Trading and Default Paper Balance. The paper starting balance in particular could not be changed from anywhere in the product — every paper account on every installation was funded at 10,000 and there was no way to alter it.
- Added a working Auto-approve strategies. When enabled, a submitted strategy is approved on submission. It will never auto-approve something previously rejected or suspended, never changes the visibility the author chose, and applies the price limits first. Machine approvals stay distinguishable from human ones.
- Added enforcement of minimum and maximum listing price when a strategy is created, edited or submitted. Free listings stay legal regardless — the minimum applies to paid listings.
- Added a kill switch for live trading. Turning Enable Live Trading off refuses the creation, start and resume of live bots while leaving paper trading untouched.
- Added Super Admin protection on the fee, live-trading and enable switches, matching how the platform already protects withdrawal and fee controls.
The kill switch records why the fleet was stopped
- Added a required reason, at least 10 characters, written to the audit trail of every bot the stop touched — so opening any one of those bots later shows why it stopped and who stopped it. Stopping the fleet previously left no trace at all beyond the bots' own status change.
- Added the stopped count to the response, so the confirmation reports the number of bots that were actually stopped. It previously read a count the endpoint never sent, which is why it always said zero.
- Added a real confirmation dialog naming the exact number of bots, replacing a browser prompt that named none and was hardcoded English.
Changed
- Changed Maintenance Mode to gate users, not just the engine. During maintenance a user cannot create, start or resume a bot. They can always stop, pause, delete and view — being unable to stop a bot during maintenance would be worse than the problem it solves.
- Changed the marketplace switch so turning it off no longer breaks the Strategy Builder. Listing, buying and reviewing stop; authoring and editing your own private drafts continue.
- Changed the maximum trade amount to apply to entries only. A position larger than the ceiling can always still be closed by its own strategy — otherwise lowering that setting would have trapped every oversized position on the platform at once.
- Changed the engine's bot cap so it never strands money. A bot holding an open position or a working order is taken on even when the engine is at its limit, because refusing it would leave that position with no stop-loss enforcement.
- Changed the default stop-loss and take-profit shown on the screen to 10% and 20% — the values bots have always actually been created with. The screen used to display half of each.
The admin dashboard can be translated at all
- Changed every string on the screen to come from the translation files — 47 phrases, added to all 90 locale files. The page title, all four card labels, both panel headings, every empty state and the stop confirmation were previously compiled into the page in English, so no locale could reach any of them.
- Changed the numbers and dates on it to a single pinned format. A bare locale-default number takes its grouping separator from wherever it is rendered, so the same figure came out as
50,000on the server and50.000in the browser.
One definition of a silent bot
- Changed the console and the automatic stale-bot detector to share one five-minute threshold rather than each holding their own copy. The console states the threshold on the page, so the rule it is judging by can never describe something the server does not do.
Bot and strategy detail pages keep their shape while they load
- Changed the admin bot detail and marketplace strategy detail screens so their headings, labels, borders, tiles and fact grids render immediately and only the values wait. Each previously replaced the entire page with a centred spinner and then rebuilt roughly a thousand pixels of layout in a single frame — across four headline tiles, three fact grids and twenty-four label/value pairs between them.
Fixed
Live bots kept no record of their own trading
A live bot never updated its own totals — trades, profit, volume, fees, or the time of its last trade. Because the daily-loss limit, the maximum-drawdown limit and the cooldown are all read from those figures, none of the three could ever fire on a live bot, however badly it performed. Every statistic on screen read zero for a bot that had traded all day.
- Fixed: a live bot is accounted as each fill settles. The three limits work, and the numbers on screen are real.
Paper trading ignored entry fees, and reported profit on losing round trips
A simulated buy never deducted its fee from the paper balance, and a round trip's profit subtracted only the exit fee, never the entry one. A paper run therefore reported roughly half the cost a live run would pay — and the recorded profit could not be reconciled with the recorded fees at all. The larger the fee, the more a losing strategy looked like a winning one.
- Fixed: both legs are charged and both are subtracted, on the paper balance, the trade's profit and the bot's totals. Existing paper accounts will look slightly worse from now on — that is the correction, not a regression.
Exit fees used a fixed 0.1% regardless of the market
Every stop-loss, take-profit and manual close priced its fee at a flat 0.1%, ignoring the rate configured on the market. On any market with a different taker rate the recorded exit fee, and therefore the recorded profit, was simply wrong.
- Fixed: exits use the market's configured rate, plus the trading fee if you set one.
A stop-loss could liquidate positions whose stop was never hit
A breached stop placed a fresh exit on every cycle until the first one filled, and each was sized for the whole position. A bot holding three lots could have all three sold because one lot's stop was hit — paying the spread and fees three times over.
- Fixed: a lot already covered by a working exit does not re-trigger.
Paid strategy purchases failed every time
The buyer's charge and the seller's payment were filed under the same reference, which the ledger rejects as a duplicate. Every paid purchase threw an error and rolled back. Nobody was ever charged, but nobody could ever buy either, and no seller has ever been paid. Free strategies were unaffected, which hid it.
- Fixed: each side of the payment carries its own reference. Paid purchases complete.
"My Purchases" failed on every call
The list sorted by a column that does not exist, so both the user's purchases page and the admin purchases list returned an error every time they were opened, for every user, on every installation.
- Fixed: both list correctly.
A strategy's owner could edit fields that were not theirs to edit
Everything sent with a strategy edit was written straight to the listing, not just the fields the form offers. That included the featured flag, the rating, the purchase count, the recorded revenue, the owner — and the currency, which was not checked for re-approval, so an approved "100 USDT" listing could be switched to "100 BTC" and buyers charged in it.
- Fixed: only the fields the form actually offers are written, and a currency or strategy-configuration change now sends the listing back for review.
Revenue figures on the admin strategy card were always zero
The platform's share of each sale was never recorded against the strategy, and total revenue was booked net of the fee rather than gross. The revenue column read 0 while the fee was really being collected.
- Fixed: gross revenue, creator earnings and platform earnings are each recorded.
Paper trading reported healthy numbers on failure
A paper account that could not be read returned a fabricated healthy balance of 10,000, and a reset that failed answered "reset successfully". A legitimately emptied account also reported 10,000 rather than zero, so its performance showed 0% instead of a total loss.
- Fixed: real balances are reported, and a failed reset says so.
The engine could be left running on stale configuration
Engine settings were read once at startup, so a change to the tick rate never reached a running engine.
- Fixed: the engine picks configuration changes up on its periodic sync.
Every headline on the admin trading-bot dashboard read zero
- Fixed the dashboard requesting statistics under three names the endpoint has never returned, and storing the server's reply one level away from where the page read it. Total Bots, Active Strategies, Today's Trades and Month Revenue each rendered the zero in their own fallback, on every installation, permanently. See Upgrade Notes.
- Fixed both panels on the page — the bot list and the recent-activity rail — sitting on their empty states for the same reason, so an installation with a full audit trail was told No recent activity.
- Fixed the shortcut to the moderation queue in the page header, which appeared only when the pending count was above zero and therefore never appeared, on any installation, however long the queue was.
The admin kill switch could never be pressed
- Fixed Emergency Stop All being disabled whenever the running-bot count read zero — which it always did, for the same reason as above. The only fleet-wide stop an operator has was unusable from the day it shipped, and the failure was silent: the button was simply greyed out on a page that also claimed no bots were running. See Upgrade Notes.
A licence check blanked the entire trading-bot back office
- Fixed the licence check wrapping the site header, the section navigation, the page and the footer instead of just the licensed content, so while one licence call was in flight the whole back office was replaced by a single centred spinner — with no navigation to leave by.
- Fixed the section's page frame not reserving a full-height column, which left the footer resting wherever the content happened to end and travelling down the page as each screen's data arrived.
Smaller corrections
- The engine no longer writes a malformed entry into the shared settings cache that could pin every other process on stale settings.
- A failure while shutting the fleet down can no longer leave the engine dead but reporting itself healthy until the server is restarted.
- The user dashboard's limits came from a lookup that always missed, so it always displayed built-in figures rather than yours.