Algo Trading Bots 6.0.0

28 July 2026

This release has upgrade notes. Read them before updating — they describe behaviour changes that need your attention.

ALGO TRADINGSTRATEGIESTRADE TERMINALBOT TERMINALTRADING ENGINEORDER EXECUTIONALLOCATIONSRISK LIMITSMARKETPLACEKYCSECURITYLIVE UPDATESDESIGN SYSTEMAUDIT LOGSADMINBUG FIXESBREAKING CHANGES

Algo Trading Bots v6.0.0

Release Date: July 28, 2026 Tags: ALGO TRADING, STRATEGIES, TRADE TERMINAL, BOT TERMINAL, TRADING ENGINE, ORDER EXECUTION, ALLOCATIONS, RISK LIMITS, MARKETPLACE, KYC, SECURITY, LIVE UPDATES, DESIGN SYSTEM, AUDIT LOGS, ADMIN, BUG FIXES, BREAKING CHANGES

Overview

Version 6.0.0 brings bot creation into the trade terminal itself. Instead of navigating to a separate page, your users pick a strategy, tune it against the live price, fund it and launch it beside the chart they are already looking at.

It also makes the engine trade at all. Before this release a bot could not obtain a price on any market, could not read its own strategy settings on MariaDB installs, and in Live mode never placed an order — it assumed a full fill at the quoted price and moved the user's Spot wallet directly, which is not the wallet a bot order draws on. Grid bots crossed the spread on every leg instead of resting the ladder they exist to rest, trailing stops never trailed, and every strategy's own exit signal was rejected before it could reach the book.

It also changes what an allocation is: setting one no longer moves money. Funds stay in the user's Ecosystem wallet and are held by the matching engine only against a real order, so allocating 1,000 and trading it no longer costs the user 2,000 — see Upgrade Notes.

Requires Core v6.5.8.

Update Instructions

pnpm updator

Upgrade Notes

Allocating funds to a bot no longer takes money out of your wallet

Add allocation debited the user's Spot wallet and remove allocation credited it back — and every live buy then debited Spot again for the trade itself. Allocating 1,000 and trading it took 2,000 from the user. The debited money was never held against anything, and could not have backed a bot order in any case: bot orders hold from the Ecosystem wallet.

  • Changed: an allocation is now a spending cap, enforced when an order is placed. Setting or lowering one moves no money. Funds stay in the user's Ecosystem wallet and are held there by the matching engine only against a real order, so a cap costs nothing to set and cannot double-spend. A cap above the Ecosystem balance that has to back it is still allowed — a user may reasonably set the cap now and fund the wallet later — and the confirmation says so plainly rather than letting them discover it from a bot that mysteriously never trades.
  • What operators need to know: the add and remove dialogs now mean something different. They raise and lower a limit; they do not move funds. Money the old flow debited from Spot is not returned automatically — if your users allocated funds under a previous version, reconcile those balances by hand.

Added

Algo Trading panel in the trade terminal

  • Added an Algo tab beside Standard and AI Investment in both the regular trade page and the Pro workspace order form.
  • Added a Bots tab in the bottom orders panel, next to Open / History / Trades. Filtered to the symbol on screen by default, with status, allocation, profit, win rate and trade count, plus inline start, pause, stop and delete. Refreshes every 10 seconds.

Five strategy families are available:

  • Grid Trading: buy low and sell high automatically across a price range. Best in ranging markets.
  • DCA: accumulate a position with fixed buys on a schedule.
  • Signals: trade RSI, MACD, Bollinger Bands and moving-average crossovers.
  • Trailing Stop: follow the price up and exit on a defined pullback.
  • Custom: your own parameter set.

Panel behaviour:

  • Price-Seeded Defaults: parameter forms are seeded from the live price of the open symbol, so a grid's range or a trailing stop's distance starts somewhere sensible instead of at zero.
  • Risk Presets: Conservative, Balanced and Aggressive fill in stop-loss, take-profit and exposure limits in one click.
  • Projection Before Commit: shows expected order count, capital per order and profit per grid step before anything is created.
  • Paper Or Live: run against a simulated balance or a real allocation.

Bot Terminal: open any bot on a full-screen chart

Every bot's detail page gains a Terminal button that opens that bot on a full-screen chart of its own market, with the strategy drawn onto the price axis instead of listed in a table.

  • What the chart shows: the strategy's price levels, its working and filled orders, every trade it has made, its net position, and the indicator series it actually evaluates.
  • A control dock on the chart: start, pause, resume, stop and flatten, without leaving the page.
  • Live, and honest when it is not: ticks, fills, order changes and status changes arrive over the real-time connection as they happen, with a 15-second refresh for the values that have to be recalculated after a fill. On deployments that run several worker processes — where a tick raised by the engine may never reach the page — that refresh is what keeps the terminal correct.
  • Works on a stopped bot too: a stopped bot can still be holding inventory, so the terminal opens and the dock stays usable.

Grid bots now rest real limit orders instead of taking the market

A grid strategy exists to earn the spread between its rungs. Until now it crossed the market on every leg and earned none of it: the ladder declared a limit price, that price was silently clamped to the market and filled immediately, and no order was ever recorded at all.

  • The ladder goes on the book: each rung rests as a real limit order and earns the spread when the next rung fills against it.
  • Working orders are tracked, so a rung that fills partly, expires or is cancelled outside the bot is picked up on the next tick.
  • Stopping a bot cancels its orders on the exchange, not just in its own records.
  • Taking the market is still available for a grid configured that way, and only that mode keeps the old rule of ignoring a rung more than 0.5% away from the current price.

Bot screens update live

The extension's real-time connection only ever answered questions it was asked. Nothing in the product ever pushed an update to a screen, so every figure a user saw was as old as their last manual refresh.

  • Added a heartbeat on every tick, plus fills, order changes, status changes and profit counters, on both a per-bot channel and an account-wide one. Ownership is checked when a screen subscribes, so a user can only follow their own bots.

Verification can now be required for bots, live mode and the marketplace

Four new verification requirements are available under Admin → CRM → KYC, so an operator decides how far an unverified user gets.

  • Trading Bot Access: the dashboard, the bot list, the tradable markets and the marketplace listing.
  • Live Trading Bot Execution: creating, starting or resuming a bot in Live mode. Paper trading never requires it, so an unverified user can still learn the product end to end.
  • Strategy Marketplace Purchases: buying a paid strategy. A strategy already bought is never gated.
  • Become a Strategy Seller: submitting a strategy for marketplace review.
  • Users are told, in place: someone below the requirement sees an explanatory notice on the page rather than an empty list or a silent refusal. The marketplace detail page still sells to an unverified visitor, so they can see what they would be verifying for.

Flatten: close a bot's open positions on demand

A stopped bot could still be holding inventory, and the only way to clear it was to restart the bot and hope a strategy signal closed it.

  • Added Close position to the terminal's control dock. It closes everything the bot is holding, including on a bot that is already stopped, through the same path a stop-loss uses. If the close genuinely fails — a price feed outage, for instance — the request reports an error instead of claiming success with the position still open.

Bots now say why they are not trading

A bot sitting at its concurrent-trade limit, out of allocation, or refused by a market's minimum order size looked exactly like a bot running normally.

  • Added a recorded reason against the bot, shown in the terminal's cockpit, which clears itself once the bot trades again. It is deliberately not counted as an error, so a bot waiting for room is never mistaken for a bot that is failing. Repeated identical log lines are throttled to once every five minutes per distinct reason.

Strategy listings now show the markets they were built for and a risk level

Both fields were stored on every strategy, the recommended markets were always saved empty, and neither was ever shown to a buyer.

  • Added the market a strategy expects and how aggressive it is to its listing, so a buyer can judge it before paying, and deploying a purchased strategy can preselect the right market. Builder drafts now save as private until their author submits them.

New landing page for the extension; the dashboard moved

The extension's front page rendered the dashboard for everyone, so a logged-out visitor arrived at an authentication error sitting above four empty statistic cards. The extension had no shopfront at all.

  • Added a landing page that explains and sells automated trading, in line with the other extensions. The dashboard moved to its own address and is reachable from a new Home entry at the top of the extension menu.

A user's trading bots on their CRM profile

  • Added a user's bots to their profile under Admin → CRM → Users — owner, name, market, type, mode, status, allocation, profit and trade count — instead of having to filter the global bot list by hand.

Changed

Trading-bot screens rebuilt on the platform design system

The dashboard, bot list, bot detail, marketplace, creator dashboard and strategy builder, plus the admin overview, settings, bot and marketplace screens, moved off one-off colour utilities and fake-elevation effects onto the platform's shared surfaces, status badges, statistic cards and empty states.

  • They match the rest of the product, and stay legible in light mode — several badges and titles were previously below readable contrast there.
  • The bot list behaves like an empty page when it is one: the filter bar is hidden until the account actually has bots, and there are now distinct empty states for "no bots yet" and "nothing matches these filters", plus a control to clear the filters.

Smaller changes:

  • Changed the extension menu into Bots (My Bots, Create Bot) and Strategies (Strategy Builder, Marketplace, Creator Dashboard).
  • Changed the user-facing bot guide, rewritten with a sidebar that tracks the section currently in view.
  • Changed the Strategy Builder's condition and action rows to a labelled grid. They were an unlabelled line of fixed-width dropdowns that clipped long option names and wrapped raggedly on anything narrower than a desktop; each row is now a responsive grid of labelled fields — Indicator, Operator, Compare to and Value for a condition; Action, Size, Amount and Order type for an action — reflowing to one, two or four columns.
  • Changed the admin bot list to take the same filters as the rest of the admin lists, so search and sorting behave the same in both places.

Engine instances leaked on multi-worker deployments

On deployments that run several worker processes, only the main worker actually runs bots — but every worker kept its own copy of each started bot in memory, one per start request, for the life of the process.

  • Changed the engine so a bot is only held in memory on the worker that runs it.
  • Changed a standing condition re-derived every five seconds to be logged at most once every five minutes per distinct message, instead of roughly 17,000 identical lines a day per bot.

Fixed

Security

Trade history could return another user's trades

Supplying someone else's bot identifier replaced the ownership check rather than narrowing it, so the request returned that bot's entire trade history. The only thing hiding the hole was a second fault in the same place: the screen asked for a profit figure that is not stored under that name, so it failed on every call and nobody ever got as far as exploiting it. The summary totals were also filtered on a state a trade can never be in, so they always read zero.

  • Fixed the ownership check, so a supplied bot identifier narrows the user's own bots and can never reach beyond them, the profit figure is read correctly, and the summary counts closed trades. Trade history loads, and its status filter now offers the states a trade can actually have.

Editing a bot would write any field sent with the request

Everything sent with an edit was written straight onto the bot, not just the fields the form offers. Extra values sent alongside the form's own could zero a bot's in-use capital to release its entire allocation, flip a paper bot to live, rewrite its recorded profit, change its status, or reassign it to a different user.

  • Fixed the edit path so only the settings the form actually offers are written — name, description, strategy settings, position size and concurrent-trade limits, stop-loss and take-profit, loss limits, drawdown and cooldown. Allocation is deliberately excluded, so it can still only move through the audited add and remove paths.

Free strategies were published straight to the marketplace with no review

A strategy priced at zero was approved automatically the moment it was created, and its visibility is chosen by whoever submitted it. Anyone could publish arbitrary content to the public marketplace with no review whatsoever.

  • Fixed the approval path so every listing, free or paid, starts as a draft and enters the admin approval queue before it can be seen.

Rejected and pending strategy reviews were public and moved the star rating

The public review list filtered only by strategy, so the entire moderation queue — reviews awaiting approval, and ones an admin had explicitly rejected — was served to every visitor, and the star rating averaged all of them. A rejection was undone again by the hourly rating job within the hour, and a brand-new unmoderated review could move a strategy's public rating on its own.

  • Fixed the review list and the rating so only approved reviews are listed and only approved reviews count — in the list, in the rating calculation and in the hourly job. A strategy left with no approved reviews falls back to no rating instead of keeping its old one.

No bot could get a price, so no bot ever traded

Bots did nothing at all. Pricing looked for an ecosystem market using the whole pair — "BTC/USDT" — in a place that only ever holds "BTC", and then read price, bid and ask figures that are not kept there in the first place. The fallback meant to derive a price from recent candles asked a source that has never existed in the product. Every tick ended in "Price unavailable" before any strategy was reached, so no strategy ever saw a candle, and nothing anywhere reported a fault.

  • Fixed pricing so it reads the live ecosystem market price and the ecosystem's own candle history, giving a bot both a price and the bars its strategy needs on every tick.

Live mode never placed a real order — it moved the wrong wallet instead

A bot in Live mode never put an order on the book. It read a price, assumed a complete fill at exactly that price, and moved the user's Spot wallet directly. Nothing reached the matching engine, the recorded fill price and fee were invented, and Spot is not even the wallet a bot order draws on — bots trade Ecosystem markets, which hold from the Ecosystem wallet.

  • Fixed live mode so a bot places a genuine order on the ecosystem order book and records the fill that actually happened, at the real fill price and the real fee. Orders still working on the book are reconciled on each tick, so partial fills, expiries and cancellations made outside the bot are all picked up.

Strategy settings were unreadable on MariaDB, so every strategy did nothing

On MariaDB installs a bot's saved strategy settings come back as raw text rather than as data, and all five strategy families read their settings straight off it. Grid bounds, DCA interval, trailing distance and indicator selections were simply absent — grid bots computed unusable ladders, DCA never bought, trailing stops trailed by nothing and indicator bots had no indicators. Nothing raised an error for any of it.

  • Fixed strategy settings, which are now normalised at the single point where every strategy is built, so all five families read the values the user actually saved, on both supported databases. The trailing stop's own saved progress, which had the same problem, is read the same way.

Position sizes were computed by comparing quantities against cash limits

The position limit and the allocation limit are cash amounts, and both were compared directly against an asset quantity. On a token priced around 0.001 a limit of 400 became 400 units — pennies of actual trade. On a token near 64,000 the same limit produced an order the risk check rejected forever, and the bot stalled without ever placing anything.

  • Fixed sizing so both limits are converted to a quantity at the current price before an order is sized, and orders come out right on any market at any price. The minimum trade size now follows the configured Minimum Trade Amount instead of a fixed value of ten.

Every strategy exit was silently blocked

Trailing-stop, indicator and custom strategies express an exit as "sell the whole position", and nothing ever expanded that into a real size. The risk check saw a zero-value trade and rejected it, so a bot could enter but never leave on its own signal. The limit on concurrent trades was applied to sells as well, so a bot at its limit refused its own exit and deadlocked.

  • Fixed exits so a sell with no size is expanded to the bot's actual open position before the risk check runs, and the concurrency limit applies only to new entries.

Strategies from the Strategy Builder or the marketplace could never be started

The visual builder saves its rules in one shape, and the engine could only read another — a node graph nothing in the product has ever written. Starting a custom or purchased strategy therefore failed every time. Several of the older rule checks were wrong on top of that: a price condition never matched, a profit condition was always true, a percent-change-over-N-periods reading always came out near zero, and a rule set with no conditions counted as satisfied.

  • Fixed rule reading, so rules are read in the shape the builder actually writes, with crossovers evaluated against the bar before the current one, and the four broken checks corrected. Strategies authored in the builder and strategies bought from the marketplace start, and fire their rules.

The allocation entered when creating a bot was thrown away

Every create screen collects an allocation, and creation pinned it to zero regardless. Starting the new bot was refused with "Bot has no allocated funds", and every buy was rejected, until the user found the allocation dialog on the bot's detail page.

  • Fixed creation so the allocation entered is the allocation the bot gets. A new bot is usable straight away.

Bots were created with no stop-loss or take-profit at all

Bots created through the wizard, through the Algo panel and through a marketplace purchase were all saved with both fields empty. Trades therefore carried no stop and no target, and the stop-loss and take-profit check could never fire on anything. A DCA bot was a one-way accumulator, and a trailing-stop bot whose price fell straight from entry had nothing protecting it — that strategy never attached a stop or target of its own either.

  • Fixed the defaults, so a 10% stop-loss and a 20% take-profit apply when none is given, on all three creation paths. An explicit 0 is still honoured as a deliberate "no stop" rather than being replaced. Trailing-stop entries now carry the bot's configured stop and target as well.

Emergency stop and risk-limit stops abandoned the position they existed to protect

Hitting the kill switch, or breaching the daily-loss or drawdown limit, changed the bot's status immediately and left the position open. Stop-loss and take-profit are only evaluated while a bot is running, so the position was left with no protection at all and its capital tied up — the loss the limit existed to cap kept growing.

  • Fixed both paths to close the open position first and change the status afterwards.

Deleting one bot stopped every other bot on the install

Bots are kept after deletion rather than erased, so a deleted bot still resident in the engine became a broken instance that raised an error whenever the engine asked it for its state — and it did so before the engine reached the step that would have removed it. The whole engine froze until the server was restarted, and every other user's bots stopped with it.

  • Fixed deletion so a deleted bot is detached from the engine before its record goes, detached instances are evicted at the top of each cycle, and the engine's status report can no longer be brought down by a single bot. Eviction now also covers bots that have errored, hit a limit, or been returned to draft.
  • Fixed the flood of database errors written to the server log after a deletion. An audit entry for a bot that is already gone is an ordinary race, and is now a single warning line.

Maintenance mode stopped the whole fleet permanently, and a failed engine start never recovered

Turning on Maintenance Mode wrote a stopped status onto every bot on the install, and the engine would not adopt those bots again when the window ended — so every user had to restart their bots by hand. Separately, one transient failure to start the engine disabled every bot until the server was restarted, while the scheduled job that had just failed reported success.

  • Fixed maintenance so a window suspends the engine without touching anyone's chosen status, and bots are picked back up afterwards. Bots left in an errored state are restarted alongside stopped ones, and a failed start is recorded as a failure instead of being swallowed.

Strategy purchases never completed — buyers were charged and got nothing

The buyer was debited, the seller credited and the platform fee taken, and the purchase was then left in a pending state that nothing ever advanced. Every screen that checks ownership requires a completed purchase, so the strategy did not appear under My Purchases, could not be deployed as a bot, did not make the buyer eligible to review it, and the same user could be charged for it again.

  • Fixed both the free claim and the paid purchase so they are recorded as complete, and access is granted the moment payment succeeds.

Trailing stops never trailed and never fired

The peak price the stop trails from, and the flag that arms it, are saved with the open trade — and on MariaDB installs that came back empty. The peak reset to the entry price on every tick, dragging the stop down with it, and the exit check stayed permanently disarmed.

  • Fixed the saved progress so it is read correctly, the peak can no longer move below the entry price, and the exit fires on a real retracement. The bot's configured stop-loss and take-profit are attached to the entry as well, which this strategy alone never did.

Grid bots proposed sells with nothing to sell, and lost rungs permanently

A flat grid bot whose price sat in the upper half of its range emitted an unusable sell on every tick and could never work its way down to the buy rungs below — it appeared to run forever and did nothing. Rung state was held in memory and marked used before an order was even placed, so a rung the engine refused was skipped for the life of the process. The maximum-drawdown limit also had no starting equity to measure against, so it never triggered.

  • Fixed the grid so a sell rung is only considered when the bot actually holds inventory; rung state is read back from the bot's own orders and trades on every tick, so a refused rung is retried rather than lost; and a bot's peak equity is seeded from its allocation, so the drawdown limit works from the first tick.

Indicator bots traded on unfinished candles, and the exit-mode setting did nothing

The in-progress bar was included in every evaluation, so the same crossing was re-evaluated on every five-second tick within that bar — around 720 times on an hourly timeframe, and every true evaluation was a real order. A mid-bar dip that recovered before the close still closed the position. Separately, the exit mode choice — indicator, take-profit or both — was offered in the form and never read by the engine, so all three behaved identically.

  • Fixed evaluation so only closed bars are used and a signal fires once, on the bar that actually crossed. Exit mode now changes behaviour, including leaving stop-loss and take-profit off entirely under indicator.

DCA burned scheduled buys on rejected trades, and its entry filters failed open

The schedule advanced whether or not the trade landed. One "insufficient funds" skipped a whole interval, and enough of them permanently exhausted the bot's maximum number of buys — leaving it bricked even after the user topped up. The below-moving-average and RSI entry filters passed automatically whenever candle data could not be read, so the bot bought anyway on exactly the reading it had been told to wait for.

  • Fixed the schedule so it advances only once a trade actually executes. Both filters hold rather than pass when they cannot read the market, and the RSI reading follows the bot's own cadence — hourly bars for an hourly bot, daily for a daily one — instead of a fixed one.

Paper trading balances were wrong in several ways at once

Four faults at the same time. A winning paper round trip credited both the exit proceeds and the profit, roughly doubling every gain. The paper balance was picked by user alone, so a bot trading one currency could move the balance held in another. Stop-loss, take-profit and manual closes never touched the paper balance at all — the account was debited on entry and credited nothing on exit, so it decayed towards a fake catastrophic loss. And paper trades were stored as though they were live, in a state nothing downstream could see.

  • Fixed paper balances — the balance is selected per currency and locked while it is updated, a close credits the proceeds once, every close path settles the paper account, and paper trades are stored as paper and as open. Paper balances now reflect real simulated performance.

The list of tradable markets failed to load on every call

The market list asked for a symbol, a price and a change figure that ecosystem markets do not carry, and sorted by a volume figure they do not carry either. It failed every time, so the market picker on the create screen was always empty and no bot could be created from it.

  • Fixed the market list so markets are read as they are actually stored — pair by pair, hot and trending markets first — and each one's price is resolved live.

Bots could be created on markets the engine cannot trade

This extension runs on ecosystem markets end to end, and nothing checked that at creation. A bot on any other pair was accepted and started, then priced nothing and traded nothing forever, with no error shown anywhere.

  • Fixed creation so it fails immediately, with a clear message, if the chosen market is not an active ecosystem market. The check is skipped only on installs without the Ecosystem extension.

Bot creation

  • Fixed Grid bots failing on every attempt. The creation wizard did not send its settings in the form the engine expected, and any dropdown the user did not touch was submitted empty — so the bot was rejected every time. Every value shown in the form is now the value that is actually saved.
  • Added instant validation in the form, so a missing setting is flagged as you type instead of failing after you press Create.
  • Fixed a shared link carrying a strategy the wizard cannot configure producing an "Invalid bot type" error. Unsupported values are now ignored.

Numbers shown on screen

  • Fixed crashes on the bot list and detail screens caused by the figures arriving in a form the interface could not format.
  • Fixed current balance, available balance, profit percentage and win rate showing as blank or zero. They are now calculated correctly.
  • Fixed available allocation being reported incorrectly. It is now allocated funds minus funds currently in use.

The stale-bot detector flagged healthy bots and missed the ones that never started

The check ran even when the engine itself was not running, so users were told perfectly healthy bots had stopped responding. A bot the engine had never picked up was invisible to it and sat as "running" forever, doing nothing. And a bot marked as errored kept ticking, placing real orders behind the user's back.

  • Fixed the check so it only runs while the engine is running, catches bots that have never ticked as well as ones that stopped, works in batches of 200, re-checks each bot at the moment it writes, and actually stops the bot it flags.

The nightly statistics run interfered with running bots and filed profit against the wrong day

The run held every bot record locked for its entire duration. The engine's own writes queued behind it, timed out, and were counted as bot failures — so a housekeeping job could push bots into an error state. Daily profit was also attributed to the day a trade opened, so a day whose only activity was a close was recorded as having none, which carried the previous day's loss forward and tripped the daily-loss limit on the next tick. Paper performance was recorded as though it were real money.

  • Fixed the run so it works through bots in pages of 100, each page short-lived and isolated so one bad bot cannot take the rest down; profit counts trades that opened or closed within the day; and paper results are recorded as paper.

Admin settings were ignored by the user dashboard

The user-facing dashboard looked up its settings under a name nothing has ever written, so the lookup always missed and built-in defaults were served no matter what an admin configured. Enable Paper Trading, Enable Marketplace and the rest of Admin → Trading Bot → Settings had no effect there.

  • Fixed the dashboard so it reads the same settings the admin screen writes and the engine already used. On installs that have never saved that screen, a fabricated "disabled" setting is also no longer published into the shared settings cache.

Partially filled orders could never be recorded

The value used for a partly filled order was not one of the values the database accepts, so writing it either failed outright or was silently blanked.

  • Fixed partial fills so they are recorded correctly — which matters now that bots rest genuine orders on the book.

The My Bots list ignored paging

The list offered one set of paging controls but read a different one, so every page came back with the same first 50 bots and a user with more than 50 could not reach the rest.

  • Fixed the list so both forms are accepted and it reports a complete page count, so paging works.

Audit logs

  • Fixed the audit log being missing from the product entirely — a packaging mistake meant the feature was never included in the release. It is back: a filterable, searchable list of every bot action with action-type and entity counts, plus a detail view.
  • Fixed the log detail "Previous Value" panel never showing anything.

Force-stopping a bot stranded the user's capital

Force-stopping a bot mid-position left the position open and its capital marked in use. Deallocation only pays out what is not in use, so that capital could not be recovered — and the bot was no longer running to close the position itself.

  • Fixed force-stop so it closes the open position as well. If the close fails, the failure is recorded against the bot rather than lost.

Lists and filters

  • Fixed search on the bot list, strategy list, marketplace and reviews screens, which returned an error instead of results.
  • Fixed search replacing the other filters instead of combining with them. Search now works alongside the status, type, mode, visibility and owner filters.
  • Fixed an error when sorting the marketplace by certain columns.
  • Fixed the marketplace tag filter returning nothing.
  • Fixed seller dashboard figures (revenue, purchases, average rating) failing to display.
  • Fixed review moderation notes never being shown. The list displayed a moderator, a moderation note and a moderation time, none of which are stored on a review, so all three always rendered blank and an admin could not see the rejection reason another admin had written. It now shows the note the reject action actually saves, and the time the review was last acted on.

Smaller corrections

  • Fixed the marketplace strategy detail page running the full width of the window and sitting under the fixed header, unlike every other page in the section. It now uses the same page frame as the rest of the section.
  • Fixed navigation labels in the trading-bot section and its admin area falling back to raw English in every language, because both layouts asked for their translations under a name that does not match the translation files. Both resolve correctly, so the menus translate with the rest of the product.
  • Fixed the weekly clean-up of old audit entries and orders deleting everything in one sweep, which on a busy install could hold locks long enough for the engine's own writes to time out and push bots into an error state. It now deletes in batches of 5,000.