We'd rather you know before you buy.
ApexQuant reads the market on two levels. Minute-to-minute, it scores price action across eight technical factors — moving averages, momentum, volatility, support and resistance, and volume. On top of that, it weighs the bigger picture: market regime, the Fear & Greed index, macro and FOMC conditions, futures funding, and the 200-week moving average — a long-term gauge of whether price is sitting below historical support or stretched well above it. These shape how cautiously or confidently the bot sizes its positions; they do not make promises about outcomes.
How to estimate for YOUR setup: use the dashboard's Backtests tab (Pro+). Run your chosen strategy and parameters against 2β3 different historical periods (a bull leg, a bear leg, and a sideways stretch). The variance across those backtests is far more informative than any single number β it tells you the realistic range of outcomes, not just the best-case.
What we DO promise:
Standard disclaimer: Cryptocurrency trading involves substantial risk of loss. Past performance β including backtests β does not predict future results. ApexQuant does not provide financial advice or guarantee any outcome. Trade only with funds you can afford to lose.
| Cost component | Trial | Starter | Pro | Elite |
|---|---|---|---|---|
| Licence | Free | RM30/mo | RM61/mo | RM91/mo |
| VPS hosting | ~$5/mo (RM23) or local |
~$6β10/mo (RM28β47) |
~$8β12/mo (RM37β56) |
~$10β15/mo (RM47β70) |
| Binance trading fees | β (Testnet) |
0.1%/trade | 0.1%/trade | 0.1%/trade |
| AI API spend (optional) |
β | β | β | ~$5β30/mo (RM23β140) |
| TradingView Pro (only for the TradingView webhook, coming soon) |
β | β | ~$14.95/mo (RM70) |
~$14.95/mo (RM70) |
| Total est. (excl. Binance fees) | RM0β23/mo | RM58β77/mo | RM98β187/mo | RM161β371/mo |
Notes:
TRADING_MODE) to TESTNET in Dashboard β Bot Config. The bot connects to testnet.binance.vision with testnet API keys. Testnet uses fake money and real order flow mechanics β it's the recommended way to validate your configuration before going live. Get testnet keys from testnet.binance.vision.
TRADING_MODE) = PAPER): Fully local simulation. No connection to Binance. The bot simulates buys and sells against live price feeds using a virtual balance. No API keys required beyond a read-only price feed connection.TRADING_MODE) = TESTNET): Connects to Binance Testnet with real order-flow mechanics but fake funds. Requires Binance Testnet API keys. Closer to live behavior than PAPER mode.
git pull in the running directory): stop the bot, extract the new version, run the updater, and your config and keys carry over — keep the old copy for 24 hours until you confirm the new version is stable. We also email licensed customers when a new version is released.
You only need Futures for funding-rate harvest. Everything else in ApexQuant works without it, so if you don't use harvest you can skip the futures key.
Whichever key gets Futures has to meet Binance's conditions, listed in Why can't I turn on Futures for my Binance API key?
You can use one key for spot and Futures, or a second key just for Futures: ApexQuant uses a separate Futures key when you give it one, and otherwise the same key as spot. Enter the keys via apexquant --config-gui (Binance panel).
Binance only allows it when all of these are true:
You only need Futures for funding-rate harvest. Everything else in ApexQuant works without it.
apexquant --config-gui (Binance panel β Spot Trading enabled, VPS IP whitelisted). Note: SWING mode requires Pro tier or above.
.env. Settings are saved to the database and persist across reboots..env (SSH only): Binance API keys, AI provider key, Dashboard password, Telegram token, Session secret.[RECONCILE] log lines when it runs. No action needed from you under normal conditions.
Yes β this is your responsibility. Linux receives security patches regularly (kernel, networking, system libraries). ApexQuant cannot protect against operating system vulnerabilities. Run apt update && apt upgrade -y monthly, and reboot if a kernel update was installed. See guide section 1.6 β Keep Your VPS Patched for the full procedure including unattended-upgrades setup.
Currently Spot trading only, in USDT or USDC pairs: you choose one currency for your account. The Harvest module uses funding rate data from perpetuals but does not open futures positions β it only holds hedged spot positions to collect funding. Futures/perpetuals support is on the roadmap.
USDT and USDC. Your account trades in one of them at a time: you pick it during setup, and you can switch later in Settings (the Base currency setting). All prices, budgets and profits are then shown in that currency.
If your Binance account also holds the other stablecoin (say you trade USDC and still have some USDT), ApexQuant never touches it. It is listed under "Other (not managed by ApexQuant)", valued at today's exchange rate, and counted in your wallet's grand total, but never in the bot's equity or in the money the bot trades with.
The Grand Total card on the Holdings tab is headed “Grand Total (Base currency: USDT)” (or USDC). The big figure is what the account side of your wallet holds: your base currency's cash plus the other coins, valued in the base currency. Another stablecoin is never converted into that figure: it is shown on its own line in its own unit (for example “3,000.00 USDC”), and a small line at the bottom gives the whole wallet at today's rates. Only when one other stablecoin holds more than the whole account side does the big figure become that stablecoin, in its own unit, with your base currency's coins on a line beneath. On the card only the currency code is coloured: your base currency in green, another stablecoin in amber (hover it to see that ApexQuant does not trade it).
Other stablecoins are not traded. More may follow.
Yes: change the currency in Settings (the Base currency setting). If your grids are holding coins or have open orders, ApexQuant asks what you would like to do with them, and you decide:
An open funding-harvest position must be closed before you switch. If you have an open DCA basket or directional position, "Sell now" sells it too; to wind down or move across instead, close it first.
Optional: you can also convert your leftover money in the old currency to the new one when the switch finishes: either only the money the bot was using, or all your free money in the old currency. It is off unless you tick it, and you see the estimated amount first. Money locked in orders you placed yourself on Binance is never touched. ApexQuant always uses the live exchange rate and never assumes one stablecoin equals another.
It costs a trading fee. Converting is a market trade on Binance, so Binance charges its trading fee (about 0.1%, read from your account for that pair). The estimate you see before you tick the box is already after the fee (for example “up to 1,000.00 USDT, about 999.00 USDC after the exchange's fee”), and the finish note reports what actually arrived, with the fee. Move across is not a trade (the coin stays in your account and only its records move), so it has no fee.
Just the coin: BTC, ETH, SOL. ApexQuant builds the pair from your account's currency (BTCUSDT on a USDT account, BTCUSDC on a USDC account). If you saved pairs in an older version, they are converted for you automatically. In Telegram, /buy BTC 50 and /sell BTC work the same way (a full pair such as BTCUSDT is accepted too).
.aqbackup file. When you create it, choose Routine (settings & trading state only) or Migration (also includes your credentials, passphrase-protected). To move to a new server: run bash install.sh, then apexquant --setup-gui and pick Restore from backup β it shows what will and won't be restored and prompts for anything missing. Your license key is never in a backup and can't be resent (security) β keep your purchase email from {email} and paste the key when asked. A lost passphrase means the backup is permanently unreadable.ApexQuant splits configuration into two layers by design:
π The .env file holds secrets and bootstrap infrastructure the bot needs before its own database is available, or that changes rarely:
BINANCE_API_KEY, BINANCE_API_SECRET, and the futures equivalents)These are read at startup, so changing any of them requires a bot restart. Secrets live only in .env β they are never written to the database.
ποΈ The database holds everything else β your day-to-day trading parameters and Elite AI provider keys β which you edit live from the dashboard's Bot Config tab: trading mode (paper / testnet / live), trading symbols, candle interval, strategy and risk settings, and your Anthropic/OpenAI/Gemini/DeepSeek/MiMo API key. Most apply immediately; a few (such as symbols or interval) note “restart required” next to the setting.
The rule of thumb: secrets and how the bot connects to Binance/Telegram go in .env; everything about how the bot trades, including your AI provider key, goes in the dashboard. See also “Where do I configure a given setting?”.
If a key exists in both: a value saved via the dashboard or apexquant --config-gui lives in the database and takes precedence over the same key in .env β .env is only read for a key the database has no value for. Editing .env for something you've already changed in the dashboard will appear to do nothing until you change it the same way you set it.
For backup and migration: use the built-in encrypted Backup & Restore in Settings β Backup & Restore. Choose Routine (settings & trading state only β credentials excluded, the default) or Migration (also includes your credentials, passphrase-protected; use when moving servers). Your license key is never in a backup and can't be resent β keep your purchase email safe. See Guide β Backup & Restore for full steps.
Yes — automatic daily updates are enabled by default. Each new version is verified (SHA-256) and installed automatically, with auto-rollback on failure; your .env, license and database are always preserved.
You can opt out any time with sudo aq-update.sh --disable (re-enable with sudo aq-update.sh --enable), or update manually with curl -fsSL https://get.apexquant.tech/update | sudo bash. Updates run around 04:30 server time; the log is at /var/log/aq-update.log.
Yes. If you have Telegram set up, the bot sends a message after each auto-update β confirming the new version, or letting you know if an update was rolled back and the previous version restored. No action is needed; the bot restarts itself. You can also see the last update status on the dashboard's Auto-update card at any time (works with or without Telegram).
When a safety limit pauses the bot, it places no new buys, but selling still works: it keeps watching your open positions and still sells them at their stop-loss, trailing stop or take-profit, your grids' sells keep working, and your own sells work too. “Managed” means watching and exiting, not buying more.
New trades resume by themselves only for two of the limits: the daily loss limit resets at your local midnight and the weekly one the following week. A losing streak or the minimum balance stays on until you press Resume (and Resume is refused while the balance is still below the minimum).
Buying is not allowed while a stop is on, so the grid's waiting buy orders are taken off Binance, once. If Binance does not confirm the cancel, ApexQuant tries again every minute until it does. Sell orders already on Binance stay and can still fill, and your coins stay yours. A halt blocks new buys only: stop-losses, take-profits and sells still work, and a grid still puts a sell on coin it holds. When trading resumes, the grid puts a buy back on every empty level below the price by itself. A stop never sells anything by itself; your own exit rules and your own sells keep working.
The log says the stop once, with the reason; reminds you every 15 minutes while it lasts (“Still halted after 1 h 30 min”); and says once when it is over. A stop that was in force when ApexQuant restarted comes back after the restart, and its message says its figures are as of the halt.
Your cash plus the cost of the coin you hold. It does not count coin price moves, so a price falling on coin you still hold does not trip it. Money that really leaves the account does count, such as a withdrawal or a Binance test-network reset. When the limit stops ApexQuant, the message says it plainly: “this counts your cash and the cost of the coin you hold, not coin price moves, so money that left the account, such as a withdrawal or a reset, counts too.” The daily limit lifts at your local midnight.
When ApexQuant starts, it first reads your account and restores any safety stop that was in force. No grid starts and no order is sent until that is done, so a stop can never be skipped by a restart. It takes a moment and the grid then starts by itself. If a stop is in force you see “Trading is halted, so no new grid is started. Press Resume when you're ready.”
ApexQuant trades in one currency. If that currency is below the smallest order while another stablecoin in your wallet holds at least that much, it tells you once, for example: “Your USDT balance is 0, but you hold 500.00 USDC. ApexQuant trades in USDT, so it can't use that. Switch your currency to USDC in Settings, or convert on Binance (Binance charges a small trading fee).” The dashboard keeps the notice for as long as it is true.
Nothing is switched or converted for you. Switch the currency in Settings, or convert on Binance (Binance charges a small trading fee). The notice clears by itself once the balance is back or the currency is switched.
A performance view scoped to your real live trades only β paper and testnet results are excluded, and it isolates your current strategy configuration so results from old settings don’t inflate the numbers.
It shows win rate, profit factor, expectancy, net and gross P&L (with fee drag broken out), and max drawdown. Statistically weak metrics like Sharpe are labelled “insufficient sample” rather than shown as if meaningful. Available on the dashboard Performance tab and via the /performance Telegram command. Works on all tiers.
Every action that moves money, or changes what the bot does with your money, needs two things: you are signed in (or it is your own Telegram chat), and you give your Admin PIN, or your 2FA code if you use 2FA. It is asked every time: a code you entered a moment ago for something else does not count, and Telegram's five-minute pass is not used for these. If you use 2FA and have no PIN, you type the 2FA code where the PIN would go.
That covers: buying and selling by hand (the dashboard buttons, and in Telegram /buy, /sell, /forcesell, /dca buy, /dca close, /dca sell); Stop & Liquidate and Reset & Rebuild; Resume, Restart and Stop & Quit; resuming, recentering or extending a grid; the currency switch; changing the strategy or the trading mode; saving or resetting any money setting (the grid and DCA budgets and size, capital, the loss limits, stops and take-profits, the coins you trade, funding harvest, the AI budget, your Binance keys); taking over coin (setting the cost basis, adopting, re-assigning); restoring a backup, resuming after one, and a backup that includes your keys; the licence key; the TradingView secret (TradingView is coming soon).
Emergency Stop is different on purpose. You may not have time to find your phone, so it asks for your dashboard password typed again, and nothing else: no PIN and no 2FA code. It works on every account. In Telegram, /stop and /emergency ask for nothing, because the chat is yours. Pausing or draining a grid keeps the PIN check it always had.
With neither a PIN nor 2FA set up, these actions do not run: ApexQuant says “To sell manually, set an Admin PIN or turn on 2FA first.” for a sale and “To do this, set an Admin PIN or turn on 2FA first.” for the others. (A new install can still enter its licence key before it has either.) It works the same in paper, testnet and live mode, and while trading is halted. ApexQuant's own exits (stop-loss, trailing stop, take-profit, a grid's sells, a DCA exit) are not your actions and never ask.
Yes. Every realised profit or loss figure ApexQuant reports β on the dashboard, in the Honest Performance Report, and in Telegram β is calculated net of trading fees for the full round trip (both the buy fee and the sell fee), not just one side.
Fees are computed from your effective Binance fee rate (including the BNB-discount rate if you use it), and where the exact fee Binance charged on a fill is available it uses that actual amount; otherwise it uses a close estimate, doubled to cover both legs. The Honest Performance Report additionally breaks out gross vs net so you can see the fee drag on its own.
Binance charges a lower rate to an order that waits on its book (a maker order) than to one that fills straight away at the market price (a taker order). Grid orders are normally maker orders; market buys and market exits are taker orders, so strategies that use more market orders pay more in fees. Your own rate is shown on Binance.
These are Binance’s fees, paid to Binance on any trading activity β ApexQuant does not add or take any fee of its own.
Smart TP is an opt-in, Elite-only second-layer exit that activates when a position blows strongly past its original take-profit. Instead of selling at the original TP price, the bot cancels that resting order and follows the move up with a configurable trailing stop.
The key safety property: the trail has a hard floor at the original TP price, so the exit can never be worse than a normal take-profit. If the move immediately reverses, you exit at (or above) the original TP. If it keeps running, the bot rides it and locks in a higher gain.
It is designed for trend conditions and is off by default. You can configure the arm gap (how far price must overshoot before arming), the trail percentage, and whether to require a BULL regime before arming. Find all settings under Bot Config → Features & Gates.
There are two paths β see the Uninstall section of the guide for full details and copy-ready commands.
Remove software, keep your data (safe default): your license key, database, and configuration stay on disk. Your license seat stays bound β reinstalling later re-attaches everything automatically.
curl -fsSL https://get.apexquant.tech/uninstall | sudo bash
Full factory reset (purge) β irreversible: deletes all local data including your license key, trade database, and configuration, and releases your license seat so you can activate on a different server. You will be prompted to type PURGE to confirm.
curl -fsSL https://get.apexquant.tech/uninstall | sudo bash -s -- --purge
In both cases your Binance exchange account itself is untouched β uninstalling or resetting ApexQuant does not cancel your Binance orders or move funds. (The one action that cancels orders is the dashboard's Switch Binance Account flow, which you trigger and confirm yourself β see the Switching Binance Accounts guide.) Manage any open positions on Binance directly if needed.
It depends on the kind of order.
A price band on the less urgent orders. DCA entries and take-profits, and Directional entries and partial take-profits, are sent as a limit order that must fill at once within a small band around the price the bot saw (0.3% by default), or it is cancelled. If an entry misses the band, it is skipped and never chased; the bot looks again at its next chance. If an exit misses, it goes to the market straight away so it still completes, and the log says so. Stop-losses, trailing stops, emergency sales, Stop & Liquidate and Funding Harvest stay market orders, because getting out matters more than the price; the grid uses limit orders anyway.
See it for yourself. The Performance tab has a card called “Fill quality of market orders”: per coin and reason, over the last 7 and 30 days, how far market orders filled from the price the bot saw (average and worst). On busy coins such as BTC and ETH the difference is usually small; on thin coins it can be larger (see “Which coins does ApexQuant work best on?”). A backtest uses assumed fees and slippage, not your real fills.
ApexQuant is built for steady, rule-based trading, not for speed. It is not a high-frequency system, and it does not need special hardware or a server next to Binance's.
If the live price feed goes quiet, the bot stops trusting it and uses ordinary price requests until it is back. The TradingView webhook has its own answer in the TradingView section.
It copes with both by itself.
One thing to know: while ApexQuant cannot reach Binance it cannot send a stop-loss or take-profit either. Telegram tells you when that is the case.
Nothing is cancelled or sold when ApexQuant stops. Your coins stay in your account, and orders already resting on Binance stay there and can still fill.
Every order is recorded with its own ID before it is sent. When the bot starts again it asks Binance about each one, books anything that filled, and does not send a duplicate. It then compares its records with Binance and books any fills it missed while it was down; they show as ordinary rows in Recent Trades. While it runs, it also re-checks recent fills against Binance every couple of minutes, so a missed update does not stay missed. If that check cannot finish at once, it keeps trying and says so in the log. A safety stop that was on when it stopped comes back after the restart (see “Why does my grid say ‘The safety monitor is starting’ after a restart?”).
What protects you while the bot is down, by strategy:
If a position matters to you, look at the dashboard after any outage.
Only the grid's sell orders sit on Binance. Everything else is watched by the bot and sent when it is due, as a market sell (the DCA and Directional take-profits first try a small price band and go to market if it misses; see the slippage answer):
So if the bot loses its connection or is switched off, only the grid's resting orders keep working; a DCA take-profit or a Directional stop will not fire until the bot is back and can reach Binance. A safety stop does not block exits: it stops new buys and never force-sells.
ApexQuant cannot prevent losses in a sharp move; coin you hold loses or gains value with the price. What it does:
No strategy is right in every market. Grid and DCA suffer in a long fall; Directional does not trade much in a choppy market; Harvest depends on funding being positive.
Realised counts only finished cycles, after fees: coin that was bought and then sold. Unrealised is the coin you still hold, valued at today's price against what it cost. Both can be true at once: a grid or a DCA basket can finish many small winning cycles while the coin it still holds was bought higher than today's price.
The two figures are shown separately and are not netted against each other. Unrealised moves with the price every second; it becomes realised only when the coin is sold. A realised gain is not a promise that the unrealised part will recover.
No. Every sale is limited to what that strategy bought itself. Coin you already held is recorded as your starting balance and is not touched.
Coin in your wallet that no strategy manages shows under “Other (not managed by ApexQuant)” on Holdings, with a note: “Some coins in your wallet aren’t managed by any strategy.” and a link to review them. ApexQuant never adopts it by itself: you can hand it to a strategy yourself, or sell it by hand (a sale needs your PIN or 2FA).
Yes, with care. ApexQuant tells your coin from its own by its records of the orders it placed itself.
Spot strategies (Grid, DCA, Directional): no. They buy and sell coin with your own money, with no borrowing, no margin and no short selling. You cannot be liquidated.
Funding Harvest is different. It is off by default and needs Pro or Elite. It buys the coin on Spot and opens a short of the same amount on Binance Futures, so the price moves of the two roughly cancel and it earns the funding payments. What to know:
See “How do I know if I need separate Binance Futures API keys?” and the Funding Harvest section of the guide.
Yes. The bot runs on your server, and your orders go straight to Binance. A short interruption in reaching ApexQuant's licence server does not stop trading, and you will see nothing alarming.
If it stays unreachable for a long time, the log warns you first (“Your licence could not be confirmed for a while. Trading will pause unless it can be. Check your internet connection.”). If it is still not confirmed after that, new trading pauses and you are told why; it resumes once the licence can be checked again. Selling and your orders already on Binance are not affected by the check.
It avoids look-ahead in how it uses prices, but a backtest is still only history, and it has limits you should know:
Treat a backtest as a way to compare settings and spot problems, not as a forecast. Our Terms say the same: backtests can suffer from look-ahead bias, survivorship bias and overfitting.
There is no safe number we can give you, and we do not publish a promised or typical drawdown. A drawdown is the fall from a peak, and it depends on your strategy, your coins, your settings and the market you run in. Three places show you real figures:
A coin you hold can fall a lot; the grid and DCA hold coin by design. Decide the amount you could lose without trouble, and size your budget by that.
We do not claim the defaults are optimal for any coin or period, and nothing in the product says they were tuned to a past stretch. Treat them as a cautious starting point.
The defaults below are the ones the bot ships with. You can change them in Bot Config.
Partly, yes, and it is better to know that. Grid, DCA and Directional buy and hold coin on Spot, long only (no short selling), so the value of what they hold moves with the price of those coins. If BTC falls, a grid or DCA basket on BTC falls with it until the coin is sold at a gain.
What the strategies add is how and when they buy and sell, not protection from a falling market. Funding Harvest is the exception: it holds the coin on Spot and an equal short on Futures, so it does not depend on the price direction, but it has its own risks (see the leverage answer above).
Yes: the safety monitor. Its default limits are a daily loss of 3%, a weekly loss of 10%, four losing trades in a row, and a minimum balance. You can change them in Bot Config. When one is reached:
It counts your cash plus the cost of the coin you hold, not coin price moves; see “What does the daily loss limit count?”. Directional also pauses its own new entries after a few stop-losses in a row, until a winning trade or the next day.
It works, but size changes the picture, and the bot does not check how deep the market is before it trades.
Start with an amount you are comfortable with, and increase it in steps while you watch real fills (see the slippage answer above).
On busy, liquid coins. The defaults are BTC and ETH, with the grid on BTC. Thin markets move against you when you buy or sell, and a coin that trades little can leave a limit order unfilled for a long time.
ML_CONFIDENCE_MIN, group ML Gate) or retrain with /trainml. (2) Regime is BEAR or CHOP β the bot waits for trending conditions. (3) FOMC blackout window is active β check with /fomc. (4) FRED macro score is blocking β check with /macro. (5) Fear & Greed is at extreme levels. (6) Daily loss limit already hit β check with /status. Use the Gate Audit view in the dashboard to see which gate is blocking.
No. Turnstile is a standalone Cloudflare product. You only need a free Cloudflare account (no credit card, no domain transfer). Your domain can use any DNS provider β Cloudflare, Route53, Namecheap, GoDaddy, etc. When creating the widget, enter your root domain (e.g., yourdomain.com) and Turnstile automatically covers all subdomains.
If you have Turnstile enabled and Cloudflare cannot be reached, login is denied until it can be. This is intentional β to enforce the protection you opted in to. To temporarily bypass during an outage, edit /root/apexquant-data/.env, blank out the two TURNSTILE_ keys, and run systemctl restart apexquant.
Start in the dashboard β no shell needed for most checks:
Shell commands (if you need them):
systemctl is-active apexquant or systemctl status apexquantjournalctl -u apexquant -n 200 --no-pagerjournalctl -u apexquant --since todayjournalctl -u apexquant --since "1 hour ago"journalctl -u apexquant -p warning -n 100 --no-pagerjournalctl -u apexquant -fjournalctl -u apexquant --since today --no-pager > apexquant-$(date +%F).logjournalctl -u apexquant | grep -iE "grid|ticker stale|kill|license"Privacy: before sharing logs with anyone, redact your chat IDs, IP addresses, and any license key visible in the output.
ApexQuant supports six AI providers for AI Commentary, set via AI Commentary Provider (AI_PROVIDER, group Elite AI):
anthropic. Available on Pro and Elite.openai. Elite only.gemini. Elite only.deepseek. Elite only. Very affordable ($0.14/$0.28 per 1M tokens).mimo. Elite only.custom + Custom Endpoint Base URL (AI_BASE_URL) + Custom Model ID (AI_MODEL), both in group Elite AI. Any OpenAI-compatible API. Elite only.Pro tier is limited to Anthropic. Elite unlocks all providers and provider choice. See the AI Commentary guide section for full setup instructions and pricing.
.env. You pay the provider directly at their published rates. ApexQuant does not proxy or mark up AI API calls β $0 AI cost to us.
bash install.sh followed by apexquant --setup-gui and choose Restore from backup. The setup wizard prompts for your license key during restore. Your license is bound to a machine ID β contact {email} with your purchase reference number BEFORE you start the bot on the new machine so we can release the old binding and let the new one register. See the User Guide for full backup & restore steps.
.env and restart the bot β your license continues to work normally.
/sell or the dashboard, or renew your license to resume trading. To resume, renew using the same email you registered with β your existing key and configuration are preserved and the bot resumes automatically (see "How do I renew my license?" below). No new key is issued.
Quick guide:
Dashboard β β Bot Config is where you change settings β trading mode (paper / testnet / live), trading symbols, candle interval, strategy and risk parameters, and your Elite AI provider key (Anthropic, OpenAI, Gemini, DeepSeek, or MiMo). Most apply live, no restart needed; a few note “restart required” next to the setting.
Edit in .env (then restart the bot) only for what genuinely cannot be set in Bot Config: Binance API key and secret, dashboard password, admin PIN, session secret, FRED API key, Telegram token and chat ID, Turnstile keys, and timezone. These are secrets or connection settings read only at startup.
If a setting has a Bot Config field, that's the way to change it β not .env. A value saved via the dashboard takes precedence over the same key in .env, so editing .env for something already set in Bot Config has no effect. For the reasoning behind the split, see “Why are some settings in .env and others in the database?” in Setup & Configuration.
The Profile tab is your single place for personal identity, authentication, and license info.
Sections:
.envThe π Performance tab shows all your performance data with a pill switcher at the top to toggle between Daily, Monthly, and Yearly views. Each view shows a bar chart plus a detail table for the selected period.
Yes β an equity curve chart is shown at the top of the Live tab, just below the balance and P&L stats. It plots your account balance from your earliest equity snapshot to now, showing your overall P&L percentage and the date range. It's a quick visual reference for your bot's long-term performance.
No β a small difference is normal and clears on its own. ApexQuant cross-checks your tracked holdings (coins being traded + managed coins + any set-aside + cash) against your portfolio total on every pass.
The most common reason is simple market volatility: the two totals are valued a moment apart, so when a coin's price is moving, each one gets marked at a slightly different price β a few cents or dollars that disappears on the next check once they line up again. There's nothing to do.
How big is "small"? Judge the difference as a percentage of your account, not the dollar figure alone β a $0.75 gap on a $400,000 book is a tiny fraction of a percent (just market movement), not a real discrepancy.
When it's worth a look: if the difference is large and doesn't clear after repeated checks, it usually means your wallet holds some coin ApexQuant has no purchase record for. The bot simply leaves that coin alone β it will never buy or sell it on its own. This is a bookkeeping mismatch, not a trading fault: nothing has been or will be sold automatically. That coin stays yours to keep or sell as you wish. You may also see this for a specific coin as a [TALLY] message (e.g. “BCH: tracked and wallet disagree”) — it means the same thing, just for that one coin.
Another stablecoin you hold (for example USDT on a USDC account) is listed under "Other" and counted in the grand total, but never in the bot's total, so it does not affect this check.
Yes β ApexQuant dashboard is now a Progressive Web App (PWA). On your mobile browser, visit your dashboard URL and use "Add to Home Screen" (iOS Safari β Share β Add to Home Screen; Android Chrome β menu β Install app). The dashboard then launches in standalone mode (no browser bars) like a native app. Repeat visits load faster from cache.
Note: the PWA caches static dashboard assets (HTML, JS, icons) but always fetches fresh data from your bot's API endpoints. Your trades, balances, and P&L are always live.
The π EMERGENCY STOP button sits in the dashboard header, top-right area. It's visible from every tab (Live, Performance, Profile, Bot Config, etc.) so you can halt the bot quickly regardless of where you are in the dashboard. Clicking it asks you to confirm, and to type your dashboard password again (only if you have set one), then halts all new buys. It never asks for your PIN or a 2FA code, so you can stop the bot fast; selling still works while it is stopped.
On mobile (narrow screens), the button shrinks but stays visible.
/stop_quit in Telegram) does the same halt, plus it cancels all ApexQuant's resting orders and releases its management of every position β your coins stay in your Binance wallet, unsold. Use this when you want to leave ApexQuant and manage your funds yourself on Binance.
Go to Dashboard β Profile tab β Change Password. Enter your current password, your new password (minimum 8 characters), and confirm. Your existing session will be logged out and you'll be redirected to log in with the new password.
The new password is hashed with bcrypt and stored in your database. The DASHBOARD_PASSWORD in .env is used only as a bootstrap value on first install and as a recovery fallback if the database is lost.
Lost password recovery: Set DASHBOARD_PASSWORD to a new value in .env, add RESET_DASHBOARD_PASSWORD=1, and restart the bot. Log in with the new password, then remove RESET_DASHBOARD_PASSWORD from .env and restart again. This resets only the password — your trade history, settings, and open positions are untouched. Never delete apexquant.db — it stores all your trades, equity, settings, and open-position state.
Open dashboard → Profile tab → π Admin PIN section. Leave "Current PIN" blank for first-time setup, enter a 4–8 digit New PIN, confirm, and click Update PIN. To change an existing PIN, enter the current one first.
PIN is stored as a bcrypt hash in the database β never plaintext.
Set APEXQUANT_PIN to a new value in .env (or leave it unset to clear the PIN), add RESET_ADMIN_PIN=1, and restart the bot. Then open dashboard → Profile → Admin PIN to set a fresh PIN, and remove RESET_ADMIN_PIN from .env and restart again. No database editing required.
The PIN (or your 2FA code, if you use 2FA) is the second protection, after being signed in, on every action that moves money or changes what the bot does with it in both dashboard and Telegram: manual BUY / SELL, Resume, Restart, Stop & Quit, Mode Change, a change to a money setting, and similar. It is independent of your dashboard password. It is asked every time, never remembered. After several wrong attempts it is locked for a while. Emergency Stop is the one exception: it asks for your dashboard password typed again (when you have one), never a PIN or a 2FA code, so you can stop the bot fast. Resume and Stop & Quit do need the PIN or 2FA code. See “Which actions ask for my PIN or 2FA code?” for the full list.
/sell SYMBOL 30% / /sell SYMBOL 0.5 directly. Elite-tier accounts also get AI commentary on whether to exit now or let the bot manage the exit.Over time, a very small leftover amount of a coin can build up β too small to trade on its own because exchanges enforce a minimum order size (both a minimum quantity and a minimum dollar value per order).
ApexQuant collects these into a "Small leftover amounts" card in the Holdings tab, so they're visible and tracked β never silently discarded, your coins are always kept.
Two manual choices per coin, once it's large enough to act on:
Both buttons stay disabled together, with an explanation, until the amount reaches the exchange's minimum β the row shows roughly how much more it needs. Adopting a still-too-small amount wouldn't actually help (there's nothing to trade it with yet), so it isn't offered until it would. The card also shows each amount's average cost and a +/- indicator, just like the open-positions view, so you can see whether selling now would be a small gain or loss β or "cost unknown" when there's no recorded cost for a genuine rounding remnant.
Nothing here is ever auto-sold β every action is your choice.
ANTHROPIC_API_KEY, group Elite AI).
Starting in v4.9.5, all AI features in ApexQuant are opt-in by default. This includes the Weekly Digest that previously sent every Monday at 9am.
Why the change? To put cost control in your hands. AI features consume your provider credits (Anthropic, OpenAI, Gemini, DeepSeek, MiMo, or custom endpoint). Defaulting them OFF means you only pay for features you actually use.
To re-enable Weekly Digest: dashboard β Settings β Elite AI group β toggle AI Weekly Digest (Mon 9am) to Enabled. Save changes. Next Monday at 9am, the digest will fire normally.
AI providers (Anthropic, OpenAI, Google Gemini) enforce per-minute request limits, especially on free or low-volume API tiers. When ApexQuant detects 3 or more HTTP 429 (Too Many Requests) responses within 5 minutes, it auto-pauses calls to that provider for 10 minutes to prevent escalating rate-limit penalties or temporary IP bans.
Typical free-tier limits (as of May 2026):
Options when rate-limited:
This auto-pause is informational only and never affects trading decisions — all auto-trading uses rule-based logic, not AI.
If your primary AI provider (Gemini, OpenAI, or Anthropic) hits a 429 rate-limit error, ApexQuant can automatically retry with a fallback provider.
How to enable:
anthropic, openai, gemini, deepseek, mimo, customExample: If your primary is Gemini and you have Anthropic + OpenAI keys configured, enter anthropic,openai (or any combination of supported providers). When Gemini rate-limits, the bot will silently try Anthropic, then OpenAI if Anthropic also fails.
Verify it’s working:
journalctl -u apexquant -f | grep -E "ELITE-AI|Trying fallback"
You should see log lines like [ELITE-AI] gemini text API error: HTTP Error 429 followed by [ELITE-AI] Trying fallback provider: anthropic.
Providers without keys are auto-skipped. If you list a provider you don’t have a key for, the bot moves to the next one in the chain.
Cost note: You’re billed by whichever provider actually answers. If your primary is cheap and fallbacks are expensive, factor that into your monthly AI Budget Cap (Settings → Elite AI → AI Monthly Budget Cap).
DCA_TP_PCT), Trail Arm Threshold (%) (DCA_TRAIL_ARM_PCT), both group DCA). The bot intentionally hides individual exit controls in DCA mode to avoid confusion β the basket controls exits, not individual legs. If you want per-buy stop-losses, switch to Directional strategy via Settings β Primary Strategy (PRIMARY_STRATEGY).
A composite signal that scales your DCA buy sizes based on market fear. Bigger buys when 5 macro indicators point to panic, smaller (or skipped) when greed dominates.
Weighted combination of: Fear & Greed Index (35%), FRED Macro Health (25%), News Sentiment (20%), Market Regime (10%), FOMC Week (10%). Each signal is normalized to 0.0–1.0 then weighted into a composite score.
No. Bigger buys at lower prices is the entire point — you accumulate more units when prices are low. Over a full market cycle this lowers your average cost basis compared to classic DCA.
Balanced (default) scales 0.5×–2.0× and skips buys in greed zones. Aggressive scales 0.5×–3.0× — bigger swings, only for customers comfortable with higher drawdowns mid-cycle.
Yes. Set Buy The Dip (Smart DCA) (DCA_BUY_THE_DIP, group DCA) to off, or pick "pure" mode. Classic DCA behavior
is fully preserved when toggled off — zero behavior change.
/dca sell SYMBOL 30% (or units). The basket is reduced proportionally and keeps its same average entry price; the remainder stays under automatic management (the basket take-profit continues on whatβs left). What you canβt do in DCA is exit one specific buy/leg on its own β DCA treats all buys as a single combined basket with one average entry, so a partial sell trims the whole basket evenly rather than picking out an individual entry. For per-position stop-loss/take-profit on each entry, use the Directional strategy. To close the entire basket at once, use the dashboard SELL at 100% or Telegram /dca close.GRID_BREAK_ACTION): when price exits the range the bot can close (default β release inventory to the exit manager's take-profit/trailing protection, never force-sold), pause (keep everything, wait), or hold. Or turn on Smart Grid to widen the range and keep trading instead of stopping (see the Grid Bot guide). There is no separate percentage stop-loss; you manage downside by choosing your range and break action appropriately for the asset's volatility. Setting a narrower range or using close limits how far inventory can run against you, but does not eliminate downside on a spot asset.
GRID_BREAK_ACTION, Settings β Grid), only used when Smart Grid is off:GRID_SYMBOLS) in the Bot Config tab (Grid group) to a comma-separated list of coins, e.g. BTC, ETH, SOL, then restart the bot (just the coin: ApexQuant builds each pair from your account's currency). Each symbol gets an independent grid with its own price range, inventory, and PnL. Your Total Allocation (USDT or USDC) (GRID_TOTAL_ALLOCATION_USDT, group Grid) is split equally β $1000 across 4 symbols allocates $250 per grid. Pro tier runs a grid on 1 symbol; Elite on up to 5 symbols. Per-symbol Pause / Resume / Reset controls appear in the dashboard Live tab and via Telegram (/grid pause BTC).
GRID_AUTO_RANGE_PCT, group Grid)). Use this to re-centre the grid after price has moved far from your original range. Sells the existing position first. Cannot be undone.GRID_TOTAL_ALLOCATION_USDT), ApexQuant deploys the extra amount as new grid levels and leaves your existing open orders untouched β nothing is cancelled, no working orders are lost. The additional capital simply funds more levels at your current level size. You only need enough free balance to cover the increase itself (not your whole new total), so topping up your account and then raising the allocation works smoothly.GRID_AUTO_RECENTER_ON_IDLE, Settings → Grid, Smart Grid only, off by default) and when the grid has reached its size limit AND price breaks a full grid-width clear of the range, the bot recenters around the current price automatically β so a strong trend doesn't leave the grid parked while you're away. It's the same Recenter you'd run by hand: your held coins, cost basis, profit, and settings are unchanged, only the range moves β nothing is ever sold to do it. A brief spike won't trigger it, it won't thrash in a choppy market, and there's a daily cap. By default it only acts on an upside break; you can allow downside too, which deploys cash into a falling price (understand the risk first). See the Grid Bot guide.
In a strong, sustained rally, price can climb above your grid's range and keep going. A grid profits from price moving up and down within a range β once price leaves the top and stays there, there are no more sells to cycle, so the grid goes quiet. This is normal grid behavior, not a fault.
Your coins are safe the whole time β nothing is sold at a loss, and any inventory you're holding simply waits (and is worth more as price rises).
What the bot does about it depends on your settings:
In a very fast market-wide melt-up where many coins pump at once, it's normal to see several grids parked above range at the same time β each is safe, holding its coins, waiting to resume. Recenter the ones you want to keep trading at the new prices, or let Auto-Recenter handle it.
PRIMARY_STRATEGY, group Features & Gates) determines which strategy is active: directional, dca, or grid (a tradingview option is coming soon). If you want to run both a directional strategy and a grid on the same or different symbols, you need to deploy two separate ApexQuant instances β each with its own VPS, Binance sub-account, and license key.
These are the two exposure controls that cap how much capital a DCA basket can deploy:
Both are editable in Settings β DCA (PIN-gated). They take effect on the next restart. For a hard account-wide ceiling, also set Trading Capital (CAPITAL_MODE) to fixed and Fixed Capital Amount (USDT or USDC) (TRADING_CAPITAL_USDT, group Capital) in Settings β Capital.
No β DCA is designed to hold through unrealized drawdowns and average into weakness. The bot only stops adding legs when the budget or max-legs cap is hit. It does not halt on unrealized basket losses.
Kill-switch behavior by strategy: Every strategy uses the same measure for the daily and weekly halt: your cash plus the cost of the coin you hold. A price falling on an open basket or grid does not trigger a halt; money that really leaves the account, or a realised loss, does. Unrealized basket drawdown at 20/35/50% shows as warnings in the dashboard budget cell β informational only, never a halt.
To cap total capital at risk, set Trading Capital (CAPITAL_MODE) to fixed + Fixed Capital Amount (USDT or USDC) (TRADING_CAPITAL_USDT, group Capital). For a per-symbol limit, use DCA Budget per Symbol in Settings β DCA.
Each line in the Grid order list is an order, and only some orders are positions (coin you actually hold right now):
So a "waiting" buy with no open position is normal and expected β the grid is simply waiting to buy the dip. You'll only see a position once that buy fills and the line flips to "Bought … holding". A buy can sit unfilled for days if price never reaches its level; that's the grid doing its job.
The grid reconciles its orders against the exchange continuously, so the dashboard reflects your real open orders. You can always cross‑check under Open Orders on the exchange.
Each grid level has a set budget. When ApexQuant buys at a level, the exchange sometimes fills that single order in a few pieces over a short time — this is normal, and depends on who else is trading at that moment, not on anything ApexQuant does differently.
ApexQuant records each piece as it fills, so you may see two or three rows in Recent Trades at the same price and level that, added together, come to that level's full amount. They are one grid buy completing, not separate trades — the same applies to sells.
If you want to confirm this yourself, add up the quantities on the same-price rows for that level — they'll sum to the level's own budgeted amount.
Yes β if Range Break Action (GRID_BREAK_ACTION) = pause and Grid Auto-Resume (GRID_AUTO_RESUME) = true (the default, group Grid), the grid re-activates itself as soon as price drifts back inside your configured range (with a small 0.1% buffer to prevent flapping at the boundary). You'll receive a Telegram notification when it resumes.
Auto-resume is skipped if:
/grid pause) β manual pauses always require a manual /grid resume.To disable auto-resume and always require a manual resume, set Grid Auto-Resume (GRID_AUTO_RESUME) to false in Bot Config β Grid.
No — by design. Grid is a rule-based range trader: it places and replaces limit orders at the fixed price levels you set, and profits from price oscillating inside your range. It deliberately does not use the market-signal pipeline (regime, Fear & Greed/sentiment, macro/FOMC, funding, 200-week MA), the ML gate, the 8-factor signal engine, or AI Commentary.
Gating a range strategy by trend signals would stop it buying the very dips it's meant to buy. Grid does obey the shared safety rails: a kill-switch halt or a Binance API outage stops it immediately (a halt also takes its waiting buys off Binance, once, and the grid puts them back when trading resumes), and it never acts on an invalid price.
Because grid ignores trend signals, it can keep buying within range during a downtrend — that risk is managed by your range bounds, Range Break Action, baseline cap, and the Drain control, not by entry signals. The signal pipeline applies to Directional and DCA; see the Guide's strategy signal matrix.
A limit order fills when the market actually trades through its price and the orders ahead of it in Binance's queue have been served. Touching a price on a chart does not always mean a trade happened at it, so a buy can sit unfilled while the price brushes its level. ApexQuant books a fill only when Binance says the order filled, never on a guess, so the order simply waits until the price trades through it again.
Buys are placed only on empty levels below the current price, so a grid never has all its money in orders at once. The grid card says which reason applies:
None of these loses money; the card's note says “Nothing sold, nothing lost.”
Coin the records hold that no level currently carries is kept aside, never lost. The grid does not sell it below its cost. As soon as a sell fills and frees a level above its cost, the grid puts a sell on that coin by itself. If it was bought above the top of the range, it stays until the range reaches above its cost (a recenter or an extension).
A leftover that is too small for Binance to sell on its own stays in your account and is shown as such; nothing is asked of you.
Binance only accepts prices in fixed steps (the tick size) and amounts in fixed steps (the lot size) for each coin. ApexQuant rounds a price to the nearest step and rounds an amount down, so an order can sit a hair away from the exact level, and a quantity can be a hair smaller. If the bot cannot read a coin's steps it places nothing and tries again, rather than send an unchecked price.
.env directly β the bot loses access to the old account the moment keys change, and any open orders are stranded.